所以我在ARM微控制器中得到一个未定义的异常。我知道为什么你应该得到那些:你在内存中加载一个指令,你所使用的模式(ARM或Thumb)不存在,然后你做了R14减2来得到指令等。我读过ARM ARM,但它没有帮助我。
这就是我所看到的:
加载到内存中的编译指令应该是F7FF,它对应于BL,但我的调试器告诉我它是B7FF,这是一个CPSID。奇怪的是,每次我执行这段代码时都不会发生这种情况,只有一些时间。可能是什么问题?
这就是我正在使用的:
编辑(更多注释):
每次遇到此问题时R14_und = 0x2b02
这应该是内存内容(当我从二进制文件中反汇编时):
但根据调试器的说法,这就是它的原因:
我的代码中的任何细微变化都“修复”了问题。
如果我将RTOS更改为更新版本(2.2.9),也可以“解决”问题。
这也只发生在一些微控制器上,但不是全部(我有四个完全相同的批号)
编辑2:
我已经转储了Flash内容,它们看起来很好并且匹配我的二进制文件。
编辑3
编辑4
我可以对我的C源代码进行更改,但不会被执行,问题就会消失。
**编辑5 **
我正在使用55MhZ时钟(因此我的周期性间隔定时器设置为342)。数据表表明我可以使用1,2和3的等待状态,但是勘误表示3.他们是否忘记更新第一张表或是常见的做法?注意errdata中的错误,同时保留其他所有内容。
数据表等待状态表: