Fenolftalein
Nov 14 2012, 07:45
Доброго времени суток.
При попытке скомпилировать проект, с использованием трассировочных макросов (установка configUSE_TRACE_FACILYTI в 1 в "FreeRTOSConfig.h")
компилятор выдает ошибку "type mismatch in assigment" на строчку
/* Write the details of all TCB's in pxList into buffer. */
listGET_OWNER_OF_NEXT_ENTRY( pxFirstTCB, pxList);
в файле "tasks.c"
При установке configUSE_TRACE_FACILYTI в 0 все компилируется нормально.
Версия FreeRTOS 7.2.0
Компилятор C18
Fenolftalein
Nov 15 2012, 02:49
Разобрался. Макрос configUSE_TRACE_FACILYTI нужно устанавливать только при трассировке с записью в буфер, при этом надо выделить память под буфер и задать на него указатель.
Другая проблема, в некоторые отладочные макросы, к примеру traceTASK_CREATE(pxTask), передается указатель на структуру блока управления задачей tskTaskControlBlock. Как из этого указателя вытащить данные о задаче (к примеру, имя задачи, приоритет)? Для этого указатель надо привести к типу tskTaskControlBlock, но поскольку определение структуры находиться в с-файле, компилятор не видит его в файле, где я переопределяю трассировочные макросы.
Возможные варианты решения:
1. Определить смещение нужных полей от начала структуры
2. Определить свою структуру, с полями идентичными полям структуры tskTaskControlBlock и приводить указатель к указателю на нее.
Оба решения негибки и не очевидны. Наверное, авторы предусмотрели более простое решение. Хотелось бы знать, какое?
P.S.
Непонятно, зачем потребовалось размещать определение структуры tskTaskControlBlock в с-файле. Или это такая защита от случайного доступа к полям структуры?