RTOS
系统
常见系统有:
FreeRTOS,UCOS,RTX,RT_Thread,DJYOS
核心内容:实时内核(可剥夺性内核)
FREERTOS
1.开源
2.免费
About FreeRTOSConfig.h
配置基本是通过使用多个“#define”来定义宏定义实现的
“INCLUDE__”
开始的宏
这个可以用来表示使能或除能FreeRTOS中对应的API函数
比如当宏INCLUDE__vTaskPrioritySet设置为0的时候就不能使用对应的API函数(设置1的时候
可以使用)(类似于条件编译)
API函数在这里进行了折叠,目的是为了节省空间,减少占用成本
“config“
开始的宏(用法上跟
INCLUDE__
一样)
1.
知识拓展:断言(
C
语言)中称之为
ASSERT()
函数
1.assert函数是一个宏,可以理解为一个if语句。
2.使用场景:在debug的时候常用,目的是为了检查某一个偶然情况,如果该偶然情况出现
(条件返回错误)则条件终止运行。
3.调试阶段使用结束后可以通过#define NOBUG来禁用,防止因产生过大开销。
2.在
freertos
中这里用了
configassert
()来等同于上述
assert
()函数的作用。来检查参数是否正 确,同样!调试完成之后尽量注释掉断言。一
.
任务的创建(调用
API
函数)
xTaskCreate():使用动态方法创建一个任务
xTaskCreateStatic():使用静态方法
xTaskCreateRestricted():创建一个使用MPU进行限制的任务,相关内存使用动态内存分配
vTaskDelete():删除一个任务。
1.
动态方法创建函数(记得去使能)
#define START_TASK_PRIO 1//任务优先级(这里一般不设为0,因为系统开启需要一个空闲函数)
#define START_STK_SIZE 120//任务内存
void start_task(void*pvParameters);//任务函数
TaskHandle_t StartTask_Handler;//任务句柄
#define TASK1_TASK_PRIO 1
#define TASK1_STK_SIZE 120//任务内存
void task1_task(void*pvParameters);//任务函数
TaskHandle_t Task1Task_Handler;//任务句柄
#define TASK2_TASK_PRIO 1
#define TASK2_STK_SIZE 120//任务内存
void task2_task(void*pvParameters);//任务函数
TaskHandle_t Task2Task_Handler;//任务句柄
int main
{
xTaskCreate(
(TaskFunction_t)start_task,
(char* )"start_task",
(uint16_t )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRIO,
(TaskHandle_t* )&StartTask_Handler,
);//创建任务环
vTaskStartScheduler();//开启任务调度
}
void start_task(void*pvParemeters)
{
//创建任务一
xTaskCreate(
(TaskFunction_t)start_task,
(char* )"start_task",
(uint16_t )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRIO,
(TaskHandle_t* )&StartTask_Handler,);
//创建任务二
xTaskCreate(
(TaskFunction_t)start_task,
(char* )"start_task",
(uint16_t )START_STK_SIZE,
(void* )NULL,
(UBaseType_t )START_TASK_PRIO,
(TaskHandle_t* )&StartTask_Handler,);
vTaskDelete(StartTask_Handler);//删除任务,注意要用该任务的任务句柄
}
void task1_task(void*pvParemeters//这里的意思是动态创建任务函数)
{
while(1)
{
/*写具体的任务*/
}
}
void task2_task(void*pvParemeters//这里的意思是动态创建任务函数)
{
while(1)
{
/*写具体的任务*/
}
}