搜索
bottom↓
回复: 4

FreeRTOS中任务切换过程中遇到中断会怎么样

[复制链接]

出0入0汤圆

发表于 2018-7-17 17:42:05 | 显示全部楼层 |阅读模式
最近在移植freeRTOS,发现一个问题,freeRTOS为了保证实时性,是通过basepri来屏蔽优先级高的中断,
那如果FreeRTOS中任务切换过程中遇到中断会怎么样?
比如在压栈中刚好中断,会不会有问题?

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2018-7-17 20:29:44 | 显示全部楼层
优先级再高,也得等人家保存现场之后,再去你执行高优先级的中断吧。我猜的 (逃

出0入9汤圆

发表于 2018-7-17 21:54:59 | 显示全部楼层
压栈的时候应该是关闭所有中断。完成后再打开总的中断开关。

出0入0汤圆

 楼主| 发表于 2018-7-18 09:28:16 | 显示全部楼层
查了一下资料,参考cortex-m3

在《Cortex-M3 Devices Generic User Guide.pdf》中介绍了异常入栈和出栈的情况,详见2.3 Exception model。Cortex-M3内核的寄存器如下。

异常发生时,入栈的寄存器是R0~R3+R12+PC+LR+SP。为啥袒护R0‐R3以及R12呢, R4‐R11就是下等公民?(摘自《Cortex-M3权威指南 》第9章)
原来,在ARM上,有一套的C函数调用标准约定(《 C/C++ rocedure Call Standard for the ARM Architecture》,AAPCS, Ref5)。个中原因就在它上面:它使得中断服务例程能用C语言编写,编译器优先使用被入栈的寄存器来保存中间结果(当然,如果程序过大也可能要用到R4‐R11,此时编译器负责生成代码来push它们。但是, ISR应该短小精悍,不要让系统如此操心——译者注)。如果读者再仔细看,会发现R0‐R3, R12是最后被压进去的。这里也有一番良苦用心:为的是可以更容易地使用SP基址来索引寻址,( 以及为了LDM等多重加载指令,因为LDM必须加载地址连续的一串数据)。参数的传递也是受益者:使之可以方便地通过压入栈的R0‐R3取出( 主要为系统软件所利用,多见于SVC与PendSV中的参数传递)。
这就是说,C编译器中断(异常)服务函数封装的这样的需求:当R0~R3+R12不够用时会使用R4‐R11,在使用R4‐R11之前会进行入栈保护;在使用完之后进行出栈恢复现场。

看来c语言和汇编在中断服务函数中是不一样的

出0入0汤圆

发表于 2018-9-9 19:51:19 来自手机 | 显示全部楼层
这是RTOS最核心的问题之一,如何处理这个问题是评价一个RTOS实时响应性能的关键。一个RTOS性能的好坏,从它的“任务(线程)切换程序”就能看出大概。
严格来说,把内核关中断的OS称之为RTOS是名不符实的。都关中断了,还有啥实时性可言。
嵌套向量、入栈出栈抢占、未尾连锁……ARM 费尽心机千辛万苦把 Cortex-M 的中断响应等待时间缩短到引以为豪的6个周期,就是为了适合嵌入式系统的实时快速响应要求,你们把中断说关就关,这对得起ARM吗,对得起自己良心吗
  
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 10:06

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表