Нормальное решение на все случаи жизни в статье Конвертируем вещественные данные (float, single (MatLab)) из десятичной системы счисления в hex
Для чего требуются костыль?
Если мы после конвертации по способу, описанному по ссылке выше, загрузим полученный *.dat файл в Code Composer Studio (т.е. 32 битными hex’овыми значениями вещественных сэмплов),
настроим параметры отображения в Graph tool следующими:
то мы ничего не увидим. Сигнала нет. есть мусор.
Почему?
Смотрим дамп памяти.
Оказывается, что Code Composer берет от 32х битных float’овых переменных только младшие значащие 16 бит, а старшие 16 бит попросту выкидывает =(. Взятые младшие значащие 16 бит он их складывает друг за другом в памяти, тем самым образуя 32 битные переменные. Корявость, однако!!!!
Итак, мы должны либо покапаться в CCS и изменить какую-то его функцию по заполнению памяти, либо мы можем подстроить генерирующий скрипт под глюк CCS.
В рамках первого подхода посмотрел *.gel файл, но ничего не нашел. Что еще смотреть - не знаю, на форуме Electronix пока не ответили.
Решил обходить проблему в рамках второго подхода. Переделал
скрипт так, чтобы он разбивал 32 битное число пополам и две половинки
ставил друг под другом на разных строчках: младшие значащие 16 бит на
строчке выше, чем старшие значащие 16 бит.
Сам скрипт можно посмотреть здесь
Результат работы скрипта:
Дамп памяти:
Все ОК!
Напоминаю для сравнения какой сигнал с шумом мы изначально имели:
Осталось ручками добавить инициализирующую первую строчку, и переподключить данный файл к Code Composer’у.
Дамп памяти:
Все ОК!
Напоминаю для сравнения какой сигнал с шумом мы изначально имели:
Комментариев нет:
Отправить комментарий