Dima1060 0 November 21, 2014 Posted November 21, 2014 · Report post Здравствуйте! Как правильно расположить Heap FreeRTOS в памяти SDRAM? Память нужна под большие массивы данных, с которыми вроде как надо работать с помощью средств FreeRTOS. Heap выделяется как массив, можно как то указать его адрес? И не будет ли потом проблем с тем, что кроме данных эту память будет еще использовать FreeRTOS ? /* Allocate the memory for the heap. */ static unsigned char ucHeap[ configTOTAL_HEAP_SIZE ]; Quote Share this post Link to post Share on other sites More sharing options...
Johnny81 0 December 8, 2014 Posted December 8, 2014 · Report post /* Allocate the memory for the heap. */ static unsigned char ucHeap[ configTOTAL_HEAP_SIZE ] __attribute__((section(".sdram"))); дальше в скрипте линкера размешаешь секцию sdram по нужному адресу. Quote Share this post Link to post Share on other sites More sharing options...
remi700 0 January 23, 2015 Posted January 23, 2015 · Report post В какой момент должна быть инициализирована SDRAM - до создания любых задач РТОС, до запуска планировщика или до момента первого выделения памяти из кучи? Почему нельзя работать с массивом данных, присвоив указателю на первый элемент адрес в пространстве SDRAM, или нужно обязательно выделять память под него динамически через malloc/free? Quote Share this post Link to post Share on other sites More sharing options...
desh 0 January 25, 2015 Posted January 25, 2015 · Report post В какой момент должна быть инициализирована SDRAM - до создания любых задач РТОС, до запуска планировщика или до момента первого выделения памяти из кучи? Если куча FreeRTOS размещена в SDRAM, то до любого из указанных действий. Почему нельзя работать с массивом данных, присвоив указателю на первый элемент адрес в пространстве SDRAM, или нужно обязательно выделять память под него динамически через malloc/free? 1) Можно работать с памятью, как с массивом данных через указатель. Дополнительных действий не требуется 2) Можно объявить статические массивы во внешней памяти. При этом или память должна быть инициализирована перед инициализацией сегментов памяти (в IAR в функции __low_level_init) или массивы должны быть объявлены как не инициализируемые (в IAR ключевое слово __no_init). Старт программы без инициализации больших массивов произойдет быстрее. Quote Share this post Link to post Share on other sites More sharing options...