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

 
 
> КИХ фильтр в CCS под C55xx
Skaf
сообщение May 15 2011, 11:32
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 228
Регистрация: 4-06-09
Пользователь №: 49 940



Всем привет. Стоит задача написать простенький КИХ фильтр под процессор C55xx фирмы TI в Code Composer Studio.

Это домашнее задание в универе. СИльно не пинайте пожалуйста, т.к. пока не шибко в этом разбираюсь.

Я написал КИХ фильтр для компьютера на обычном Си. Проверил, все работает. Но в CCS не хочет.

Я сразу подумал, что дело в типах данных. Оказалось, что sizeof(int) у CCS равен 1, sizeof(long int)=2, sizeof(long long int) = 4

Я создал свои типы

typedef long int myINT16;
typedef long long int myINT32;

Создал бинарный файл, куда записал 0x01 0x02 0x03 0x04

Делаю чтение
Код
fread(&inValue, sizeof(myINT16), 1, fp);


Переменная inValue становится равной 65538, что 10002 в HEX.
На копьютере был бы результат 0201.... а тут не пойми что..

Собственно вопрос- как всетаки сделать нормально, чтобы получать ожидаемые данные. Вообще эти процессоры BigEndian или LiteEndian или какие вообще?

Заранее спасибо.

Сделал файл 0x12 0x34, в переменную считалось 0x120034 откуда 00 по середине взялся?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
alexeyv
сообщение May 16 2011, 06:51
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 298
Регистрация: 26-01-09
Из: Пермь
Пользователь №: 43 940



Насчет типов - почитайте раздел 5.3 в C55x Optimizing C/C++ Compiler User Guide (spru281f)
Особенно это:
Код
Note: C55x Byte is 16 Bits
By ISO C definition, the size of operator yields the number of bytes required
to store an object. ISO further stipulates that when sizeof is applied to char,
the result is 1. Since the C55x char is 16 bits (to make it separately address-
able), a byte is also 16 bits. This yields results you may not expect; for exam-
ple, sizeof (int) == 1 (not 2). C55x bytes and words are equivalent (16 bits).

Если кратко и по-русски, то тип int хоть и 16-битный, но sizeof'ом будет все равно 1, а не 2

В Вашем примере вы объявляете 0x12 и 0x34 - а это два разных байта (8 бит!!), которые в памяти процессора записываются как 0x0012 и 0x0034 (16 бит)
Для получения правильного результата необходимо записать 0x1234 (16 бит)
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:38
Рейтинг@Mail.ru


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