正点原子STM32MP57学习记录
在CubeMX中开启FreeRTOS
在CubeMx工程中找到Pinout&COnfiguration,在左边框选择Middleware下的FreeRTOS,右边框上面选择“CMSIS_V2”接口即可使用FreeRTOS。
配置FreeRTOS
下面是使用FreeRTOS开发,生成代码可能有用的配置项。
1 内核设置
在右边框下面找到Kernel Setting,往下看到下面几个选项
2 钩子函数(回调函数)定义
继续往下看到Hook function related definitions
USE_IDLE_HOOK 钩子函数是一种回调函数,用于在任务执行一次之后或者某些事件发生后执行的函数,该配置项里面有五个选项,控制5种不同功能的钩子函数开启。使能后,系统生成一个相应的空回调函数:
• USE_IDLE_HOOK 每当空闲任务执行一次
• USE_TICK_HOOK 每个TICK周期
• USE_MALLOC_FAILED_HOOK 当申请动态内存失败时
• USE_DAEMON_TASK_STARTUP_HOOK 任务刚启动时
• CHECK_FOR_STACK_OVERFLOW 任务栈溢出时
3 运行时间和任务状态获取的定义
• GENERATE_RUN_TIME_STATS
→ 开启时间统计功能,在调用 vTaskGetRunTimeStats() 函数时,将任务运行时间信息保存到可读列表中
•USE_STATS_FORMATTING_FUNCTIONS
→ 使能后会生成 vTaskList() 和 vTaskGetRunTimeStats() 函数用于获取任务运行状态
4 软件定时器定义
这四个配置项主要与软件定时器处理任务有关,软件定时器任务属于系统任务(守护线程),开启软件定时器后用于维护软件定时器。默认开启软件定时器任务、软件定时器任务优先级、定时器任务队列长度(FreeRTOS 是通过队列来发送控制命令给定时器任务,叫做定时器命令队列,此处设置队列长度)、软件定时器任务堆栈大小
5 中断优先级设置
上图表示设置FreeRTOS 系统可管理的中断优先级配置范围为5-15
6 创建和配置定时器
点击Add参数配置完成后,生成代码,我们可以在 freertos.c 文件里面看到定时器创建后获得的句柄,以及生成的回调函数。
7 创建和配置信号量
常用于控制对共享资源的访问和任务同步
8 创建和配置互斥量
其实就是一个拥有优先级继承的二值信号量
互斥量使用方式和信号量基本相同,因为互斥量本质上就是信号量的一种。互斥量的释放必须由获取它的任务进行释放,如果不释放,可能会造成死锁
9 创建和配置事件(仅CMSIS_V2有,CMSIS_V1无)
系统需要多对一的同步的情况下使用,比如同时满足5个按键按下时,任务启动
10 任务通知