我还没有找到任何资源可以准确地回答我在我正在开发的软件中看到的问题,所以我会在这里问天才!
首先,我在 PowerPC 处理器上运行 VxWorks。
在尝试调试一个单独的问题时,我尝试在中断处理例程中抛出一些快速而肮脏的调试代码。它涉及一个双精度浮点运算来存储一个感兴趣的值(即,自从我看到最后一次中断进来以来已经过了多长时间),我稍后在我正在运行的线程中的处理程序之外使用它。我没有看到这方面的问题(当然,这需要更长的时间,但从时间上讲,我很满意;中断不会太快出现)但是 VxWorks 肯定不喜欢它。它在到达该代码时始终崩溃,这是重新启动系统的严重崩溃之一。我花了一些时间才找到作为问题根源的双重操作,我意识到它甚至不是双重“操作”,甚至从中断中调用的例程中返回一个常量双重失败也惨遭失败。
在 PowerPC(或一般的其他架构)上,在中断处理程序中执行浮点操作并在中断处理程序调用的函数中返回浮点(或其他类型)值通常存在问题?我不知道为什么这会导致程序崩溃。
(解决方法是将自上次中断以来的“滴答声”转换为自上次中断以来的“时间”,直到代码超出处理程序,因为它似乎可以很好地处理长整数操作。)