FreeRTOS Support Archive
The FreeRTOS support forum is used to obtain active support directly from Real
Time Engineers Ltd. In return for using our top quality software and services for
free, we request you play fair and do your bit to help others too! Sign up
to receive notifications of new support topics then help where you can.
This is a read only archive of threads posted to the FreeRTOS support forum.
The archive is updated every week, so will not always contain the very latest posts.
Use these archive pages to search previous posts. Use the Live FreeRTOS Forum
link to reply to a post, or start a new support thread.
[FreeRTOS Home] [Live FreeRTOS Forum] [FAQ] [Archive Top] [September 2011 Threads]
I try to get FreeRTOS running on a SAM3U(-EK devkit) in Rowley CrossStudio. While creating tasks goes fine, they do not seem to be executed.
What I did:
- Generate a CrossStudio project for the SAM3U-EK devkit (which includes Rowley start-up and configuration assembly files)
- Include FreeRTOS .c and .h file - take the config file from the SAM3U example project for IAR
- Copy simple task from demo
- Include lowlevel*.c/.h files from AT91LIB - including serveral drivers
It compiles fine. but when I put a breakpoint inside the task, it never gets executed.
My main.c:
// general includes
#include
#include
#include
// includes for FreeRTOS
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "semphr.h"
int i;
void vATaskFunction( void *pvParameters );
int main()
{
i = xTaskCreate( vATaskFunction, "test", 200, NULL, tskIDLE_PRIORITY, NULL );
vTaskStartScheduler();
for ( ;; );
}
void vATaskFunction( void *pvParameters )
{
for( ;; )
{
int j = 0;
i = i +5;
vTaskDelay(250 / portTICK_RATE_MS);
}
}
I guess something goes wrong with interrupts to execute ticks - but I'm lost where to fix this. Any help is really appreciated.
If you step through the call to vTaskStartScheduler() you will find the answer to why the scheduler is not starting.
My (almost certain) guess is that you have not populated the interrupt vector table with the interrupts required by FreeRTOS. That means, you will get to the call to the SVC assembler instruction in vPortStartFirstTask() that is used to start the kernel, then just jump to the default SVC handler instead of the FreeRTOS SVC handler.
If this is the case then, then install xPortSysTickHandler, vPortSVCHandler, xPortPendSVHandler and xPortSysTickHandler in the appropriate places in the vector table. Or, if the vector table is using CMSIS function names for the handlers, add the following lines to FreeRTOSConfig.h:
#define vPortSVCHandler SVC_Handler
#define xPortPendSVHandler PendSV_Handler
#define vPortSVCHandler SVC_Handler
#define xPortSysTickHandler SysTick_Handler
regards.
This did the trick - thank you.
Copyright (C) Amazon Web Services, Inc. or its affiliates. All rights reserved.