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

beaRTS

Участник
  • Постов

    209
  • Зарегистрирован

  • Посещение

Весь контент beaRTS


  1. Какой должен быть формат *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 - файла. помогитееее!!!
  2. Я начал методично весь геммор записывать к себе в бложик, так сказать, конспектирую - без этого никуда.. НАсчет где почитать. Сейчас приложу файлы и кидану ссылочки, что накопаю. EALLOW, EDIS: качаем на свой проц доку "System Control and Interrupts" -> глава EALLOW-Protected Registers (в моем глава 7.2), кратко: The following registers are EALLOW-protected: • Device Emulation Registers • Flash Registers • CSM Registers • PIE Vector Table • System Control Registers • GPIO MUX Registers • Certain eCAN Registers • XINTF Registers EINT, DINT - enable/disable interrupt - для того, чтоб сделать часть Вашего кода атомарной (не прерываемой ни под каким предлогом!) качаем "TMS320C28x CPU and Instruction Set" и пользуемся поиском по документу. ERTM - не нашел в каком документе искать, но помнится, что это Enable Real-Time Mode - для средств отладки. По-любому, он вписывает какой-то бит в один из регистров специального назначения, который за отладку отвечает (вроде такой был на борту 28х ) DSP2833x_HeaderFiles_QuickStart_EALLOW_EDIS.pdf
  3. Вроде бы, да - в такой последовательности. Даже логично получается: если у вас на всех входах АЦП висят датчики внешние и Вам приспичило именно в такой последовательности оцифровывать, то почему бы и нет, т.е. TI тут предоставила свободу творчества, что вылилось в общем усложнении Вот что я в прошлом году натворил (хотя тогда еще зелёнее, чем сейчас был..) //функция, подключающая к питанию все внутренние блоки АЦП void PowerUpADC(void) { //Должна быть использована следующая последовательность //без ТИ не будет записи,чтения в регистры АЦП if(!SysCtrlRegs.PCLKCR0.bit.ADCENCLK) { //включаем тактирование EALLOW; SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; EDIS; //д/б задержка 2-SYSCLOCK цикла asm(" NOP"); asm(" NOP"); } //1. Разрешаем/запрещаем внешний источник опоры AdcRegs.ADCREFSEL.bit.REF_SEL = 1; //2. Power up reference/bandgap/ADC circuits together (одновременно) AdcRegs.ADCTRL3.all = 0x00E0; //3. Before performing the first conversion, a delay of 5 ms is required //сбросим WatchDog, если он включен ServiceDog(); DELAY_US(5000); } void InitializeADCmy() { if(!SysCtrlRegs.PCLKCR0.bit.ADCENCLK) { ////разрешаем тактирование АЦП от HSPCLK (HISPCP) EALLOW; SysCtrlRegs.PCLKCR0.bit.ADCENCLK = 1; EDIS; //д/б задержка 2-SYSCLOCK цикла asm(" NOP"); asm(" NOP"); } // *IMPORTANT* // The ADC_cal function, which copies the ADC calibration values from TI reserved // OTP into the ADCREFSEL and ADCOFFTRIM registers, occurs automatically in the // Boot ROM. If the boot ROM code is bypassed during the debug process, the // following function MUST be called for the ADC to function according // to specification. The clocks to the ADC MUST be enabled before calling this // function. // See the device data manual and/or the ADC Reference // Manual for more information. ADC_cal(); //Включение питания PowerUpADC(); //Тактирование: прескайлеры //FCLK = HSPCLK AdcRegs.ADCTRL3.bit.ADCCLKPS = 0x00; //ADCLK = FCLK AdcRegs.ADCTRL1.bit.CPS = 0; //Sampling Window (determines for what time duration the sampling switch is closed): //The width = (ACQ_PS + 1) times the ADCLK period. /* From 'TMS320F2812_Implementation tutorial' p.169 (6-6): "the sampling window controlled by the field ”ACQ_PS”. This group of bits defines the length of the window that is used between the multiplexer switch and the time when we sample (or ”freeze”) the input voltage. This time depends on the line impedance of the input signal. So it is hardware dependent" */ //для оцифровки максимально возможных сигналов для данного АЦП // примем Окно = 0; //т.е 1- ADCKL УВХ будет обрабатывать входной аналоговый сигнал //и в конце следующего 1-ADCKL цифровой результат появится на выходе АЦП //ПОЭТОМУ ЧАСТОТА ADCKL = 25 МГц, хотя у АЦП мах частота = 12,5 МГц!!!!!! AdcRegs.ADCTRL1.bit.ACQ_PS = 0; //Выставляем "Continious conversion mode" AdcRegs.ADCTRL1.bit.CONT_RUN = 1; //разрешаем SEQ wrap around при достижении MAXCONVn AdcRegs.ADCTRL1.bit.SEQ_OVRD = 0; //Объединяем SEQ1 & SEQ2 -> SEQ = 16-state sequenser AdcRegs.ADCTRL1.bit.SEQ_CASC = 1; //Режим сэмплирования: последовательный AdcRegs.ADCTRL3.bit.SMODE_SEL = 1; //выставляем глубину буффера АЦП = 16 AdcRegs.ADCMAXCONV.all = BUF_ADC_DEPTH; //Выбираем каналы для сэмплирования: везде нулевой канал ADCINA0 AdcRegs.ADCCHSELSEQ1.bit.CONV00 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV01 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV02 = 0x0; AdcRegs.ADCCHSELSEQ1.bit.CONV03 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV04 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV05 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV06 = 0x0; AdcRegs.ADCCHSELSEQ2.bit.CONV07 = 0x0; AdcRegs.ADCCHSELSEQ3.bit.CONV08 = 0x0; AdcRegs.ADCCHSELSEQ3.bit.CONV09 = 0x0; AdcRegs.ADCCHSELSEQ3.bit.CONV10 = 0x0; AdcRegs.ADCCHSELSEQ3.bit.CONV11 = 0x0; AdcRegs.ADCCHSELSEQ4.bit.CONV12 = 0x0; AdcRegs.ADCCHSELSEQ4.bit.CONV13 = 0x0; AdcRegs.ADCCHSELSEQ4.bit.CONV14 = 0x0; AdcRegs.ADCCHSELSEQ4.bit.CONV15 = 0x0; //Прерывание sprufb0d p. 122 //запрещаем глобально DINT; //Разрешаем прерывание от SEQ1 при каждом достижении конца последовательности (EOS) AdcRegs.ADCTRL2.bit.INT_MOD_SEQ1 = 0; AdcRegs.ADCTRL2.bit.INT_ENA_SEQ1 = 1; #if EXAMPLE2 //разрешаем работать SOC от ePWMxSCOA AdcRegs.ADCTRL2.bit.EPWM_SOCA_SEQ1 = 1; #endif //Разрешаем прерывание ADCINT инициируемое EOS (концом последовательности SEQ1) // в блоке PIE: ADCINT = INT1.1 PieCtrlRegs.PIEIER1.bit.INTx1 = 1; // группа INT1 PieCtrlRegs.PIEACK.bit.ACK1 = 1; //Разрешаем прерывание в CPU по каналу INT1 IER |= (1<<0); /* в main добавить следующие строки разрешаем глобальное прерываниe и режим отладки EINT; ERTM; */ } // InitializeADCmy(); ну пишите в личку вашу почту - вышлю книгу Чего - то мне кажется, что Да - в той же последовательности .. "Each sample and hold is connected to 8 multiplexed input lines. The auto sequencer is a programmable state machine and is able to automatically convert up to 16 input signals. Each state of the auto sequencer puts a measurement into its own result register. " Не надо ничего! Вот глава ( мог бы в лучшем качестве распечатать, но даже 300 dpi почему то печатает 5,8 Метров, а 600 dpi чуть больше 6 Метров, а 150 dpi - уже 2,5 М... нелинейность) TMS320F2812_Implementation_tutorial_Ch_6_ADC.pdf
  4. может, книга поможет? Глава 6. все по АЦП именно этого процессора. Ссылка на Книгу в этой ветке
  5. Привет, бро ! я тоже новичок. Вот кидаю тебе книженцию отличную прям под твой процессор. По ней что-то пытался делать в свое время.. а так если хочешь знать больше о своем проце, то заходи на страницу в интернете на сайте TI используемого процессора и там внизу будет до кучи документации и ищи по названию, да скачивай, да читай. Книга TMS320F2812 Implementation tutorial во вложении ... ЧЕРТ!!!! не загружается файл больше 5 метров =(( вот ссылка на он-лайн хранилище. Пользуйте =))
  6. Двигаюсь дальше в изучении. Накатал прогу на С++ (объект - виртауальный АЦП создал, это неважно пока) . Итак, Приведу пример того, какие части программы соотносятся с какой секцией памяти (первый прикрепленный рисунок). Вопрос №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 28335_RAM_lnk.txt the_whole_story_with_this_example.pdf
  7. Каюсь-каюсь,не заметил, что пункт Open in Time Series Tool есть и в 2010 матлабе (на работе сейчас попробовал), так что все радужно пока что!
  8. забыл написать, что делалось все в matLab 2010b. Приехал - дома попробовал тоже самое проделать но уже в 2012а. В этой версии все намного проще получилось. Собственно запись To Workspace дает такой же результат val(:,:,1) = 2.1213e-06 val(:,:,2) = .... А вот запись в файл удалась через To file с указанием формата сохранения TimeSeries (тоже самое до этого момента было и в 2010b), но когда мы открываем mat-файл, он загружается в workspace, и тут нажимая на структуре с названием нашей timeseries-переменной (ans) правой кнопкой мыши мы должны выбрать пункт Open in Time Series Tool (такого в 2010b не было, потому и приходилось париться). В этой тулзе уже все понятно. Можно кучу графиков настроить или сохранить в файл: mat или Excel. Жму сохранить в Excel и автоматом все данные переносятся со всякими разъяснениями в эксель, где один столбец - это дискретное время, другой - мои сэмплы. Спасибо за внимание =). Может кто еще знает нормальные способы экспорта данных из симулинка ? - Делитесь! Лишним не будет
  9. осмелюсь здесь задать ,т.к то, что я хочу сделать, отдаленно напоминает связь симулинка с Code composer'ом... мне надо провести простую операцию по вызволению N-го количества сэмплов из модели в симулинке, чтобы потом эти сэмплы занести в свой проект в виде "как бы" сигналов с реального ацп, и проверить алгоритм (по блочно). нужно: вывести сэмплы в формате float, чтобы их можно было копирнуть в проект. пути: путей вижу два: 1) использовать блок "To File" симулинка (причем пишет только в mat-файл, который все равно придется открывать матлабом и копировать из открытой таблицы нужную строку с сэмплами ). 2) блок "To WorkSpace" и из воркспейса дальше копировать куда надо. Проблема есть в каждом блоке: -1й блок может писать только double значения в файл -2й блок может любые писать значения, но почему-то пишет в переменную dspInputSamples 1х1хN значения, а не 1хN (ну или Nx1 - какой там Матлаб использует).. сигнал то у меня одномерный.. да и пофигу бы с 1х1хN размером (я бы скопировал нужную строку/столбец), так он пишет в переменную подобным образом (а не в некое подобие Excel'евской таблицы - с ней было бы удобней): val(:,:,1) = 4.1032e-006 val(:,:,2) = 1.3728e-006 val(:,:,3) = -4.0721e-006 val(:,:,4) = -3.6393e-006 val(:,:,5) = 1.7723e-006 и т.д. и т.п. P.S. всеми упомянутыми блоками пользовался всегда и давно. Help перечитывал. В инете шуршал... в чем дело - понять не могу где собака зарыта?
  10. Embedded C++

    ну да да. все логично говорите. согласен
  11. Embedded C++

    Задач одинаковых не существует. Смысл понятен. Вот только, как по мне, паттерны = идиомы = методологии удобны при создании архитектурных частей системы. Тот же pimpl хорош, чтобы разделить абстрактный интерфейс, например, SPI от архитектурной реализации в используемом процессоре (регистры процессора). Потом просто достаточно менять реализацию под выбранный процессор - удобно, геммора меньше (ведь все мы ленивы, и делать одно и тоже сызнова для каждой новой задачи - не айс). Делюсь найденными ссылками. youdevelop : даны тезисы когда следует применять Design Patterns for Real-time and Embedded System Design за авторов спасибо! Закачаю, гляну
  12. Embedded C++

    наткнулся на статью интересную Паттерны проектирования в Embedded . можете поделиться подобным образом (лучше, конечно, поподробнее, а если и с реальными примерами - будет здорово!) кто какие паттерны использует, какие полезны в embedded?
  13. Embedded C++

    да, было внутреннее ощущение, что скоро грани совсем размоются. Я тут с Питоном познакомился недавно (поверхностно) - понравилось. Его обычно как в embedded используют: пишутся скрипты-тесты, генерирующие входные данные для железяки и программы в ней, написанной, например, на С++ ??? а потом эти тесты анализируют то, что на выходе получено, и говорят "все ок" или "давай, до свиданья" ?
  14. Embedded C++

    чую - пахнет холиваром =)) :maniac: . но я даж спорить не будут - не компетентен)) а почему? все так запутанно? или как у Кастанеды: "Каждый идет своим путем. Но все дороги всё равно ведут в никуда. (прим. к смерти) Весь смысл в самой дороге, как по ней идти, дорога должна быть "с сердцем": если идешь с удовольствием, значит, это твоя дорога. Если тебе плохо – в любой момент можешь сойти с нее, как бы далеко ни зашел. И это будет правильно"
  15. Embedded C++

    очень занимательно!!! Выходит, разработчик-embedder в итоге, как ни крути, становится (должен стать/должен быть) полноценным программистом С++ (в смысле, которых специализированные кафедры выпускают) ??? таков путь развития?
  16. хитрый вопрос: среди своего персонала (25 человек!!!! в КРУПНЕЙШЕЙ КОМПАНИИ, как я понял 25 человек то работает в этой компании как минимум) не уж то нет возможности выискать достойного с квалификацией подходящей?? тут даже по мат.статистике ответ положительный... зачем за такие деньги нанимать левого человека??? Тем более КРУПНЕЙШАЯ КОМПАНИЯ!!! По мне, так нужно взращивать из своего коллектива кадров, что б у личного состава была мотивация к росту, а если этого не делать - будет постоянная утечка молодых, талантливых и амбициозных. а опыт управления - дело наживное. тем более если человек умеет читать, то полно курсов он-лайн по этому делу, книг и т.д...
  17. Embedded C++

    да, я сместил вектор своего развития в сторону С++, и дома в после рабочее время пытаюсь углубляться, ставя задачи из компьютерного зрения и openCV. Бесплатные курсы пытаюсь проходить, связанные с этой темой, которые одна фирма у нас устраивает. СПС! за советы. Вот, кстати, таких советов и не хватает молодым - таких, как, Ваши и как, например, в книжке Экеля Thinking in C++ в Приложении Б "советы по программированию". Очень дельные советы на мой взгляд. Были б такие в С++ embedded ... Кстати, товарищ Neiver выкладывал подобный труд-статью , которая продублирована была на EasyElectronics . за что спасибо.. Но это капля в море и системной картины не вырисовывает Это Вы имеете в виду следующий случай? Когда Вы пишите некую функцию и у нее становится слишком много входных параметров, тогда чтоб их передать более сгруппировано Вам приходится их объединять в структуры ( не нашел внятное объяснение термина "структуры-описатели"), а в функции передавать указатели на эти структуры, но т.к. это не комильфо, то Вы все нужные параметры всместо структур объединяете в класс и передаете по ссылке в функцию... Вы об этом??
  18. Embedded C++

    голову нужно ставить на место), привыкать к ООП: к ООП применительно к embedded в связке с ОСРВ (будет у меня DSP/BIOS). вот тут не все понятно. Например, что брать за сущности, если , скажем, требуется сделать детектор : отдельные матлабовские блоки умножителей, дециматоров , фильтров оформлять разными классами или же делать одним классом под названием DetectorClass, куда и впихнуть весь алгоритм работы детектора?... (склоняюсь ко второму). теории прочитано достаточно - надоело. взял книжку с задачками, к которым есть примеры решения, и начал тупо повторять с главы про ООП, изменяя примеры в книге (где-то названия не нравятся - не в той нотации, где-то вижу, что функцию проще сделать можно и т.п.) Думаю посидеть так чуток, и дальше двигаться.. Хочется понять как повторить с полным пониманием происходящего то, о чем пишется во 2ом сообщении, как прикручивать ОСРВ к этому. А в общем, Как достичь подобного просветления =) ! ) ???? :smile3046:
  19. Embedded C++

    Спасибо! а на вопросы кто-нибудь прольет свет? А можете уточнить по АРМам. ведь они бывают очень крутыми Arm9, ARM11 ! Просто волнует информация о том, при каком объеме памяти на борте процессора, тактовой частоте и еще каких-нибудь значимых параметрах, о которых могу и не подозревать, можно использовать С++, шаблоны, ту же uSTL или другие библиотеки. Я просто заложил в устройство TMS320F28235: Frequency (MHz) 150; RAM (KB) 68; Flash (KB) 512.
  20. Embedded C++

    А давайте помусолим uSTL (ссылка была раньше). 1. какие видятся минусы и плюсы использования? 2. кто в каких проектах использовал? где может быть применена эта библиотека (пример какой-нибудь для начинающих =), чтоб понять куда можно прикручивать ). И стоит ли? 3. во что компилируется проект с данной библиотекой: объем кода огромен ? 4. Если код получается небольшим, за счет чего это достигается??? какие трюки? 5. Как я понял одна из плюшек - это Memblocks and Memlinks, которые организованы как классы и содержат в себе все контейнеры, создаваемые в проге, т.е. все они в одном месте локализованы. В STL векторы, например, у нас динамические: если не хватает их размерности, то при достижении конца вектора резервируется при помощи new в два раза большая память. т.е. если мы используем некий вектор на 1024 отсчетов, но должны принять 1060 отсчетов, то по достижении индекса 1023 у нас размерность станет 2048, хотя храниться будут только 1060 значений. Для компов - это пустяк (хотя и там оптимизируется при помощи, вроде бы, метода resize(); ), а для embedded - ужас. И пока не дошло вот что: при помощи Memblocks and Memlinks получается сделать вектора в uSTL статическими?????
  21. Огромное спасибо за понимание и за здоровенное пояснение howto ) ! )))))))) буду вникать вечерами, и, конечно, не откажусь от Ваших советов !!! =)
  22. Спасибо огромное! Из сказанного мало что понял)), т.к. я очень-очень начинающий как в Убунту, так и в Qt. Мне бы что-нибудь по-тупому простое: где шаг за шагом описывается что надо вводить в командную строку, чтоб установить правильно openCV, Qt. Затем так же предельно просто описано как настроить в Qt всё под openCV, что писать в *pro файле и т.д... по-тупому, в общем. Проблема еще в том, что нет понимания какую формулировку давать Гуглу. Вот и сижу перебираю варианты... сейчас нашел следующие ссылки: Сборка openCV 2.4 c поддержкой Qt под Ubuntu Ubuntu 12.04 + openCV 2.4.2 + Qt SDK version 1.2.1 HOWTO: combine openNI, OpenCV and Qt in C++ (ubuntu форум) не пробовал эти ссылки еще. завтра-послезавтра опробую.
  23. можете поделиться как у Вас с DSP/Bios обстоят дела? продвинулись в понимании? А кто-нибудь в состоянии подсказать про uSTL? во всем форуме нашел только одно упоминание ссылка на uSTL на Электрониксе . Естественно, гуглю, читаю (только начал), Но может кто-то использовал в своих embedded-проектах в связке с С++? Поделитесь опытом, мыслями. И, вообще, о стиле программирования на С++ при ограниченных ресурсах, как по вышеприведенной ссылке.
  24. Здравствуйте. понимаю, что не совсем по адресу, не на том сайте спрашиваю, но тут много умных людей, с разноплановыми увлечениями.... Приступил к изучению Компьютерного зрения и библиотеки OpenCV. Изначально мне азы работы показали на Убунте в Эклипсе (как настроить проект, как прикрутить и т.д.). Старт был дан хороший , могу теперь работать в Эклипсе (раньше вообще ни разу в ней не работал) и с Убунтой познакомился (да и вообще линуксовой системой - влюбился, но геммора много...). Но возможности раздела highgui в библиотеке мне не понравились. Начал смотреть в сторону Qt, в котором тоже не работал ни разу =). В общем, зеленый со всех сторон я =) А не понравилось мне то, что для работы функций в библиотеке компьютерного зрения нужно подбирать значения передаваемых аргументов (например в функции пороговой биноризации нужно подбирать порог.. ну и т.д.). Делать подбор многократной перекомпиляцией и запуском - не комильфо. Попробовал привязать слайдер из подраздела библиотеки highgui к переменной. Но для этого пришлось многие переменные, объекты делать глобальными , да и вообще всю структуру программы переиначивать . не удобно. Потому и полез в Qt, т.к. кросс платформенный, да и графических возможностей у него больше и лучше. Проблема: установил Qt SDK на убунту из репозитария. Прикрутил openCV к Qt, как описано во вложении. Но там Qt на винде рассматривается, поэтому погуглив, файл проекта .pro сделал под линуксовую систему. ПРограмму тестовую переписал с того же вложения. Запускаю - выводится только терминал, хотя должна картинка выводиться.. Вот что делать???? кто-нибудь сталкивался? ______________openCV___Qt.pdf
×
×
  • Создать...