Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: КИХ фильтр в CCS под C55xx
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Skaf
Всем привет. Стоит задача написать простенький КИХ фильтр под процессор 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 по середине взялся?
alexeyv
Насчет типов - почитайте раздел 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 бит)
Skaf
Цитата
Если кратко и по-русски, то тип int хоть и 16-битный, но sizeof'ом будет все равно 1, а не 2


Ну в таком случае объявил переменную как int.

читаю файл с содержимым 0x12 0x34 так

Код
fread(&inValue, 2, 1, fp);


Жестко указываю что читать 2 байта. Смотрю что в памяти творится- переменная 0x0012, а следующая часть памяти 0x0034- там кстати уже другая переменная. Он в ее память залезает. Вобщем не понятно как сделать чтобы переменная стала таки 0x1234
alexeyv
А если так:
Код
fread(&inValue, sizeof(int), 1, fp);


Но это как-то странно
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.