Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Работаю с ИАР-скими компиляторами. Как определить является ли число float в...(+)

Отправлено Беня 19 октября 2007 г. 14:21


Текст заголовка сообщения полностью: Работаю с ИАР-скими компиляторами. Как определить является ли число float валидным или же в памяти какой-то мусор ? (+)

Помню давно писал прогу для MSP430 и использовал функцию sptintf для подготовки строки вывода на ЖКИ. И прога вдруг перегружалась. И ватчдоги смотрели и на аппаратуру грешили - все нормально. И выяснилось, что по ошибке в качестве 4-байтового float записывали число, у которого все байты были 0, а один младший бит в младшем байте был равен 1. И sprintf при работе с этим значением сходила с ума и перегружалась. Т. е.

typedef union __my_float {
unsigned long l ;
unsigned char c[4] ;
float f ;
} my_float ;

volatile my_float f1 ; // f1 - union - long и float по одному адресу
char str[ 80] ; // строка для вывода

f1.l = 1 ; // обращаемся как к long и записываем 1
sprintf( str, "%f", f1.f) ; // выводим как float - зависает

и все зависало. Возможно, сейчас уже что-то исправили (хотя я и не уверен), но раньше sprintf при попытке вывода мусора могла зависнуть.

А теперь вопрос - а как в ИАР-е определить, является ли число нормальным (надо для ИАР AVR) или же это мусор ? Может, есть какие-нибудь специальные функции ?
В файле float.h есть константы FLT_MIN_EXP, FLT_MAX_EXP, FLT_MIN, FLT_MAX - может через них ? А вообще в стандарте IEEE есть что-нибудь об этом ? А может в Си есть какая-нибудь функция для определения ?



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 34:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru