|
|
  |
Избавиться от лишней памяти :) |
|
|
|
Sep 15 2012, 19:39
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Добрый день, господа и товарищи.
По недомыслию попал в дурацкую ситуацию - программа была написана для процессора MSP430F5310 (32k), очень критичная по времени и использует DMA. Та, что есть память, использована меньше чем наполовину. По размеру платы этот процессор не вошел, вместо него плата сделана под MSP430F5342, у которого 128к ненужной памяти, но зато корпус подходящий.
При компиляции все благополучно рассыпалось - и указатели, коих в программе море, и DMA, где только 16 бит использовалось.
Есть ли возможность сказать ИАРу плюнуть на лишнюю память и не использовать команды 430x вообще? То ли плохо рыл - но пока ничего не нашел.
|
|
|
|
|
Sep 15 2012, 20:49
|
Гуру
     
Группа: Свой
Сообщений: 2 128
Регистрация: 21-05-06
Пользователь №: 17 322

|
Цитата(varvar @ Sep 15 2012, 22:39)  При компиляции все благополучно рассыпалось - Чо, прям распалось на куски? В чём рассыпание выражается? Цитата(varvar @ Sep 15 2012, 22:39)  Есть ли возможность сказать ИАРу плюнуть на лишнюю память Можно подредактировать скрипт линкера в плане урезания памяти. Или выбрать msp с меньшим объёмом, но совместимый программно (если есть такой). Цитата(varvar @ Sep 15 2012, 22:39)  и не использовать команды 430x вообще? Как это - "не использовать команды 430x вообще"? А что ему использовать? Команды АВР или АРМ чтоли? Не понял.
|
|
|
|
|
Sep 16 2012, 04:38
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Цитата(_Артём_ @ Sep 15 2012, 23:49)  Чо, прям распалось на куски? В чём рассыпание выражается? Практически на куски. Программа улетает непонятно пока (разбираюсь), продолжая выполнять некоторые из обработчиков прерываний. Если конкретно - это наложение символов на видео. При старте пытаются мелькнуть какие-то артефакты, после чего основная программа перестает работать и, соответсвенно, подгружать видеобуфера (изображение формирует SPI c DMA). Цитата(_Артём_ @ Sep 15 2012, 23:49)  Можно подредактировать скрипт линкера в плане урезания памяти. Или выбрать msp с меньшим объёмом, но совместимый программно (если есть такой). К сожалению, по функциональности и размеру корпуса больше ничего не прошло. Нужно 48 ножек LLP, 2 SPI, I2C, UART. Просто урезать память не пройдет - нужно запретить использование команд с расширенной памятью. Цитата(_Артём_ @ Sep 15 2012, 23:49)  Как это - "не использовать команды 430x вообще"? А что ему использовать? Команды АВР или АРМ чтоли? Не понял. Ограничиться командами 430, не используя 430х (стр.168 SLAU208J), которые уменьшают скорость и приводят к разбуханию кода. Ну и указатели, похоже, становятся не 16 битными. Судя по описанию процессора - нормальный путь, вот как только ИАР на этот путь наставить. Где-то должна быть галочка  дополнено - кажется, путь есть: Under General Options, select "Generic MSP430 Device" for the target processor (not "Generic MSP430X device"). Under Linker, override the default linker configuration file and use $TOOLKIT_DIR$\CONFIG\lnk430****.xcl for your actual processor instead. In code, #include the actual target msp430****.h file, not the generic msp430.h. теперь компилятор ругается на __data16_write_addr((unsigned short) &DMA1SA,(unsigned long) Vbuff1); Error[Ta025]: Intrinsic function only available for the 430X core Получается, MSP430F3410 все-таки использует 430х? Где же все-таки собака порылась?
Сообщение отредактировал varvar - Sep 16 2012, 05:34
|
|
|
|
|
Sep 16 2012, 06:21
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Цитата(Сергей Борщ @ Sep 16 2012, 09:06)  А там нигде нет выбора модели памяти (tiny/small/huge)? Есть Data model, в обоих случаях выбрана Small. дополнено: кажется, что-то относящееся к DMA - операции с ним во время прерываний убивают основной цикл. В эррате что-то есть про баги именно в этом процессоре, вроде как не совсем то...
Сообщение отредактировал varvar - Sep 16 2012, 07:26
|
|
|
|
|
Sep 16 2012, 08:13
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(varvar @ Sep 16 2012, 09:21)  кажется, что-то относящееся к DMA - операции с ним во время прерываний убивают основной цикл. "Казала-мазала" Можно ведь посчитать-посмотреть осциллографом сколько времени уходит на DMA, на прерывания. Конечно, может так случиться, что DMA удлиняют прерывания, они сбиваются в стаю и летят в переполнение стека. Но это все отлаживаемо.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
Sep 16 2012, 09:45
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Цитата(Dog Pawlowa @ Sep 16 2012, 11:13)  "Казала-мазала" Можно ведь посчитать-посмотреть осциллографом сколько времени уходит на DMA, на прерывания. Конечно, может так случиться, что DMA удлиняют прерывания, они сбиваются в стаю и летят в переполнение стека. Но это все отлаживаемо. Вы полагаете, я смотрю в окно на ворон сбившихся в стаю  ? Естественно, все пытаюсь отследить - и операции с DMA сбивают стек. Причем речь не о переполнении - прерываний не много, они отслеживаются. Манипуляции с DMA приводят к тому, что программа сбивается в разных местах. Ноги проблемы растут, скорее всего, отсюда (еще заметьте, программа изначально рабочая на MSP430F5310 ): Цитата(MSP430F534x Device Erratasheet SLAZ069G) Function DMA can corrupt values on write-access to program stack Description If the DMA controller makes a write access to the stack while executing one of the following instructions, the data that is written may be corrupted. CALLA [REG | IDX | SYM | ABS | IND | INA | IMM] PUSHX.A [IDX | SYM | ABS | IND | IMM | INA] PUSHX.A [REG] PUSHM.A [REG] POPM.A [REG] Note: [ ] denotes an addressing mode
Workaround Do not declare function-scope variables. Declare all variables that are intended to be modified by the DMA as global- or file-scope such that they are allocated in the data section of RAM and not on the program stack. Обойти вот только пока не получилось. MSP430F5310 не имеет такого бага. Опять дополнение - скомпилировал проект для Generic MSP430 device (без расширенных команд) - для того, чтобы убедиться, что все правильно для MSP430F3410 и для MSP430F5342 - та же картинка - для MSP430F3410 все пучком, а MSP430F5342 и DMA пакеты пропускает, и подвешивает основной процесс. Похоже, надо к разработчикам процессора стучаться
Сообщение отредактировал varvar - Sep 16 2012, 18:38
|
|
|
|
|
Sep 17 2012, 11:58
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Цитата(Сергей Борщ @ Sep 17 2012, 09:06)  А вы учитываете, что при возникновении прерывания ядро складывает на стек содержимое статусного регистра и счетчика команд? И у ядра 430X размер этих регистров другой? И если вы используете управление энергопотреблением и пытаетесть в прерывании менять сохраненное на стеке содержимое статусного регистра, то работая "как с 430" вы промахиваетесь и меняете что-то другое? Управления энергопотреблением нет, прерываний кот наплакал. Ну и самое главное, с таким же подходом MSP430F3410 работает - а у него тоже ядро 430х. Товарищи из Германии пока молчат, как рыба об лед. Впрочем, они никогда не спешат.
|
|
|
|
|
Sep 17 2012, 19:26
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Блин, да у них, оказывается, напряжение ядра программируется  ! Хочешь больше частоту - повысь напряжение. Даже внимания на это не обратил - работало - и ладно. Роем дальше... Все, спасибо за обсуждение, вопрос снят - нехай лишняя память остается, пусть мой пример будет другим наукой - у более свежих процессоров напряжение ядра PMMCOREV ручками устанавливать надо перед установкой частоты. Иначе они иногда работают - но в такой ситуации лучше бы не работали вообще - причина бы быстрее находилась. Придется завтра перед немцами извиняться за дурацкие вопросы. Хотя качество примеров у них ухудшилось, и найти на сайте их стало намного сложнее. Пример установки напряжения ядра из SLAU208J, кстати, не рабочий.
Сообщение отредактировал varvar - Sep 17 2012, 19:53
|
|
|
|
|
Sep 18 2012, 05:22
|

Частый гость
 
Группа: Участник
Сообщений: 93
Регистрация: 5-01-05
Из: Оулу
Пользователь №: 1 811

|
Цитата(_Артём_ @ Sep 17 2012, 23:13)  Немцы это кто, если не секрет? Texas Intruments? Да, у тексаса много подразделений во многих странах, и в Германии как раз разработчики MSP.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|