其核心文件为,tasks.c、timers.c、queue.c、event_groups.c、croutine.c、list.c。源码兼顾了很多平台,但是我们可以删除一些不用的平台以及例程等,只保留我们要的。
比如RVDS/ARM_CM3,这表示cotexM3架构再RVDS或Keil工具上的移植文件(比如下图中的port.c、portmacro.h)
在编程过程中的大部分宏配置都在FreeRTOSConfig.h这个配置文件(调度、优先级、空闲任务等)
任务切换基础
1、任务间的切换,是利用tick中断实现的(关于这个时间片轮转的时间通过上面提到过的配置文件设置)
2、stm32+freertos之所以要用到两套timebase(一是freertos的心跳tick (os_tick)
3、防止在高优先级(优先级高于systick)中断服务中调用HAL_Delay(),导致中断服务忙等待,这样任何优先级低于该中断的中断都得不到服务,当然也包括os的全部调度.
BaseType_t xTaskCreate(TaskFunction_t pxTaskCode,//函数指针
const char* const pcName,//任务名字
const configSTACK_DEPTH usStackDepth,//任务栈大小
void * const pv Parameters,//传入任务的参数,通常是指的是任务的参数
UbaseType_t uxPriority,//优先级
TaskHandle_t * const pxCreatedTask);//任务函数句柄
上面是动态创建任务,而静态创建任务是需要自己分配任务堆栈以及TCB控制块大小
Void vTaskDelete(TaskHandle_t xTaskToDelete