реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Blackfin VDSP как разместить массив в scratchpad?, И определить нужный размер стека
uriy
сообщение Mar 4 2016, 07:37
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Есть проект на BF533, из внешней памяти только SPI, внешней SRAM нет.
Весь код выполняется внутри. Поджимает объем памяти данных.
Возникло желание уменьшит стек и затолкать в scratchpad некоторые данные.
Приложена картинка как сейчас поделен scratchpad. Его общий объем 4КБ в моем проце.
Но я не все в этом понимаю.

1. Для чего используется System Heap? Предполагаю что это динамическое выделение памяти для библиотечных
функций. Как узнать использует или нет динамическую память то что я заинклудил?
Сейчас выставлено 512 байт для system heap. При недолгих тестах нарушений в работе устройства не вижу.

2. Для чего используется User Heap? Предполагаю что это область динамической памяти которую я сам могу создать. Мой код не использует динамическое выделение памяти, все статично. Наверно User heap мне не нужен?

Массив пробовал разместить двумя способами:
Код
section ("MyHeap") static uint8_t spi_tx_buffer[SPI_TX_BUFFER_SIZE];
section ("MEM_L1_SCRATCH") static uint8_t spi_tx_buffer[SPI_TX_BUFFER_SIZE];


В обоих случаях вылазит такое:
[Warning li2060] The following input section(s) that contain program code
and/or data have not been placed into the executable for processor 'p0'
as there are no relevant commands specified in the LDF:

.\Debug\spi.doj(MEM_L1_SCRATCH)


[Error li1060] The following symbols are referenced, but not mapped:
'_spi_tx_buffer' referenced from .\Debug\spi.doj(program)


В ldf файле такие секции есть
Код
         MyHeap_space = ldf_heap_end + 4;
         MyHeap_end = (MyHeap_space + (1024 - 4)) & 0xfffffffc;
         MyHeap_length = MyHeap_end - MyHeap_space;
      } > MEM_L1_SCRATCH


3. Как узнать необходимый размер стека. Я знаю только один способ. Залить предварительно область стека фиксированными данными, а потом смотреть докуда дополз стек. Но как в VDSP модифицировать код до main чтобы заполнить стек до входа в main. Ведь после входа в main это уже поздно делать.

Прикрепленное изображение
Go to the top of the page
 
+Quote Post
_pv
сообщение Mar 4 2016, 09:38
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954



3. а почему поздно?
только заполнять не целиком с 0, а от текущего значения указателя стэка и до конца можно в любой момент
Go to the top of the page
 
+Quote Post
uriy
сообщение Mar 5 2016, 11:57
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 429
Регистрация: 30-11-05
Из: Ижевск
Пользователь №: 11 606



Цитата
только заполнять не целиком с 0, а от текущего значения указателя стэка
Что-то и правда я не подумал о возможности считать текущее значение.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Mar 11 2016, 09:55
Сообщение #4


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Есть startup, где в числе прочего инициализируются указатель стека и вызывается main. там можно всё необходимое сделать.
применяемый файл стартапа указан в ldf, а исходники идут в комлекте с vdsp

Цитата(uriy @ Mar 5 2016, 15:57) *
Что-то и правда я не подумал о возможности считать текущее значение.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 21st July 2025 - 21:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01356 секунд с 7
ELECTRONIX ©2004-2016