I am a beginner at freeRTOS and trying to make multiple tasks. When I run Example 2(provided in Example Codes) in Windows 10, it runs perfectly and I get the following output:-
Task 1 is running
Task 2 is running
Task 1 is running and so on
But when I run the same code on my FRDM-K64F board, Task 2 Does’nt even run and I only get :-
Task 1 is running
Task 1 is running
Task 1 is running …
The code on FRDM-K64F is as follows:-
~~~
include “FreeRTOS.h”
include “task.h”
include “queue.h”
include “timers.h”
/* Freescale includes. */
include “fsldeviceregisters.h”
include “fsldebugconsole.h”
include “board.h”
include “pin_mux.h”
include “clock_config.h”
/*******************************************************************************
* Definitions
******************************************************************************/
/* Task priorities. */
define hellotaskPRIORITY (configMAX_PRIORITIES – 1)
/*******************************************************************************
* Prototypes
******************************************************************************/
static void hello_task(void *pvParameters);
/*******************************************************************************
* Code
******************************************************************************/
/*!
* @brief Application entry point.
*/
define mainDELAYLOOPCOUNT ( 0xffffff )
/* The task function. */
void vTaskFunction( void *pvParameters );
/* Define the strings that will be passed in as the task parameters. These are
defined const and off the stack to ensure they remain valid when the tasks are
executing. */
const char *pcTextForTask1 = “Task 1 is runningrn”;
const char *pcTextForTask2 = “Task 2 is runningrn”;
int main(void)
{
/* Init board hardware. */
BOARD_InitPins();
BOARD_BootClockRUN();
BOARD_InitDebugConsole();
xTaskCreate( vTaskFunction,
"Task 1",
1000,
(void*)pcTextForTask1,
1, /* This task will run at priority 1. */
NULL ); /* We are not using the task handle. */
xTaskCreate( vTaskFunction, "Task 2", 1000, (void*)pcTextForTask2, 1, NULL );
vTaskStartScheduler();
/* The following line should never be reached because vTaskStartScheduler()
will only return if there was not enough FreeRTOS heap memory available to
create the Idle and (if configured) Timer tasks. Heap management, and
techniques for trapping heap exhaustion, are described in the book text. */
for( ;; );
return 0;
}
void vTaskFunction( void *pvParameters )
{
char *pcTaskName;
volatile uint32_t ul;
/* The string to print out is passed in via the parameter. Cast this to a
character pointer. */
pcTaskName = ( char * ) pvParameters;
/* As per most tasks, this task is implemented in an infinite loop. */
for( ;; )
{
/* Print out the name of this task. */
printf( pcTaskName );
/* Delay for a period. */
for( ul = 0; ul < mainDELAY_LOOP_COUNT; ul++ )
{
/* This loop is just a very crude delay implementation. There is
nothing to do in here. Later exercises will replace this crude
loop with a proper delay/sleep function. */
}
}
}
~~~