|
芯片是LM4F231, ARM M4的内核,开发环境是IAR 6.3。
遇到的问题,当定义局部变量时比如 float f=1.1; 时在IAR下察看local 局部变量值时发现f变量值为 也没有分配变量地址。
对于这一问题研究了很久,起初以为是float变量不能用局部变量,但是却可以定义局部变量数组。 通过研究汇编代码发现,定义一两个局部变量时这些变量被直接分配给FPU寄存器S0-S31。而由于数组是连续的所以地址也是连在一起的 不适合分配给S0-S31,只能分配给内存RAM。但是IAR可能并没有升级S0-S31寄存器的可视部分,也就是虽然可以汇编成M4的代码,但是IAR并没有反馈S0-S31寄存器值的能力 导致float f 显示值。
虽然IAR不能查看S0-S31寄存器的值(可能需要设置 打开功能什么的 还在研究)但是代码是正确执行的。不影响CPU的正常工作。顺便说下,当float定义成局部变量数组或全局变量时 分配的地址是在内存中,但是FPU工作时是操作S0-S31寄存器的,所以要先把内存中的数据先复制到S0-S31寄存器中再进行操作的。所以这样会减慢计算速度。
|
|