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

 
 
> 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
Ответов
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



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

 


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


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