Привет всем!
Решил тут морально подрости и заюзать серьёзную ось.
Входящие данные - Atmega128 + 32k ExtSRAM + 240x128 GLCD t6963c
Пытаюсь изучить все нюансы ибо предстоит довольно тяжелый и ресурсоемкий проект.
Взял порт с сайта кодевижна. Рассмотрел примеры и уже вечером получилось выводить на экран через бинарные мутексы столбики строк, графику и текстовую инфу о процессах.
Первая проблема - по ходу недопортированы функции мониторинга - нету вообще функции vTaskGetRunTimeStats
Попытка из общих исходников её туда перенести показала что портировали долго и упорно - ни один тип данных ни одна переменная и ни одна функция не совпадает...Тоесть состояние и размер свободного стека по забачам я могу посмотреть а процент загрузки процессора нет. Ну да ладно.
Вторая проблема - Моя версия этой операционки никогда не попадает в vApplicationIdleHook - я туда поставил счетчик и вот в нем всегда нуль.
Дальше - задолбался ловить глюки с переполнением стека. Памяти попой жуй а грабли эти постоянно ловлю.
Решил прописать
Код:
#define configCHECK_FOR_STACK_OVERFLOW 1
Это привело к появлению в теле Tasks.c макроса
Код:
taskFIRST_CHECK_FOR_STACK_OVERFLOW();
Который превращается в
Код:
/* Only the current stack state is to be checked. */
#define taskFIRST_CHECK_FOR_STACK_OVERFLOW() \
{ \
extern void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName ); \
\
/* Is the currently saved stack pointer within the stack limit? */ \
if( pxCurrentTCB->pxTopOfStack >= pxCurrentTCB->pxEndOfStack ) \
{ \
vApplicationStackOverflowHook( ( xTaskHandle ) pxCurrentTCB, pxCurrentTCB->pcTaskName ); \
} \
}
вот такого кода. Как я понимаю прототип функции должен быть
Код:
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName )
Именно таким. Копирую его в главный файл где void main просто в конце листинга
Код:
void vApplicationStackOverflowHook( xTaskHandle *pxTask, signed portCHAR *pcTaskName )
{
}
и компилер упорно орет
Код:
Error: \14\1.c(376): function parameter #1 doesn't match its previous declaration from file: '\14\FreeRTOS\tasks.c', line: 1411
Линия 1411 это taskFIRST_CHECK_FOR_STACK_OVERFLOW();
Что за борода?компилятор CVAVR 3.12 adv
Так то оно впринципе работает но хочется моргать светиком когда стек переполняется и в уарте ловить по какой задаче чтоб ей увеличить стек.
Вторая проблема - сколько должен быть параметр DataStackSize в свойствах проекта?
Пару раз словился на том что размер этого стека 1000 байт, компилятор предсказал использование стека в 130 байт а 5-ю задачу я создать не могу - вылетает в ребут проц! увеличил до 3к и заработало ...но чтото это как-то дофига... мне ещё огромный массив ланных в оперативке хранить и перелопачивать а 10к памяти как сдуло