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

 
 
> FreeRTOS, LPC2138 и менеджер памяти, Очень большой расход оперативной паямяти
MiniMax
сообщение Feb 27 2008, 09:29
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 12-09-07
Пользователь №: 30 498



Возникают проблемы с запуском ресурсоемких задач под 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 пока.

Есть идеи как объяснить это ?
Прикрепленные файлы
Прикрепленный файл  RtosDemo1.zip ( 2.09 килобайт ) Кол-во скачиваний: 27
 
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 22nd June 2025 - 22:22
Рейтинг@Mail.ru


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