Перейти к содержанию
    

о технологии программирования TMS320F28235

Все ближе подступает момент, когда мне предстоит пройти к следующему этапу разработки: написанию кода под TMS320F28235. Я делаю цифровой радиоприемник: задача сделать цифровой детектор АМ сигналов, чтоб определять их амплитуду, дополнительные параметры (РГМ, СГМ, частоты двух тональных сигналов в огибающей, а также частоту несущей (с меньшей конечно же точностью) ), плюс функции управления АРУ (через ЦАП), индикатором, температурным датчиком, DDS (гетеродинами в радиотракте), протоколами общения с писюком.. примерно так...

 

в какую сторону плыть, что использовать? expressDSP c DSP/BIOS или что? .. говорят, тут на форуме DSP/BIOS устарел (почему???) ,есть какой-то SYS/Bios (вроде ось улучшенная от TI) ? или все писать классически, с функцией main{}, в которой бесконечный цикл, свичи, прерываемые прерываниями и т.д... или устанавливать Линукс (и как тогда в этой области быть, куда плыть - в ней вообще профан).... как, что, куда???? просто хочется идти в ногу со временем ,т.к. надо бы завершить этот проект, да ,к сожалению, уходить в другое место работать... А так как молодой, то многие предприятия еще и "фыркаются"... вот и хочется что-то современное использовать. Помогите, подскажите =)

 

Писал программки либо на ассемблере, но в основном на С обычные: с майн, прерываниями, бесконечными циклами. Все области мне сейчас не под силу обхватить, чтоб самому принять решение. Вот прошу помощи у корифеев!

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Месяц назад был перед таким же распутьем. Линукс отвергли почти сразу, стоило лишь получить консультацию у специалиста.

main(){} c бесконечным циклом при наличии большого количетва задач -- тот еще геморой: по сути писать свой планировщик задачь. Подумав, порисовав графы, решили не изобретать велосипед -- использовать DSP/BIOS. Сейчас потихоньку разбираемся.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Месяц назад был перед таким же распутьем. Линукс отвергли почти сразу, стоило лишь получить консультацию у специалиста.

main(){} c бесконечным циклом при наличии большого количетва задач -- тот еще геморой: по сути писать свой планировщик задачь. Подумав, порисовав графы, решили не изобретать велосипед -- использовать DSP/BIOS. Сейчас потихоньку разбираемся.

Спасибо!

Ну, я Линукс устанавливать сразу не хотел, т.к. рано еще (сначала на комп его установлю, покручу..), да и плату под него переделывать не хочу (надо же определенный объем памяти как минимум обеспечить). С main{} да - геммор, но видел большие проги, написанные именно так (в силу древности). и вот я тоже прихожу к выводу, что стоит DSP/BIOS крутить. Будем крутить вместе =).... а SYS/bios отметается, т.к. он вроде как расширенная версия dsp/bios с возможностью портирования его на MSP'шки.

 

 

Подумав, порисовав графы

Графы рисовали за тем, чтобы наглядно отобразить все число состояний, в которых может быть процессор при работе, типа, алгоритм так визуализировали ???

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Графы рисовали за тем, чтобы наглядно отобразить все число состояний, в которых может быть процессор при работе, типа, алгоритм так визуализировали ???

Именно! Графы наглядно иллюстрируют состояния системы и условия перехода из одного в другое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Именно! Графы наглядно иллюстрируют состояния системы и условия перехода из одного в другое.

можете поделиться как у Вас с DSP/Bios обстоят дела? продвинулись в понимании?

 

А кто-нибудь в состоянии подсказать про uSTL? во всем форуме нашел только одно упоминание ссылка на uSTL на Электрониксе . Естественно, гуглю, читаю (только начал), Но может кто-то использовал в своих embedded-проектах в связке с С++? Поделитесь опытом, мыслями.

 

И, вообще, о стиле программирования на С++ при ограниченных ресурсах, как по вышеприведенной ссылке.

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

на этот проц портированного линукса нету, можете не париться ;)

Поправьте меня если вы его гдето видели, с удовольствием изучу этот вопрос.(желательно в приват, я в этой ветке не часто в последнее время)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Двигаюсь дальше в изучении. Накатал прогу на С++ (объект - виртауальный АЦП создал, это неважно пока) .

Итак, Приведу пример того, какие части программы соотносятся с какой секцией памяти (первый прикрепленный рисунок).

