有几个问题请教大家:主要是单片机或处理器栈定义问题?

来源:百度知道 编辑:UC知道 时间:2024/05/30 05:53:34
1 栈是在内存RAM中, 在51单片机中栈是从低地址向高地址增长的,在AVR中栈是从高地址向低地址增长,请问这种规定是硬件决定还是由编译器去做的,能不能动态分配在中间啊。
2 在用ICC中栈还可以在软件中设置大小,最多可以设置多大(是不是理论上到整个RAM),设置指定的大小后它是不是在RAM中独立了(即使没有东西压栈,空栈,它也在里面占一段存储空间),内存中其它资源会不会去占用
3 要栈是由编译器定义的,那堆是程序定义的吧。它怎么不连续法,ICC中怎么去定义。 uc/os中任务控制块是不是堆,怎么定义大小的?
4 静态局部变量(即函数内部state声明的变量)在内存中怎么存放的,因为它的值不释放我觉得有点像全局变量了,主要存储方式区别在哪?
这些基础性东西实在混淆不清, 请大家帮忙解释。

1.堆栈的增长方向是硬件决定的,但是初始大小是软件设置的,即堆栈的大小是由初始SP的值决定。

2.对于AVR等,只要能设置SP初始值,有多大就可以设置多大,但是51的SP是8位的,只能是基础51的内部128或者256字节。

使用的时候计算好堆栈占用的空间,只要对RAM的常规使用空间没有与堆栈的空间重叠就没事。

3.看编译器的说明文档和单片机的资料!

4.看C语言标准!

最后:我不认为这是基础性的东西。

我靠,这是什么东西啊,我用单片机这么久也没去研究过这东西,会用就行了呗,研究那么细干嘛,这纯理论的东西根本没用!
有功夫去研究这不如实在的去编个程序,真是浪费生命!