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

 
 
> Float в MSP430
SofuS
сообщение Nov 2 2006, 09:46
Сообщение #1





Группа: Новичок
Сообщений: 2
Регистрация: 9-10-06
Пользователь №: 21 115



Есть: контроллер MSP430F149. Контроллер передает по UART(через СОМ) данные, которые я принимаю на клиентской программе, написанной на С++. Данные на мк представлены в float. Если предварительно
библиотечной функ-ей на самом контроллере переводить данные из float в двоично-десятичные, то я принимаю корректные значения. Но время для обработки в контроллере критично и оч. желательно передавать сразу в float, как есть. Передавая float и принимая их сразу в C++ тоже как float ...я получаю не совсем то, что должно быть. Вопрос : TI-ский float как-то отличается от общепринятого (IEEE)?Или у меня ошибка в сишной проге и все должно работать верно? Если TI float отличается, то не поделитесь сцылками с описанием TI float -а.(сам не нашел). Заранее благодарен.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
VAI
сообщение Nov 2 2006, 11:45
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



применяйте одинаковое выравнивание в программе для MSP и в программе на РС.
Про компилер от TI сказать ничего не могу, для MSP использую ИАР.
Для программ в контроллер и в РС используется один и тот-же заголовочный файл с описанием применяемых данных.

Описывать данные приблизительно так:
Перед описанием выравнивание делаете как надо, после - возвращаете назад.
Не делайте для MSP выравнивание по байтам (#pragma pack( 1 )) - код будет толстый и плохой
Код
/* -------------------------------------------------------------------------------------------------------- **
*  Директива "#pragma pack()" работает одинакого в "MSP430 IAR C/EC++ Compiler" и "Borland C++Builder" и "VC"
* -------------------------------------------------------------------------------------------------------- */
#pragma pack( 2 )     // выравнивание по 2-м байтам - используем это выравнивание, в MSP дает оптимальный код
// ДЛЯ ВСЕХ КОМПИЛЯТОРОВ!!! Если несколько char-ов подряд в структуре, то компилятор размещает char-ы компактно,
// с выравниванием по байтам, только последний нечетный выравнивает по словам!

#define flt_cnt   4                     // Количество каналов, обрабатываемых фильтром
#define bas_cnt   3                     // Количество основных каналовавтокоррекций и т.д.


typedef struct              // Константы, меняемые при регулировке
{ unsigned short    Firm_number;        // заводской номер прибора
  unsigned short    Firmware_ver;       // Версия программного обеспечения прибора (printf( "\fВерсия программного\nобеспечения: v %x.%02x", ( Firmware_ver >> 8 ), Firmware_ver & 0xff );)
  double            Ku[flt_cnt];       // чувствительность по всем каналам
  float             Pr_ekv;
  double            M_press;
  float             accuracy_gase[bas_cnt]; // округление при выводе
  float             auto_zero_val[bas_cnt];
  ser_io_koef       net_param;
  Temp_norma        T_norma;
  press_difference  Press_diff;
  FLAG              ini_flag;
} Flash_Constant;

#pragma pack()                          // выравнивание по умолчанию


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post



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

 


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


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