Jump to content

    
Sign in to follow this  
beaRTS

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

Recommended Posts

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

 

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

 

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

Edited by beaRTS

Share this post


Link to post
Share on other sites

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

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

 

Share this post


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

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

Спасибо!

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

 

 

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

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

Share this post


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

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

Share this post


Link to post
Share on other sites
Именно! Графы наглядно иллюстрируют состояния системы и условия перехода из одного в другое.

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

 

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

 

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

Edited by beaRTS

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

Вопрос №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

Edited by beaRTS

Share this post


Link to post
Share on other sites

Какой должен быть формат *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

Edited by beaRTS

Share this post


Link to post
Share on other sites

Поэкспериментировал сейчас на работке с *.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

Edited by beaRTS

Share this post


Link to post
Share on other sites
Какой должен быть формат *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

Edited by beaRTS

Share this post


Link to post
Share on other sites
..нужно писать прогу по конвертированию систем счисления. А может у кого-то уже есть эта прога?? поделитесь!!!

 

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

 

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

convert_float2Hex.zip

Share this post


Link to post
Share on other sites

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

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

 

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

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

 

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

 

 

 

War_with_debugging_algorithm_in_CCS.pdf

Share this post


Link to post
Share on other sites

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

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

post-69111-1354009840_thumb.png

Edited by beaRTS

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

 

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this