Вопрос №1: Странно, почему после переноса массива из глобальной области видимости в локальную (2ой прикрепленный рисунок) сборка проекта происходит нормально, хотя 5387 превышает размер выделенный под .stack в 28335_RAM_lnk.cmd (стандартный файл TI) ????

MEMORY
{
PAGE 0 :
  <..>
PAGE 1 :
  <..>
  RAMM1      : origin = 0x000400, length = 0x000400    /* on-chip RAM block M1 */
  <..>
}
SECTIONS
{
  <..>
.stack           : > RAMM1,     PAGE = 1
  <..>
}
файл прикрепляю, правда ,в другом формате (*.cmd не грузится на форум)

 

Немного поэкспериментировал.

 

Ставим размер массива = 100000 => при сборке получаем ошибку: ”>> INTERNAL ERROR: Space required for local variables exceeds maximum in _main” .

размер массива = 32763 => та же ошибка;

размер массива = 32762 => сборка завершена успешно

32762 = 0х7FFA в 28335_RAM_lnk.cmd нет области такого размера.

Вопрос №2: почему компилятор/линкощик при сборке не ругаются, даже если мы имеем переменных (массив в моем случае) на 32762 ячеек памяти ??? И откуда брать это значение максимального количества локальных переменных "in _main"(с) ??

 

начал я с середины описывать проблему, поэтому кому интересно откуда ноги растут, какие источники прошуршал и что делал - прикрепляю pdf

post-69111-1353556884_thumb.png

post-69111-1353557040_thumb.png

28335_RAM_lnk.txt

the_whole_story_with_this_example.pdf

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой должен быть формат *dat файла, который подгружают в месте присоединения к программе точки останова (breakPoint), чтобы считывать сэмплы из файла и отлаживать таким образом алгоритм.... ????

У меня такие требования к файлу: в нем хранится 5387 float’овых сэмплов входного сигнала для алгоритма. эти сэмплы в десятичном представлении.

 

Знаю, что в этих файлах - первая строка-заголовок вводит некие настройки:

1 число - магическое = 1651

2 число - формат :

hexadecimal, =1

integer, =2

long, =3

float. = 4

Хотя, по-моему, hexadecimal - это не формат , а система счисления, какого лешего разработчики TI внесли его в настройки!!??? тогда бы уж писали про десятичную, двоичную систему....

3 число - как я понял начальный адрес блока памяти в memory map процессора, который надо записать в dat-файл на компьютер.

4 число - количество сэмплов в блоке..

 

