登录 免费注册 首页 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

st7flite15b中断问题

作者:zemezemed 栏目:MCU技术
st7flite15b中断问题
想问一下能不能这样用中断,因为st7flite15b没有中断嵌套,我能不能在进入一个中断以后就在这个中断里面等待,同时打开中断使能,这个时候别的中断应该也能进吧?这样写的话有什么影响没有?

2楼: >>参与讨论
zemezemed
各位给点意见啊
随便说说也好

3楼: >>参与讨论
浪淘沙
不支持中断嵌套 不等于 不能进行中断嵌套
首先你要明白,硬件的中断嵌套功能是指,当CPU响应某个中断请求时,处理该中断的过程,可以被软件中断级别比它高的中断所打断;在这里硬件的支持中断嵌套引入了一个软件中断级别的概念,通常我们说的中断级别称为硬件中断级别。

硬件中断级别的概念是,当两个中断源同时发出中断请求时,CPU首先响应级别高的中断请求;当CPU正在处理较低优先级的中断请求时,CPU在处理完该请求之前不能响应任何新的中断请求,即使新请求的优先级较高。

引入了软件中断的概念之后,上述限制被放宽了,即当CPU正在处理一个中断请求时,CPU可以响应软件(不是硬件)中断优先级较高的中断请求。

明白了上述原理后,你的问题变得简单了;你只需在一个中断的处理程序中,打开中断允许位,这样任何新到的中断请求都会被响应,不同的是没有了软件中断级别的裁决。

有一点不明白,为什么你要在一个中断里等待另一个中断的到来?你不用刻意地等,但允许这种情况出现即可。

4楼: >>参与讨论
AES_SEA
可以但不妥当
进中断MCU把CC的I位置位,执行rim 会将I位复位。

推荐在非实时响应要求特别高的情况下,在中断里面尽量不要做太复杂,耗时太长的工作,主要工作应该让主程序去完成。

5楼: >>参与讨论
zemezemed
感谢两位的回复
我把程序停在中断里面,同时等待另外两个中断,其中一个中断也就是我程序停在那里的那个中断程序,这是否构成了递归调用?c编译的时候是没有问题的,但运行的时候好象达不到程序的效果,不知道对于递归调用编译器有什么限制吗?

6楼: >>参与讨论
AES_SEA
递归调用
以下情况cosmic C 均会识别为递归调用
1.一个c函数调用了自己
2.两个C函数互相调用
3.一个C函数同时在中断函数和非中断函数中调用

当cosmic c 使用physical stack mode 时,递归调用编译不会报错,因为此时使用物理堆栈,C不关心递归会占用多少RAM;当使用SIMLULATED STACK MODE时,由于C无法判断递归会自我调用几次,从而无法确定该函数占用的RAM大小,导致编译出错。

要在cosmic c中使用递归调用(不妨叫 MyFunction()),有两种做法:
1.使用物理堆栈模式
2.在使用模拟堆栈模式下,在进行多次调用该函数的时候,使用嵌汇编的方式,即
#asm
call _MyFunction   
#endasm
当嵌入汇编时,C只是对其进行最基本的汇编语法检查,从而可以正常编译。

!!!!注意: 在嵌汇编时,重要的寄存器A,X,Y,c_x,c_y,....都需要你考虑是否需要保护。如果不清楚用到了那些的话,可以去看MyFunction()对应的.LST文件或直接看反汇编就知道了。

如果有其他问题你需要检查自己程序的逻辑了。



参与讨论
昵称:
讨论内容:
 
 
相关帖子
一个关于开发板、仿真器连接时出现的问题
用IAR+WIGGLE可以RAM仿真,不能FLASH写入,怎么回事
请问RLINK哪里有卖?多少钱?我想买.
征求一个方案
请问谁有upsd3312d-40t6的中文pdf?
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入


Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号