FreeRTOS静态任务创建与删除
来源:互联网 发布:海王星股票交易软件 编辑:程序博客网 时间:2024/05/20 09:05
//空闲任务任务堆栈
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
//空闲任务控制块
static StaticTask_t IdleTaskTCB;
//空闲任务API函数
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize )
{
*ppxIdleTaskStackBuffer = IdleTaskStack;
*ppxIdleTaskTCBBuffer = &IdleTaskTCB;
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
//定时器任务任务堆栈
static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
//定时器任务控制块
static StaticTask_t TimerTaskTCB;
//定时器任务API函数
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
StackType_t **ppxTimerTaskStackBuffer,
uint32_t *pulTimerTaskStackSize )
{
*ppxTimerTaskStackBuffer = TimerTaskStack;
*ppxTimerTaskTCBBuffer = &TimerTaskTCB;
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
}
#define START_TASK_PRIO 1 //任务优先级
#define START_STK_SIZE 128 //任务堆栈大小
StackType_t Start_Task_Stack[START_STK_SIZE]; //任务堆栈
StaticTask_t Start_Task_TCB; //任务控制块
TaskHandle_t StartTask_Handle; //开始任务句柄
void start_task( void * pvParameters ); //任务函数
#define TASK1_PRIO 2
#define TASK1_STK_SIZE 128
StackType_t Task1_Stack[TASK1_STK_SIZE];
StaticTask_t Task1_TCB;
TaskHandle_t Task1_Handle;
void task1(void * pvParameters);
#define TASK2_PRIO 3
#define TASK2_STK_SIZE 128
StackType_t Task2_Stack[TASK2_STK_SIZE];
StaticTask_t Task2_TCB;
TaskHandle_t Task2_Handle;
void task2(void * pvParameters);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 0-15一共16级优先级
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
StartTask_Handle = xTaskCreateStatic( (TaskFunction_t) start_task,
(char * ) "start_task",
(uint32_t ) START_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) START_TASK_PRIO,
(StackType_t * ) Start_Task_Stack,
(StaticTask_t *) &Start_Task_TCB );
vTaskStartScheduler(); //开启任务调度
}
//开始任务
void start_task( void * pvParameters )
{
taskENTER_CRITICAL(); //进入临界区
//创建任务1
Task1_Handle = xTaskCreateStatic( (TaskFunction_t) task1,
(char * ) "task1",
(uint32_t ) TASK1_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK1_PRIO,
(StackType_t * ) Task1_Stack,
(StaticTask_t *) &Task1_TCB );
//创建任务2
Task2_Handle = xTaskCreateStatic( (TaskFunction_t) task2,
(char * ) "task2",
(uint32_t ) TASK2_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK2_PRIO,
(StackType_t * ) Task2_Stack,
(StaticTask_t *) &Task2_TCB );
vTaskDelete(StartTask_Handle); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//任务1
void task1(void * pvParameters)
{
while(1)
{
LED0 = !LED0;
vTaskDelay(500);
}
}
//任务2
void task2(void * pvParameters)
{
while(1)
{
LED1 = 0;
vTaskDelay(500);
LED1 = 1;
vTaskDelay(1000);
}
}
static StackType_t IdleTaskStack[configMINIMAL_STACK_SIZE];
//空闲任务控制块
static StaticTask_t IdleTaskTCB;
//空闲任务API函数
void vApplicationGetIdleTaskMemory( StaticTask_t **ppxIdleTaskTCBBuffer,
StackType_t **ppxIdleTaskStackBuffer,
uint32_t *pulIdleTaskStackSize )
{
*ppxIdleTaskStackBuffer = IdleTaskStack;
*ppxIdleTaskTCBBuffer = &IdleTaskTCB;
*pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
}
//定时器任务任务堆栈
static StackType_t TimerTaskStack[configTIMER_TASK_STACK_DEPTH];
//定时器任务控制块
static StaticTask_t TimerTaskTCB;
//定时器任务API函数
void vApplicationGetTimerTaskMemory( StaticTask_t **ppxTimerTaskTCBBuffer,
StackType_t **ppxTimerTaskStackBuffer,
uint32_t *pulTimerTaskStackSize )
{
*ppxTimerTaskStackBuffer = TimerTaskStack;
*ppxTimerTaskTCBBuffer = &TimerTaskTCB;
*pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
}
#define START_TASK_PRIO 1 //任务优先级
#define START_STK_SIZE 128 //任务堆栈大小
StackType_t Start_Task_Stack[START_STK_SIZE]; //任务堆栈
StaticTask_t Start_Task_TCB; //任务控制块
TaskHandle_t StartTask_Handle; //开始任务句柄
void start_task( void * pvParameters ); //任务函数
#define TASK1_PRIO 2
#define TASK1_STK_SIZE 128
StackType_t Task1_Stack[TASK1_STK_SIZE];
StaticTask_t Task1_TCB;
TaskHandle_t Task1_Handle;
void task1(void * pvParameters);
#define TASK2_PRIO 3
#define TASK2_STK_SIZE 128
StackType_t Task2_Stack[TASK2_STK_SIZE];
StaticTask_t Task2_TCB;
TaskHandle_t Task2_Handle;
void task2(void * pvParameters);
int main(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_4);//设置系统中断优先级分组4 0-15一共16级优先级
delay_init(); //延时函数初始化
uart_init(115200); //初始化串口
LED_Init(); //初始化LED
StartTask_Handle = xTaskCreateStatic( (TaskFunction_t) start_task,
(char * ) "start_task",
(uint32_t ) START_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) START_TASK_PRIO,
(StackType_t * ) Start_Task_Stack,
(StaticTask_t *) &Start_Task_TCB );
vTaskStartScheduler(); //开启任务调度
}
//开始任务
void start_task( void * pvParameters )
{
taskENTER_CRITICAL(); //进入临界区
//创建任务1
Task1_Handle = xTaskCreateStatic( (TaskFunction_t) task1,
(char * ) "task1",
(uint32_t ) TASK1_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK1_PRIO,
(StackType_t * ) Task1_Stack,
(StaticTask_t *) &Task1_TCB );
//创建任务2
Task2_Handle = xTaskCreateStatic( (TaskFunction_t) task2,
(char * ) "task2",
(uint32_t ) TASK2_STK_SIZE,
(void * ) NULL,
(UBaseType_t ) TASK2_PRIO,
(StackType_t * ) Task2_Stack,
(StaticTask_t *) &Task2_TCB );
vTaskDelete(StartTask_Handle); //删除开始任务
taskEXIT_CRITICAL(); //退出临界区
}
//任务1
void task1(void * pvParameters)
{
while(1)
{
LED0 = !LED0;
vTaskDelay(500);
}
}
//任务2
void task2(void * pvParameters)
{
while(1)
{
LED1 = 0;
vTaskDelay(500);
LED1 = 1;
vTaskDelay(1000);
}
}
阅读全文
0 0
- FreeRTOS静态任务创建与删除
- FreeRTOS 任务创建和删除(静态)
- FREERTOS之任务创建删除
- FreeRTOS之任务创建删除
- FreeRTOS动态创建任务和删除任务
- FreeRTOS之任务创建和删除函数
- FreeRTOS 任务创建和删除(动态)
- FreeRTOS系列第10篇---FreeRTOS任务创建和删除
- FreeRTOS系列第10篇---FreeRTOS任务创建和删除
- FreeRTOS任务创建
- FreeRTOS任务创建
- FreeRTOS任务创建
- FreeRTOS 任务调度 任务创建
- FreeRTOS 任务管理之任务删除
- FreeRTOS 任务管理之任务创建
- FreeRTOS任务管理与控制
- FreeRTOS高级篇2---FreeRTOS任务创建分析
- FreeRTOS高级篇2---FreeRTOS任务创建分析
- 044-Java-035
- python循环外使用else
- go语言学习笔记(2017-06-08)
- Android Audio BSP工程师 需要清楚的基本知识点
- Comparable与Comparator的比较
- FreeRTOS静态任务创建与删除
- android:windowSoftInputMode属性详解以及editText监听键盘回车会执行两次的解决方法
- Spring+SpringMvc+MyBatis整合教程(入门级)
- db2look
- CMS介绍
- 【剑指offer-解题系列(50)】把字符串转换成整数
- linux学习共享服务之samba
- Android弹幕实现:基于B站弹幕开源系统(7)QQ、微信聊天气泡样式的弹幕
- 运维小白的python之路(六)——面向对象