Весь код выполняется внутри. Поджимает объем памяти данных.
Возникло желание уменьшит стек и затолкать в 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];
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
MyHeap_end = (MyHeap_space + (1024 - 4)) & 0xfffffffc;
MyHeap_length = MyHeap_end - MyHeap_space;
} > MEM_L1_SCRATCH
3. Как узнать необходимый размер стека. Я знаю только один способ. Залить предварительно область стека фиксированными данными, а потом смотреть докуда дополз стек. Но как в VDSP модифицировать код до main чтобы заполнить стек до входа в main. Ведь после входа в main это уже поздно делать.
Нажмите для просмотра прикрепленного файла