[ZLG-ARM] 关于PDIUSBD12 UC/OS软件包的中断嵌套层数问题

[复制链接]
2949|3
 楼主| lintron 发表于 2007-3-14 10:48 | 显示全部楼层 |阅读模式
&nbsp;&nbsp;购买了SMRTARM2200和D12&nbsp;PACK,发现&nbsp;IRQ_STACK_LENGTH&nbsp;EQU&nbsp;9*25,<br />书上解释为:PDIUSBD12收/发大量数据时中断比较频繁,必须修改中断的<br />嵌套层数到25层.不解的是进入d12中断时都关中断了,还怎么嵌套呢.只剩余<br />了一个时钟中段.问技术支持说是让我不用管它,希望高手们给个好点的解释.<br />&nbsp;&nbsp;另外,我现在的系统不适合运行UC/OS,有没人修改过D12的软件包可以运行于<br />前后台呢?如果有,留个QQ或者其他方式联系一下.<br />&nbsp;&nbsp;谢谢大家.
bqt 发表于 2007-3-14 14:26 | 显示全部楼层

re:

是这样的:<br /><br />在中断里面不去刻意的打开中断是不会进入中断嵌套的。<br />但是如果在中断里面调用了OS提供的系统函数的话,比如发送信号量等等,这些函数会成对的调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),就有可能把中断打开从而导致中断嵌套了。<br />说白了,就是在OSTimeTick里会打开中断,在时钟中断里会发生嵌套(如果时钟中断优先级比较低的话)。<br />D12在前后台的软件包也是有很多的,这么经典的芯片了,呵呵。
 楼主| lintron 发表于 2007-3-14 14:47 | 显示全部楼层

谢谢

&nbsp;&nbsp;&nbsp;&nbsp;谢谢bqt的解答,豁然开朗.<br />&nbsp;&nbsp;&nbsp;&nbsp;UC/OS书75页说关中断可以保护&quot;PSW&quot;,开中断的时候恢复&quot;PSW&quot;.看ZLG的移植代码好象是简单的开关中断.所以没有解决一个特殊情况:OS_ENTER_CRITICAL()前是关中断的,OS_EXIT_CRITICAL()还应该是关中断的,不应该错误的打开中断.<br />&nbsp;&nbsp;&nbsp;&nbsp;UC/OS新手,如果理解有错误,不要见笑.
high 发表于 2007-3-14 23:31 | 显示全部楼层

记得ucos支持3种开关中断的方式。2楼说的只是一种情况。

寻找适合自己的方式。<br />---<br />中断其实是进入了cpu的irq工作模式处理中断请求。一般不开放中断嵌套是基于栈考虑的。因为各种工作模式下使用独立的栈。<br /><br />开放了中断嵌套(允许中断)会对irq模式下栈深度(空间)提出要求。而大部分情况下,irq分到的栈空间是有限的--这局限了嵌套的深度。<br /><br />一种常见的解决办法是,中断时快速退出irq模式,重新返回系统/用户模式,然后调用用户中断服务程序。从而使用系统/用户模式下的栈,如此嵌套深度基本不受限了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

7

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部