Hi,
vTaskStartScheduler() jumps to FaultISR(void) when I use WORK_HANDLE data structure. When I use single variable to pass void vATask( void *pvParameters ),
it works fine. I’m using heap_2.c. Even if I use Heap_4.c , it doesn’t work.
I’m using FreeRTOS V8.2.3 and CCS74.
typedef struct A_Message{
char ucMessageID;
char ucData[2];
} AMessage;
typedef struct {
QueueHandle_t xQueue;
TaskHandle_t xHandle;
}WORK_HANDLE;
int main( void )
{
WORK_HANDLE Handle;
Handle.xQueue = xQueueCreate(QUEUE_LENGTH, QUEUE_ITEM_SIZE);
if (Handle.xQueue == NULL)
{
return 1;
}
xTaskCreate(vATask, "TaskA", 200, (void *)&Handle, 1, &Handle.xHandle);
xTaskCreate(vBTask, "TaskB", 200, (void *)&Handle, 1, NULL);
vTaskStartScheduler();
for (;;)
}
void vATask( void *pvParameters )
{
QueueHandle_t xQueue;
TaskHandle_t xHandleTA;
AMessage xMessage;
WORK_HANDLE *pSt;
pSt=(WORK_HANDLE*)pvParameters;
xQueue = pSt->xQueue;
xHandleTA=pSt->xHandle;
xMessage.ucMessageID = 2;
for( ;; )
{
if( xQueueSendToBack( xQueue, &xMessage, pdMS_TO_TICKS( 100 ) ) != pdPASS )
{
}
vTaskDelay( pdMS_TO_TICKS(500 ) );
xMessage.ucMessageID++;
}
}
void vBTask( void *pvParameters )
{
QueueHandle_t xQueue;
TaskHandle_t xHandleTB;
AMessage xMessage;
WORK_HANDLE *pSt;
pSt=(WORK_HANDLE*)pvParameters;
xQueue = pSt->xQueue;
xHandleTB=pSt->xHandle;
xQueue = ( QueueHandle_t )pvParameters;
for( ;; )
{
if( xQueueReceive( xQueue, &xMessage, portMAX_DELAY ) != pdPASS )
{
}
else
{
}
}
}