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

Blackfin VDSP как разместить массив в scratchpad?

Есть проект на 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 это уже поздно делать.

 

post-11606-1457076196_thumb.png

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


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

3. а почему поздно?

только заполнять не целиком с 0, а от текущего значения указателя стэка и до конца можно в любой момент

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


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

только заполнять не целиком с 0, а от текущего значения указателя стэка
Что-то и правда я не подумал о возможности считать текущее значение.

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


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

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

применяемый файл стартапа указан в ldf, а исходники идут в комлекте с vdsp

 

Что-то и правда я не подумал о возможности считать текущее значение.

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


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

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

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

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

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

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

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

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

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

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