首页 > 其他分享 >STM32F1+HAL库+FreeTOTS学习6——临界段代码保护函数&任务调度器的挂起和恢复函数

STM32F1+HAL库+FreeTOTS学习6——临界段代码保护函数&任务调度器的挂起和恢复函数

时间:2024-07-06 15:59:45浏览次数:14  
标签:HAL 函数 中断 代码 临界 CRITICAL 任务调度

STM32F1+HAL库+FreeTOTS学习6——临界段代码保护函数

上一期我们学习了FreeRTOS的内核中断管理以及中断屏蔽控制函数,下面我们来学习临界端代码保护函数的使用

临界段

临界段也叫临界区,指的是必须完整运行完,不能被任务调度、中断等事件打断的代码段,适用于一些需严格按照时序初始化的外设、比如IIC、SPI等,还有就是一些系统自身的需要、用户需求等。。。

在我们之前操作系统的代码中,开始任务创建其他任务也用到了临界段代码保护函数,如图:

在这里插入图片描述
下面我们来了解一下具体的用法:

临界段代码保护函数

临界段代码保护函数中关闭任务调度,并且屏蔽中断响应

函数描述
taskENTER_CRITICAL()任务级进入临界段
taskEXIT_CRITICAL()任务级退出临界段
taskENTER_CRITICAL_FROM_ISR()中断级进入临界段
taskEXIT_CRITICAL_FROM_ISR()中断级退出临界段
  • 临界区是直接屏蔽了中断,系统任务调度靠中断,ISR也靠中断
  • 具有成对使用、支持嵌套、的特点

具体使用方法如下:


/*
需要注意的是,尽量保持临界段耗时短,需要快进快出
*/

/*任务中进入临界区*/
taskENTER_CRITICAL() ;
{
        … …	/* 临界区代码 */
}
taskEXIT_CRITICAL()	;
/*任务中推出临界区*/

/*中断中进入临界区*/
uint32_t  save_status;
save_status  = taskENTER_CRITICAL_FROM_ISR();
{
        … …	/* 临界区代码 */
}
taskEXIT_CRITICAL_FROM_ISR(save_status );
/*中断中推出临界区*/

任务调度器的挂起和恢复函数

与临界段代码保护函数不同,任务调度器的挂起智慧关闭任务调度,但是中断依然可以响应

函数描述
vTaskSuspendAll()挂起任务调度器
xTaskResumeAll()恢复任务调度器
  • 与临界区不一样的是,挂起任务调度器,未关闭中断;
  • 它仅仅是防止了任务之间的资源争夺,中断照样可以直接响应
  • 挂起调度器的方式,适用于临界区位于任务与任务之间;既不用去延时中断,又可以做到临界区的安全

具体使用方法如下:


/*挂起任务调度器,关闭任务调度,但不屏蔽中断*/
vTaskSuspendAll() ;
{
        … …	/* 内容 */
}
xTaskResumeAll()	;
/*恢复任务调度器,打开任务调度,但不屏蔽中断*/

标签:HAL,函数,中断,代码,临界,CRITICAL,任务调度
From: https://blog.csdn.net/weixin_67907028/article/details/140209536

相关文章

  • STM32F1+HAL库+FreeTOTS学习3——任务创建(动态和静态两种)
    STM32F1+HAL库+FreeTOTS学习3——任务创建(动态和静态两种)任务创建API函数任务创建流程代码实现1.动态任务创建和删除2.静态任务创建和删除上期我们学习了STM32移植FreeRTOS搭建基准工程,现在我们来学习任务创建任务创建API函数前面我们了解到,FreeRTOS相对于裸机......
  • C语言教程-12_1-初识函数
    title:C语言教程-12_1-初识函数tags:[C]categories:C语言教程description:程序功能进一步复杂-使用函数进行分离提要:初步讲解C语言的函数的概念和语法前置知识:学习过数学,知道什么是数学的函数掌握C语言复合语句的概念什么是函数数学意义上的函数近代定义:......
  • python 基于函数的API设计,理解接口与实现分离
    在Python中,基于函数的API设计中实现接口与实现分离是一种良好的编程实践,它可以提高代码的可维护性、可扩展性和可读性。接口:可以理解为一组定义好的函数签名,这些函数签名描述了函数的名称、参数以及返回值的类型,但不包含具体的实现逻辑。实现:则是针对接口中定义的函数......
  • 数论函数从入门到进门
    1.定义1.1基础定义数论函数:定义域为正整数的函数称为数论函数。因其在所有正整数处均有定义,故可视作数列。加性函数:若\(\foralla,b\in\mathbb{N}^{+},a\perpb,f(ab)=f(a)+f(b)\),则称\(f\)为加性函数。积性函数:若\(\foralla,b\in\mathbb{N}^{+},a\perpb,f(ab)=f(a)f......
  • 第19节 指针与函数
    文章目录第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数2、数组作为函数的参数2.引用和指向函数的指针3、引用4、指向函数的指针第19节指针与函数1.指针作为函数的参数1、指针作为函数的参数►指针最重要的应用是作为函数参数,它使得被调函数......
  • 字符串函数库的经典使用学习
    <?php//1.单引号定义字符串//2.双引号定义字符串//3.定界符定义字符串//1.单引号定义字符串//echo'thisis'my'mother';echo'thisis\'my\'mother<br>';//单引号不能解析转义符\n换行\t缩进echo'this\nisasimple\tstr......
  • 51单片机定时器实现delay函数
    参考内容:不记得原作地址了,很尴尬啊,1.确定时钟周期、机器周期。时钟周期由单片机的晶振频率Fclk决定。那么时钟周期就是1/Fclk(比如:11.0592MHz)。确定单片机的机器周期是n个时钟周期(n在51单片机下一般是12)。2.确定需要单次定时器最大的计时时间长度如果是16位的计数器,16位最大......
  • matlabGUI绘制一个函数与其导数的图像
    ......
  • 【三变量联合分布函数copula】利用AIC BIC确定单变量最优拟合函数、利用AIC确定三变量
            ......
  • Halcon 学习笔记(1):常用套路和算子
    目录前言套路常用算子图形色相消息Region处理特征值逻辑前言这里总结常用算子和套路套路预处理:设置图片大小,RGB通道设置找到Region,特征值分割:形状:球,正方形,椭圆,长方形面积:亮度:滤波,过滤不需要的图像输出结果常用算子图形read_image:得到imagedev_open_windowde......