本帖最后由 arm_fan168 于 2009-11-20 15:19 编辑
我的理解:
temp在栈上分配,像STM32,avr这种有栈结构的芯片,中断来时栈会自动生长,高级别的中断不会影响栈前面的数据。只要不刻意去破坏,就不会有问题
而PIC 8位机这种没有数据栈的,编译器在分配局部变量时会先 ...
lxyppc 发表于 2009-11-20 09:22 
局部变量是否分配在堆栈,可不是由芯片决定的,而是由编译器决定的,虽然编译器在决定局部变量是否分配在堆栈的时候会考虑MCU的架构和指令。
keilC编译器之所以采用静态分配局部变量的原因,是因为51的指令缺少像ARM指令中的“STR R0, [R13,#-20]”这种指令,使得在栈中定位某个局部变量时需要费一番周折,编译器为了提高代码效率,所以采用了静态分配局部变量。但这也造成了代码的不可重入,有得就有失啊。
|