More examples on vTaskSuspend() and vTaskResume() functions
Amruta (talk) 16:34, 17 April 2015 (IST)
Intro
Code
Also see this example on same topic.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/*************************************************************************************************** | |
ExploreEmbedded | |
**************************************************************************************************** | |
* File: main.c (FreeRTOS) | |
* Version: 15.0 | |
* Author: ExploreEmbedded | |
* Website: http://www.exploreembedded.com/wiki | |
* Description: Program to demonstrate the task switching depending on the priorities. | |
And the usage of vTaskSuspend() and vTaskResume() functions | |
The libraries have been tested on ExploreEmbedded development boards. We strongly believe that the | |
library works on any of development boards for respective controllers. However, ExploreEmbedded | |
disclaims any kind of hardware failure resulting out of usage of libraries, directly or indirectly. | |
Files may be subject to change without prior notice. The revision history contains the information | |
related to updates. | |
GNU GENERAL PUBLIC LICENSE: | |
This program is free software: you can redistribute it and/or modify | |
it under the terms of the GNU General Public License as published by | |
the Free Software Foundation, either version 3 of the License, or | |
(at your option) any later version. | |
This program is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU General Public License for more details. | |
You should have received a copy of the GNU General Public License | |
along with this program. If not, see <http://www.gnu.org/licenses/>. | |
Errors and omissions should be reported to codelibraries@exploreembedded.com | |
**************************************************************************************************/ | |
/* Scheduler include files. */ | |
#include "FreeRtOSConfig.h" | |
#include "FreeRTOS.h" | |
#include "task.h" | |
#include "croutine.h" | |
#include "uart.h" // Explore Embedded UART library | |
xTaskHandle TaskHandle_1; | |
xTaskHandle TaskHandle_2; | |
xTaskHandle TaskHandle_3; | |
xTaskHandle TaskHandle_4; | |
xTaskHandle TaskHandle_5; | |
static void MyTask1(void* pvParameters); | |
static void MyTask2(void* pvParameters); | |
static void MyTask3(void* pvParameters); | |
static void MyTask4(void* pvParameters); | |
static void MyTask5(void* pvParameters); | |
#define LED_Task1 0x02u | |
#define LED_Task2 0x04u | |
#define LED_Task3 0x08u | |
#define LED_Task4 0x10u | |
#define LED_Task5 0x20u | |
#define LED_PORT LPC_GPIO2->FIOPIN | |
int main(void) | |
{ | |
SystemInit(); /* Initialize the controller */ | |
UART_Init(38400); /* Initialize the Uart module */ | |
LPC_GPIO2->FIODIR = 0xffffffffu; | |
/* Create the 2 tasks with priorities 1,3. */ | |
xTaskCreate( MyTask1, ( signed char * )"Task1", configMINIMAL_STACK_SIZE, NULL, 1, &TaskHandle_1 ); | |
xTaskCreate( MyTask3, ( signed char * )"Task3", configMINIMAL_STACK_SIZE, NULL, 3, &TaskHandle_3 ); | |
UART_Printf("\n\rIn main function, invoking scheduler"); | |
vTaskStartScheduler(); /* Start the schedular */ | |
while(1); | |
return 0; | |
} | |
static void MyTask1(void* pvParameters) | |
{ | |
LED_PORT = LED_Task1; /* Led to indicate the execution of Task1*/ | |
UART_Printf("\n\rIn Task1, Resuming task2"); | |
vTaskResume(TaskHandle_2); | |
LED_PORT = LED_Task1; /* Led to indicate the execution of Task1*/ | |
UART_Printf("\n\rIn Task1, Resuming task3"); | |
vTaskResume(TaskHandle_3); | |
LED_PORT = LED_Task1; /* Led to indicate the execution of Task1*/ | |
UART_Printf("\n\rIn Task1, Resuming task4"); | |
vTaskResume(TaskHandle_4); | |
LED_PORT = LED_Task1; /* Led to indicate the execution of Task1*/ | |
UART_Printf("\n\rFinally Exiting task1"); | |
while(1); | |
vTaskDelete(TaskHandle_1); | |
} | |
static void MyTask2(void* pvParameters) | |
{ | |
LED_PORT = LED_Task2; /* Led to indicate the execution of Task2*/ | |
UART_Printf("\n\rIn Task2, waiting for some time"); | |
vTaskDelay(200); | |
LED_PORT = LED_Task2; /* Led to indicate the execution of Task2*/ | |
UART_Printf("\n\rBack in Task2, Deleting Task2"); | |
vTaskDelete(TaskHandle_2); | |
} | |
static void MyTask3(void* pvParameters) | |
{ | |
LED_PORT = LED_Task3; /* Led to indicate the execution of Task3*/ | |
UART_Printf("\n\rIn Task3, creating new task 2 and 4"); | |
xTaskCreate( MyTask2, ( signed char * )"Task2", configMINIMAL_STACK_SIZE, NULL, 2, &TaskHandle_2); | |
xTaskCreate( MyTask4, ( signed char * )"Task4", configMINIMAL_STACK_SIZE, NULL, 4, &TaskHandle_4 ); | |
LED_PORT = LED_Task3; /* Led to indicate the execution of Task3*/ | |
UART_Printf("\n\rBack in Task3, Creating Task5"); | |
xTaskCreate( MyTask5, ( signed char * )"Task5", configMINIMAL_STACK_SIZE, NULL, 5, &TaskHandle_5 ); | |
LED_PORT = LED_Task3; /* Led to indicate the execution of Task3*/ | |
UART_Printf("\n\rBack in Task3, waiting for some time"); | |
vTaskDelay(200); | |
LED_PORT = LED_Task3; /* Led to indicate the execution of Task3*/ | |
UART_Printf("\n\rBack in Task3, Deleting Task3"); | |
vTaskDelete(TaskHandle_3); | |
} | |
static void MyTask4(void* pvParameters) | |
{ | |
LED_PORT = LED_Task4; /* Led to indicate the execution of Task4*/ | |
UART_Printf("\n\rIn Task4, Suspending tasks 2"); | |
vTaskSuspend(TaskHandle_2); | |
LED_PORT = LED_Task4; /* Led to indicate the execution of Task4*/ | |
UART_Printf("\n\rIn Task4, Suspending tasks 3"); | |
vTaskSuspend(TaskHandle_3); | |
LED_PORT = LED_Task4; /* Led to indicate the execution of Task4*/ | |
UART_Printf("\n\rIn Task4, Suspending tasks 4"); | |
vTaskSuspend(NULL); | |
LED_PORT = LED_Task4; /* Led to indicate the execution of Task4*/ | |
UART_Printf("\n\rBack in Task4, Deleting Task4"); | |
vTaskDelete(TaskHandle_4); | |
} | |
static void MyTask5(void* pvParameters) | |
{ | |
LED_PORT = LED_Task5; /* Led to indicate the execution of Task5*/ | |
UART_Printf("\n\rIn Task5, waiting for some time"); | |
vTaskDelay(200); | |
LED_PORT = LED_Task5; /* Led to indicate the execution of Task5*/ | |
UART_Printf("\n\rBack in Task5, Deleting Task5"); | |
vTaskDelete(TaskHandle_5); | |
} | |