| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> FreeRTOS临界段代码保护[STM32] -> 正文阅读 |
|
[嵌入式]FreeRTOS临界段代码保护[STM32] |
内核是操作系统的内部核心程序。内核控制,由移植层提供的,属于操作系统为实现某种特定功能而对内核本身执行某种指令,调用系统的底层核心程序,用户应用程序一般情况下是不被允许调用的,不慎会造成系统程序混乱。 FreeRTOS操作系统关于内核控制的API:
FreeRTOS临界状态 临界状态,也就是程序进入了临界区,临界区指的是一个访问共用资源(例如:共用设备或是共用存储器)的程序片段,而这些共用资源又无法同时被多个 线程 访问的特性。 当有线程进入临界区段时,其他线程或是进程必须等待。 ???????FreeRTOS临界段保护,临界段代码就是上述所说的临界区,是不能被打断的代码段。简单来说,进入程序区后,FreeRTOS停止了对其他任务的调度,关闭了中断,使得优先级低于configMAX_SYSCALL_INTERRUPT_PRIORITY的中断得不到响应,这个时间段,系统做到代码保护,来保证现有程序正常运行,好比拥有了一个保护伞,直到该任务退出了临界区。 在最开始接触FreeRTOS操作系统程序,开始任务便首先调用taskENTER_CRITICAL()进入临界区。
这里属于有一个“套娃”,portDISABLE_INTERRUPTS()就是实现关闭中断,uxCriticalNesting用来记录临界区嵌套的次数。uxCriticalNesting == 0时才可以开启中断,这是为了保证在有多个临界区代码保护的时候,不会因为一个临界区代码保护退出,而打开中断,影响了其他的临界区代码保护。只有所有临界区代码保护退出才会打开中断。 static UBaseType_t uxCriticalNesting = 0xaaaaaaaa; /* Initialise the critical nesting count ready for the first task. */uxCriticalNesting = 0; 在临界区的保护伞里并不是无懈可击,进入临界区后须在有限时间内退出,快进快出防止对整个程序造成影响,当然系统的调用会使直接使其退出临界区。 taskEXIT_CRITICAL()用于在任务中退出临界区,不在套娃了,直接展示:
configASSERT函数为宏#define configASSERT(x) if((x)==0) vAssertCalled(__FILE__,__LINE__),属于系统断言,是用于对程序进行调试的,对于执行结构的判断。 以上都是任务级的临界状态,下面是关于中断级临界调用。 中断服务函数进入临界区,调用taskENTER_CRITICAL_FROM_ISR()函数,返回值为ulReturn,返回值须保存,在退出临界区时是要写入的。
退出临界区,调用?taskEXIT_CRITICAL_FROM_ISR(x),x值为上述ulReturn返回值,在这里,ulReturn类似作为交换令牌。
注意:在中断中调用FROM_ISR为后缀的API要注意此时中断优先级,如果大于系统可管理的优先级,编译会出现报错。 #define configLIBRARY_LOWEST_INTERRUPT_PRIORITY?? ??? ??? ?15 ? ? ? ? ? ? ? //中断最低优先级 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 4:47:42- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |