打印
[ZLG-ARM]

关于PDIUSBD12 UC/OS软件包的中断嵌套层数问题

[复制链接]
2007|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lintron|  楼主 | 2007-3-14 10:48 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  购买了SMRTARM2200和D12 PACK,发现 IRQ_STACK_LENGTH EQU 9*25,
书上解释为:PDIUSBD12收/发大量数据时中断比较频繁,必须修改中断的
嵌套层数到25层.不解的是进入d12中断时都关中断了,还怎么嵌套呢.只剩余
了一个时钟中段.问技术支持说是让我不用管它,希望高手们给个好点的解释.
  另外,我现在的系统不适合运行UC/OS,有没人修改过D12的软件包可以运行于
前后台呢?如果有,留个QQ或者其他方式联系一下.
  谢谢大家.

相关帖子

沙发
bqt| | 2007-3-14 14:26 | 只看该作者

re:

是这样的:

在中断里面不去刻意的打开中断是不会进入中断嵌套的。
但是如果在中断里面调用了OS提供的系统函数的话,比如发送信号量等等,这些函数会成对的调用OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL(),就有可能把中断打开从而导致中断嵌套了。
说白了,就是在OSTimeTick里会打开中断,在时钟中断里会发生嵌套(如果时钟中断优先级比较低的话)。
D12在前后台的软件包也是有很多的,这么经典的芯片了,呵呵。

使用特权

评论回复
板凳
lintron|  楼主 | 2007-3-14 14:47 | 只看该作者

谢谢

    谢谢bqt的解答,豁然开朗.
    UC/OS书75页说关中断可以保护"PSW",开中断的时候恢复"PSW".看ZLG的移植代码好象是简单的开关中断.所以没有解决一个特殊情况:OS_ENTER_CRITICAL()前是关中断的,OS_EXIT_CRITICAL()还应该是关中断的,不应该错误的打开中断.
    UC/OS新手,如果理解有错误,不要见笑.

使用特权

评论回复
地板
high| | 2007-3-14 23:31 | 只看该作者

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

寻找适合自己的方式。
---
中断其实是进入了cpu的irq工作模式处理中断请求。一般不开放中断嵌套是基于栈考虑的。因为各种工作模式下使用独立的栈。

开放了中断嵌套(允许中断)会对irq模式下栈深度(空间)提出要求。而大部分情况下,irq分到的栈空间是有限的--这局限了嵌套的深度。

一种常见的解决办法是,中断时快速退出irq模式,重新返回系统/用户模式,然后调用用户中断服务程序。从而使用系统/用户模式下的栈,如此嵌套深度基本不受限了。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

4

帖子

1

粉丝