一、创建单任务
任务使用的栈和任务控制块都是静态内存,存储在SRAM中。
static void LED_task(void *parameter)
{
while(1);
vTaskDelay(20);
}
任务必须是一个死循环
任务必须是死循环while(1);否则任务将通过LR返回,如果LR指向了非法的内存就会产生HardFault_Handler,而FreeRTOS指向一个死循环,那么任务返回之后就在死循环中执行,这样子的任务是不安全的,所以避免这种情况,任务一般都是死循环并且无返回值的
VTaskDelay()函数
任务里面的延时函数必须使用FreeRTOS里面提供的延时函数,并不能使用我们裸机编程中的那种延时。这两种的延时的区别是FreeRTOS里面的延时是阻塞延时,即调用vTaskDelay()函数的时候,当前任务会被挂起,调度器会切换到其他就绪的任务,从而实现多任务 。如果还是使用裸机编程中的那种延时,那么整个任务就成为了一个死循环,如果恰好该任务的优先级是最高的,那么系统永远都是在这个任务中运行,比它优先级更低的任务无法运行,根本无法实现多任务。
二、定义任务栈
任务函数、名称、栈深度、参数、优先级初始化
vTaskStartScheduler(); / 启动任务,开启调度 /
三、定义任务控制块指针
任务句柄是一个指针,用于指向一个任务,当任务创建好之后,它就具有了一个任务句柄
以后我们要想操作这个任务都需要通过这个任务句柄,如果是自身的任务操作自己,那么
这个句柄可以为NULL。*
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。