ARM未定义指令,因为BL更改为CPSID

时间:2017-11-17 02:33:43

标签: assembly arm

所以我在ARM微控制器中得到一个未定义的异常。我知道为什么你应该得到那些:你在内存中加载一个指令,你所使用的模式(ARM或Thumb)不存在,然后你做了R14减2来得到指令等。我读过ARM ARM,但它没有帮助我。

这就是我所看到的:

加载到内存中的编译指令应该是F7FF,它对应于BL,但我的调试器告诉我它是B7FF,这是一个CPSID。奇怪的是,每次我执行这段代码时都不会发生这种情况,只有一些时间。可能是什么问题?

这就是我正在使用的:

  • Micro - AT91SAM7X512
  • RTOS - uVelosity 2.2.8
  • 编译器 - MULTI v506

编辑(更多注释):

每次遇到此问题时R14_und = 0x2b02

Register contents when undefined exception

这应该是内存内容(当我从二进制文件中反汇编时):

Disassembly

但根据调试器的说法,这就是它的原因:

enter image description here

我的代码中的任何细微变化都“修复”了问题。

如果我将RTOS更改为更新版本(2.2.9),也可以“解决”问题。

这也只发生在一些微控制器上,但不是全部(我有四个完全相同的批号)

编辑2:

我已经转储了Flash内容,它们看起来很好并且匹配我的二进制文件。

Flash dump of 0x2b00

编辑3

  • 静态代码分析看起来不错

编辑4

我可以对我的C源代码进行更改,但不会被执行,问题就会消失。

**编辑5 **

我正在使用55MhZ时钟(因此我的周期性间隔定时器设置为342)。数据表表明我可以使用1,2和3的等待状态,但是勘误表示3.他们是否忘记更新第一张表或是常见的做法?注意errdata中的错误,同时保留其他所有内容。

数据表等待状态表:

Wait state table

勘误表: Errata Wait State TAble

http://www.atmel.com/images/Atmel_32-bit-ARM7TDMI-Flash-Microcontroller_SAM7X512-256-128_Datasheet.pdf

0 个答案:

没有答案