IAR 6.xx TNKernel RTOS (ARM) Plugin 1.0a
Поддерживает TNKernel 2.6 для ARM и Cortex. TNKernel используется в авторском варианте со следующим изменением:
- в файле tn_port.h значение #define TN_FILL_STACK_VAL замененен с 0xFFFFFFFF на 0xDEADBEEF (для точного расчета % расхода стека)
Плагин отображает следующие объекты TNKernel их параметры:
task - имя TN_TCB задачи, приоритет, состояние, причина ожидания, объект ожидания, начало стека, конец стека, размер стека, текущее положение стека, % максимального использования стека, % текущего использования стека
mutex - имя TN_MUTEX мьютекса, тип, приоритет (для Ceiling), счетчик, захватившая задача
semaphore - имя TN_SEM семафора, счетчик, макс. значение счетчика, список задач ожидания
event - имя TN_EVENT события, тип, текущий паттерн, список задач ожидания
queue - имя TN_DQUE очереди, адрес массива, размер массива, голова, хвост, список задач ожидания записи, список задач ожидания чтения
memory pool - имя TN_FMP пула памяти, адрес пула, размер блока, кол-во блоков в пуле, кол-во свободных блоков, список задач ожидания
Кроме указанных выше
нужных изменений в TNKernel (хотя если их не сделать, то будет неправильно показан только % максимального использования стека задачи) в моем варианте TNKernel все системные объекты RTOS имеют текстовые имена и добавлены функции присвоения этих имен. Это несколько визуализирует отладку TNKernel.
Данная возможность определяется через #define DEBUG_USENAME.
например так
Код
/----- Semaphore -----
typedef struct _TN_SEM
{
CDLL_QUEUE wait_queue;
int count;
int max_count;
int id_sem; //-- ID for verification(is it a semaphore or another object?)
// All semaphores have the same id_sem magic number (ver 2.x)
#ifdef DEBUG_USENAME
char *name; //-- Semaphore name
#endif
в tn.h и
Код
//----------------------------------------------------------------------------
#ifdef DEBUG_USENAME
int tn_sem_set_name(TN_SEM * sem, char * str)
{
#if TN_CHECK_PARAM
if(sem == NULL) return TERR_WRONG_PARAM;
#endif
sem->name = str;
return TERR_NO_ERR;
}
#endif
в tn_sem.c. И так для всех объектов TNKernel. В общем кому надо - сделает сам.
По сути данный плагин подходит для любых процессоров, у которых размеры системных объектов совпадают с размерами таковых для ARM, но при необходимости можно переделать его под любой порт TNKernel.