Возникают проблемы с запуском ресурсоемких задач под FreeRTOS.
Поэтому решил проделать несколько простых экспериментов, чтобы поглядеть,
что происходит, когда память (SRAM) используется в больших количествах.
И сколько надо оставить глобального стека ( помимо стеков задач), чтобы планировщик чувствовал себя нормально.
Результаты разочаровывают пока.
Это прочитал http://www.freertos.org/FAQHelp.html
Это мой тестовый пример http://www.bipom.com/support/RtosDemo1.zip
Компилятор GCC.
Там есть две простые задачи вывода в последовательный порт
pt = (ULONG)malloc(1);
int2str(buf,pt, HEX);uart0Puts("\n\rfirst loc = ");uart0Puts(buf);
xReturn = xTaskCreate( vMessage_0, ( const signed portCHAR * const )"Message_0", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
int2str(buf,xReturn, HEX);uart0Puts("\n\rMes0=");uart0Puts(buf);
xReturn = xTaskCreate( vMessage_1, ( const signed portCHAR * const )"Message_1", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY, NULL );
int2str(buf,xReturn, HEX);uart0Puts("\n\rMes1=");uart0Puts(buf);
pt = (ULONG)malloc(1);
int2str(buf,pt, HEX);uart0Puts("\n\rlast loc = ");uart0Puts(buf);
Примечание. int2str & uart0Puts использую вместо printf ("%8X", ,,,)
Поскольку стандартный форматтер "жрет" ресурсы памяти очень сильно.
Если декларирую большой массив памяти ( чтобы получить приграничное значение для используемой SRAM)
unsigned char myArray[1024*23+792],
то даже задачи не запускаются. Хотя создаются нормально с кодом завершения 1.
first loc = 0x40006980
Mes0=0x1
Mes1=0x1
last loc = 0x40006E40
7FFF - 6E40 = 11BFh = 4543
Вот теперь вопрос .
Почему имея 4543 байт к верхушке памяти это не работает ?
LPC2138 имеет 32K.
Если меняю к char myArray[1024*23+512]; ( разница в 280 байт),
то все работает.
first loc = 0x40006868
Mes0=0x1
Mes1=0x1
last loc = 0x40006D28
Message_0
Message_1
Message_0
7FFF - 6D28 = 12D7h = 4823
У меня 4.6.0 версия FreeRTOS.
Я кстати пробовал различные модели менеджера памяти.
http://www.freertos.org/a00111.html
В текущей версии heap_3.c
Пробовал heap_1 и heap_2. Там еще более напряженно с памятью
Это мои исследования FreeRTOS. Я не могу объяснить это.
Поэтому и не закладываю серьезные проекты на FreeRTOS пока.
Есть идеи как объяснить это ?