Нравится? Делимся информацией!

среда, 28 ноября 2012 г.

“Костыльное” решение для Code Composer Studio по конвертации float из десятичной системы счисления в hex



 Нормальное решение на все случаи жизни в статье  Конвертируем вещественные данные (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’у.


    Дамп памяти:

        Все ОК! 
    Напоминаю для сравнения какой сигнал с шумом мы изначально имели: 
     
  • Комментариев нет:

    Отправить комментарий