博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
5.中断和临界区的保护
阅读量:4100 次
发布时间:2019-05-25

本文共 807 字,大约阅读时间需要 2 分钟。

临界区:访问公共资源的代码,在某一个时刻,只能有一个任务能访问公共资源,独占CPU

任务1funca(){value++;value+=10;}任务2funcb(){value++;}
在以上2个任务中,如果任务1运行过程中任务2也运行了,那么得到的value值可能是错误的。
//RT-Thread使用pend_sv中断来进行任务的切换任务1funca(){	rt_hw_interrupt_disable;//rt_enter_critical();//关闭系统中断可以禁止任务调度value++; value+=10; rt_hw_interrupt_enable();//rt_exit_critical();rt_enter_critical}任务2funcb(){value++;}//以上代码正确,value值不会在计算过程中被临时篡改
rt_hw_interrupt_disable()//关闭所有的中断响应rt_enter_critial()//只是禁止任务中断,并不会关闭中断响应      这2种方式都可以进入临界区

使用临界区时的注意事项:

临界区中代码不要过度占用CPU时间,临界区中任务是不会调度的,如果占用太多时间,实时操作系统的必要性就体现不出来了

中断服务如何写:

/** * This is the timer interrupt service routine. * */void SysTick_Handler(void){    /* enter interrupt */    rt_interrupt_enter(); //进入中断服务之前调用此API    HAL_IncTick();    rt_tick_increase();    /* leave interrupt */    rt_interrupt_leave();//退出中断服务之前调用此API}

转载地址:http://uswsi.baihongyu.com/

你可能感兴趣的文章
i2c-tools
查看>>
Linux分区方案
查看>>
nc 命令详解
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(五):OpenFeign请求结果处理及重试控制
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
OpenFeign学习(七):Spring Cloud OpenFeign的使用
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>
查找最大值最小值
查看>>