声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结
环境 keil , stm32f103
函数预览
taskTIELD() 任务切换
taskENTER_CRITICAL() 进入临界区,用于任务中
taskEXIT_CRITICAL() 退出临界区,用于任务中
taskENTER_CRITICAL_FROM_ISR() 进入临界区,用于中断服务函数中
taskEXIT_CRITICAL_FROM_ISR() 退出临界区,用于中断服务函数中
taskDISABLE_INTERRUPTS() 关闭中断
taskENABLE_INTERRUPTS() 打开中断
vTaskStartScheduler() 开启任务调度器
vTaskEndScheduler() 关闭任务调度器
vTaskSuspendAll() 挂起任务调度器
xTaskResumeAll() 恢复任务调度器
vTaskStepTick() 设置系统节拍值
这些函数一般在应用程序不适用,
对于个人初期学习目标, 暂且先会使用这些API函数即可。 代码深入分析, 将来有时间再详细研究。
值得注意的时
vTaskEndScheduler 对于stm32来说是没有作用的,
也就是说当任务调度器 vTaskStartScheduler() 开启之后, 不会被关闭, 最多就是调用
vTaskSuspendAll() 挂起任务调度。
还有一点, 当
vTaskSuspendAll() 多层挂起任务调度器之后
想要xTaskResumeAll()恢复任务调度器
也需要对应的挂起次数进行恢复.
临界段代码保护:
有些代码在执行的过程中不希望被打断, 一旦发生打断,就会很容易出错误(譬如 I2C操作 EEPROM),引起
就需要设置临界段,来防止被打断。
临界代码保护有4个函数
taskENTER_CRITICAL() 进入临界区,用于任务中
taskEXIT_CRITICAL() 退出临界区,用于任务中
taskENTER_CRITICAL_FROM_ISR() 进入临界区,用于中断服务函数中
taskEXIT_CRITICAL_FROM_ISR() 退出临界区,用于中断服务函数中
看声明就知道
taskENTER_CRITICAL()
taskEXIT_CRITICAL()
在任务中进行使用, 这两个支持嵌套, 也就是说, 在保护的过程中, 可以再添加多层保护。另外,
退出临界区,也需要对应的进入时的次数进行退出。
另外的两个:
taskENTER_CRITICAL_FROM_ISR()
taskEXIT_CRITICAL_FROM_ISR()
在中断服务函数中使用。 要使用这两个函数,必须这个中断的优先级要小于
configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY 的优先级。