51单片机如何开辟栈空间?

2019-07-15 07:42发布

新唐N76E003可以开辟256byte的局部数组,但是我想知道51单片机STM32的区别,STM32的栈空间是自己设置的,局部变量存放在栈中,如果局部变量定义的变量大于开辟的栈的大小,就会覆盖全局变量的值,我想知道51单片机是怎么做到开辟256byte的局部变量的,它整个内部data才256byte,怎么做到开辟256byte局部变量数组
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
7条回答
鑫12345
1楼-- · 2019-07-16 06:48
keil c51函数内的变量(包括入口参数在内),如果超过了8个字节,会被分配在一个根据调用树计算好的静态堆栈上。和存储函数调用地址的sp指针的堆栈不是一个。
你如果选择了large模式,这个静态栈就在xdata里面。
如果函数有重入,有被可变函数指针间接调用,那么调用树就不是固定的,就不行了。
这样充分利用了ARM等CPU没有的直接寻址指令,访问堆栈上的数的效率比较高。比如 0x30的堆栈上存的数 inc 30h就可以直接加1。
如果不用这个方式,用gcc等职能堆栈的方式,那么 由于8051这个古老的cpu的堆栈指针不能间接寻址,指针少,指针间接访问的开销大等,导致效率低下很多。

一周热门 更多>