много непонятного у этих Техасцев ((( . ссылка на источник

 

я использую такой файл:

1651 4 0 1 0

0.025199203

0.013311899

-0.039400969

0.008759023

 

Они во всех примерах не заморачиваются и используют 16ичную систему. Например, C:\CCStudio_v3.3\tutorial\dsk2812\modem\pseudo.dat , C:\CCStudio_v3.3\tutorial\dsk2812\sinewave\sine.dat :

1651 1 0 1 0

0x0000

0x000f

0x001e

0x002d

0x003a

0x0046

 

Просто я не вижу свой сигнал в Graph tool (буфер, к которому прикрепляю dat-файл , я отстраиваю в виде графика в Graph tool), точнее вижу, но не то (первая картинка из вложения), второй рисунок - сигнал который я загружаю при помощи dat - файла.

 

помогитееее!!!

post-69111-1353668117_thumb.png

post-69111-1353668319_thumb.png

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поэкспериментировал сейчас на работке с *.dat файлами, что делают техасцы. Что было сделано:

взял из какого-то примера sine.dat, подключил к своему проекту, поизучал Graph tool, с помощью которой можно строить графики сигналов Code Composer'е. Все это зафиксировал в отчете. и Пришел к выводу, что коряво они, америкосы, реализовали file i/o при помощи dat-файлов. Корявость проявляется в указании какой тип данных мы используем. Писал выше вот это:

2 число в первой строке dat-файла- формат :

hexadecimal =1

integer =2

long =3

float = 4

зачем они приделали hexadecimal ?? зачем народ путать?.. так бы и написали, что мы поддерживаем ТИПЫ ДАННЫХ integer =2, long =3 и float = 4 , но они должны быть все в ШЕСТНАДЦАТИРИЧНОЙ СИСТЕМЕ СЧИСЛЕНИЯ (это пока догадка - ответ на предыдущее мое сообщение, т.к. не проверял). Чтобы это проверить нужно писать прогу по конвертированию систем счисления. А может у кого-то уже есть эта прога?? поделитесь!!! писать лень!!! опять велосипед сочинять =(( .. или может, это можно просто как-нибудь сделать в Excel, Matlab или блоки быстренько накидать в Simulink'е ????

 

P.S. прикрепляю свой отчет по работе с этими *.dat файлами, выводом графиков в CCS. (отчет неполный, т.к. сырой, т.к. не до конца доделал сам проект)

 

зачем они приделали hexadecimal ??

ну это то понятно - ведь в процессор должны писать 0 и 1... но как-то забыли америкосы толково объяснить, вот и запутался я, к тому же не нашел толковой информации...

work_with_dat_files_graph_tool_in_code_composer_Studio.pdf

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Какой должен быть формат *dat файла

 

Знаю, что в этих файлах - первая строка-заголовок вводит некие настройки:

1 число - магическое = 1651

2 число - формат :

hexadecimal, =1

integer, =2

long, =3

float. = 4

Хотя, по-моему, hexadecimal - это не формат , а система счисления, какого лешего разработчики TI внесли его в настройки!!??? тогда бы уж писали про десятичную, двоичную систему....

3 число - как я понял начальный адрес блока памяти в memory map процессора, который надо записать в dat-файл на компьютер.

4 число - количество сэмплов в блоке..

почти верно. вот правильный вариант. наткнулся в книге Kuo S.M., Lee B.H. Real Time Digital Signal Processing 1.5.3 Experiment 1C± File Input and Output

... но все равно скупое описание....

post-69111-1353850785_thumb.png

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

..нужно писать прогу по конвертированию систем счисления. А может у кого-то уже есть эта прога?? поделитесь!!!

 

вот здесь решил проблему .

 

прикрепляю правильный/конечный вариант скрипта ну и всех сопутствующих файлов

convert_float2Hex.zip

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Люди добрые, внимательные, мудрые - какие тут еще есть - ну помогите, пожалуйста, молодому, невнимательному, торопящемуся и т.д..... ну не могу врубиться чего не хватает.

В сообщении #9 прилагал документик "work_with_dat_files_graph_tool_in_code_composer_Studio.pdf " , в котором разобрался как подгружать из CCS файл с отсчетами целых чисел в hex'е. Синус видел, в общем...

 

Пытаюсь тоже самое сделать, но подложив целевому Процессору файл из вещественных сэмплов в hex'е. Как я из матлабовского single в десятичной системе счисления получил hex можете глянуть либо в прикрепленном документе (все ссылки там кликабельны), либо вот здесь , но в файле еще картинки по моей проблеме.

может быть, выложить Вам сам проект со всеми исходниками?? мне ж не жалко !!!!!!!!!!!!!!....

 

Хочу победить эту муть.

 

 

 

War_with_debugging_algorithm_in_CCS.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в продолжении проблемы: Товарищи, вот что обнаружил !!!! (см рисунок)

вопрос ПОЧЕМУ code composer берет только лишь младшие 16 бит каждого сэмпла из *.data файла и пишет в нужный нам массив, а старшие попросту отбрасывает .... ?????

post-69111-1354009840_thumb.png

Изменено пользователем beaRTS

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:1111493779: Ликую!!

победил я :smile3009: Code Composer =) . Правда, костыльное :laughing: решение, но все-таки сделал. работает! :biggrin:

post-69111-1354080316_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

чтобы тема с *.dat файлами была закончена, дам статьи (писал для себя), написанные в хронологическом порядке наступления озарений в этой области.

Изучаем Code Composer Studio: работа с Graph tool, загрузка *.dat файла данных в процессор в точке останова

затем было сделано:

Конвертируем вещественные данные (float, single (MatLab)) из десятичной системы счисления в hex , но в ходе экспериментов понял, что нужна еще доработка, которая вылилась вот в эту статью:

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

Code Composer Studio - Единственно правильная загрузка *.dat фала в TMS320F28335

 

В общем, кому интересно - читайте в приведенной последовательности. Надеюсь мои опусы помогут молодым, как и я, быстрее стартануть, тем самым повышая конкурентоспособность наших инжеНегров в глобальной системе =)

Ветка не закончена. вопросов у меня куча, думаю писать тут. или не тут?

Модераторы, как лучше: отдельная ветка на каждый вопрос связанный с TMS320F28335 или продолжать и тут все задавать????

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...