【发布时间】:2011-07-06 13:17:27
【问题描述】:
我还没有找到任何资源可以准确回答我在我正在开发的软件中看到的问题,所以我会在这里问天才!
首先,我在 PowerPC 处理器上运行 VxWorks。
在尝试调试一个单独的问题时,我尝试在中断处理例程中抛出一些快速而肮脏的调试代码。它涉及一个双精度浮点运算来存储一个感兴趣的值(即,自从我看到最后一次中断进来以来已经过了多长时间),我稍后在我正在运行的线程中的处理程序之外使用它。我没有看到这方面的问题(当然,这需要更长的时间,但从时间上讲,我很高兴;中断不会来得太快)但是 VxWorks 肯定不喜欢它。它在到达该代码时始终崩溃,这是重新启动系统的严重崩溃之一。我花了一些时间才将双重操作作为问题的根源,我意识到它甚至不是双重“操作”,甚至从中断中调用的例程返回一个常量双重失败。
在 PowerPC(或一般的其他架构)上,在中断处理程序中执行浮点操作和在中断处理程序调用的函数中返回浮点(或其他类型)值时通常会出现问题吗?我不知道为什么这会导致程序崩溃。
(解决方法是将自上次中断以来的“滴答声”转换为自上次中断以来的“时间”,直到代码超出处理程序,因为它似乎可以很好地处理长整数操作。)
【问题讨论】:
-
不能用 64 位定点值代替吗?应该够大了……
-
正如我所提到的,这就是解决方法。一般来说,我不会在中断处理程序中使用浮点操作,因为它们往往需要大量操作才能完成,并且中断处理程序需要快速。我的问题实际上是“为什么它不起作用”而不是“我应该怎么做”。后者我理解,但前者让我大吃一惊。
-
它应该可以工作,没有什么神奇或特别之处,应该和任何其他变量类型或结构一样工作。我会反汇编编译器生成的内容,以了解它将值放在哪里以及另一端在哪里获取值,将其与传递无符号整数或其他东西进行比较,然后查看断开连接。
-
不具体了解 PowerPC,但保存浮点状态可能很昂贵,并且通常在需要时才进行。如果一直这样做,中断响应时间会受到严重影响。
标签: c++ embedded vxworks powerpc interrupt-handling