FreeRTOS学习(七) 内核控制函数

声明及感谢: 跟随正点原子资料学习, 在此作为学习的记录和总结
环境 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 的优先级。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值