реклама на сайте
подробности

 
 
> IAR C++ ostream трабла, ostringstream, ostream
segment
сообщение Mar 30 2009, 16:59
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 10-08-06
Из: Санкт-Петербург
Пользователь №: 19 471



Нужно было быстро наваять дебаг небольшой, начал скрябать с++ и естественно заюзал ostringstream, нормально скомпилилось и прошилось.
Собсно сама проблема - в ostream лезут только строки, а вместо целочисленных значений появляется один символ..
Вот к примеру вывод строки - нормально, выводит.
Код
ostringstream ost;
ost << "Hello, world!";
*uart << ost.str() << endl;

Вот решил сконвертировать значение в строку
Код
ostringstream ost;
ost << 12345;
*uart << ost.str() << endl;

Оператор то перегружен для такой операции, но вот вместо ожидаемого "12345" в консоли - я вижу "d", ну само собой понятно что d это dec, я пытался вывести в шестнадцатиричном - получал "h".. что нужно переопределить то для работы корректной?

Сообщение отредактировал Сега - Mar 30 2009, 17:00
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 3)
HARMHARM
сообщение Mar 30 2009, 20:18
Сообщение #2


читатель даташитов
****

Группа: Свой
Сообщений: 853
Регистрация: 5-11-06
Из: Днепропетровск
Пользователь №: 21 999



Немного офф.
А почему через stream? Я понимаю - с++, сам на нём пишу, но мне кажется, что printf куда гибче.
Я делаю так:
Есть глобальная функция:
Код
void debugPrintf( char *arg_list, ...);

Есть файл конфигурации проекта в котором написано:
Код
#ifndef    RELEASE
    #define USE_DEBUG(...)              debugPrintf(__VA_ARGS__)
    #define USE_DEBUG_IAP(...)          debugPrintf(__VA_ARGS__)
#endif

После этого в каждом файле где нужна отладка:
Код
#ifndef USE_DEBUG_IAP
    #define USE_DEBUG_IAP(...)
#else
extern void debugPrintf( char *arg_list, ...);
#endif

Потом в коде:
Код
    if ( iap(FLASH_READ_BOOT_CODE_VERSION, 0, 0, 0, 0) ) USE_DEBUG_IAP("Error reading boot code version\n");
    else USE_DEBUG_IAP("Boot code version: %d.%d\n", (uint8_t) (iap_res[1]>>8), (uint8_t) iap_res[1]);

И всё. Дебаг включается/выключается автоматически по опциям. Одна строчка в коде, никаких #ifdef кроме как в начале.
Вывод всего чего угодно.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 30 2009, 20:26
Сообщение #3


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Банальный CppTutor.cpp из папки tutor тем не менее работает. Может натолкнёт на мысли простое сравнение опций проекта.
Go to the top of the page
 
+Quote Post
segment
сообщение Mar 30 2009, 20:58
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 352
Регистрация: 10-08-06
Из: Санкт-Петербург
Пользователь №: 19 471



2HARMHARM: то что я привел это просто тест. А дебаг у меня - отдельный кольцевой буффер с сообщениями, при необходимости который я вывожу. Ну и так далее..

Спасибо, я тупо забыл выставить настройку библиотек. У меня просто стояло None, естественно он у меня отрезал тот метод конвертирования строк.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 20:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01392 секунд с 7
ELECTRONIX ©2004-2016