搜索
bottom↓
回复: 10

请教:如何判断当前函数是否运行在中断中

[复制链接]

出0入4汤圆

发表于 2017-6-15 18:48:35 | 显示全部楼层 |阅读模式
stm32使用keil rtx,由于很多函数不能运行在中断里面,但是由于有很多嵌套调用。搞不清楚一个函数到底是不是到底是运行在中断里面。所以想请教一下是不是有没有方法判断当前运行代码是否在中断里面。
像这样使用

if(in_interrupt())
{
        some isr function // which can run in interrupt
}else
{
        some os api // which can not  run in inerrrupt
}

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2017-6-15 19:07:54 | 显示全部楼层
读芯片的IPSR寄存器来确定CPU的状态。

一般中断里面最好不要调用会有共享冲突的函数。
并尽可能快的退出中断。

出0入0汤圆

发表于 2017-6-15 19:48:49 | 显示全部楼层
在线调试,打断点

出0入0汤圆

发表于 2017-6-16 12:38:48 来自手机 | 显示全部楼层
给函数一个参数

出0入0汤圆

发表于 2017-6-17 05:15:15 来自手机 | 显示全部楼层
如果只是想知道是不是在中断里调用可以用一个全局变量,每次进中断加一,退出中断减一。函数检查这个变量是否为零就可以判断是否在中断中执行

出0入4汤圆

 楼主| 发表于 2017-6-17 05:22:09 来自手机 | 显示全部楼层
yangsen 发表于 2017-6-17 05:15
如果只是想知道是不是在中断里调用可以用一个全局变量,每次进中断加一,退出中断减一。函数检查这个变量是 ...

我需要是否知道在任意一个中断里,不是单单一个中断。所以这不是很可行啊。

出0入8汤圆

发表于 2017-6-17 08:30:21 | 显示全部楼层
ronic 发表于 2017-6-17 05:22
我需要是否知道在任意一个中断里,不是单单一个中断。所以这不是很可行啊。 ...

你可以去看下 RT-Thread 的 rt_interrupt_enter() 和 rt_interrupt_leave() 接口。
或者 ucos-iii 的 OSIntEnter() 和 OSIntExit() 接口。

出0入0汤圆

发表于 2017-6-17 08:46:44 | 显示全部楼层
反汇编 最直接

出0入0汤圆

发表于 2017-6-17 08:54:48 来自手机 | 显示全部楼层
如果没有函数指针,直接查看调用关系

出0入0汤圆

发表于 2017-6-17 15:45:32 | 显示全部楼层
ronic 发表于 2017-6-17 05:22
我需要是否知道在任意一个中断里,不是单单一个中断。所以这不是很可行啊。 ...

楼主好好读读那些经典rtos的代码就明白我说的是什么意思了,7楼已经说了

出0入4汤圆

 楼主| 发表于 2017-6-17 21:30:17 | 显示全部楼层
感谢诸位答复,经过自己研究并搜索网络,我暂时实现了下面的方法。测试还是可以使用的。

        inline  int  in_isr()
//        int  in_isr(void)
        {
                volatile int tmp=0;
               
                __asm
                {
                        MRS tmp,IPSR           ///读取CPSR的值
                       
                }
                return tmp&0x1f;                 
       
        }
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-3-29 15:10

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

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