文章目录
-
-
-
-
-
- Freertos移植
- TCB控制块
- 中断管理 (内部异常和外部中断)
- 同步互斥与通信
- 消息队列:
- 邮箱:
- 信号量:
- 互斥量:
- 事件组:
- 任务通知:
-
-
-
-
Freertos移植
-
其核心文件为,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);//任务句柄 Void