FreeRTOS学习杂记记录04 | 您所在的位置:网站首页 › rtos怎么学 › FreeRTOS学习杂记记录04 |
FreeRTOS的中断配置是一个很重要的内容,需要根据所使用的MCU来具体配置 重点:不同的MCU所在FreeRTOS的配置是不一样的,当你使用了其他芯片,配置就有所不同了,不要固定思维。 ---- 你需要理解你所使用的MCU的中断资源 M3-内部的有些中断具有固定的优先级 编程习惯---在数字前面加数据类型, 比如寄存器32位,我们对它进行赋值,按理说是0X700,忽略了前面的很多0没写,我们需要这样写(uint32_t)0X700,这样更好,更规范 下面举例是:ST库函数的宏定义,他们只要使用十六进制的值的时候,都会加入数据类型 理解这个图:FreeRTOS可以管理一些中断,也可以不管理一些中断,而哪些被管理的,才能使用FreeRTOS提供的函数(必须带有FromISR),而哪些没被管理的中断,不能使用FreeRTOS提供的函数 至于FreeRTOS管理的范围是可以设置的,默认是5-15被管理 0-4不被管理 ,宏定义进行配置即可 不被被打断:关闭中断、关闭任务调度器 其实任务调度依赖的就是最低优先级的中断:如Pensv 使用注意点:支持嵌套,因此需要成对出现,执行时间短,中间的执行代码不能时间太长 一个中断需要使用这个临界段保护的功能前提是:此中断是FreeRTOS管理的中断
#define taskEXIT_CRITICAL_FROM_ISR( x portCLEAR_INTERRUPT_MASK_FROM_ISR( x ) --这个函数有点奇怪,它是存在形参的,而他的形参是ENTER的返回值---使用的方法是一个模板(不需要知道为什么,只需要知道怎么用即可) 返回值其实就是为了记录,然后方便我们恢复之前的代码而已(源码分析) ![]() 通过此函数完成任务切换,如果不等于就开启任务切换 该函数的意思就是:uxSchedulerSuspended等于pdFALSE的话就执行if里面的语句xSwitchRequired = pdTRUE;说明会改变xSwitchRequired的值 如果不等于的话,就直接return了,因此只要uxSchedulerSuspended变化了,则xSwitchRequired的值保持初始值pdFALSE,反之就不是,就这样完成了任务是否切换的选择
![]()
|
CopyRight 2018-2019 实验室设备网 版权所有 |