[STM32F1] 用stm32单片机用了快2年了,一直有些问题搞不懂

[复制链接]
 楼主| 369000753 发表于 2014-12-20 13:28 | 显示全部楼层 |阅读模式
1.全局变量分布是不是分配在RAM中,
2.堆栈和ram的关系, 堆栈在哪里,是不是就是ram中的一片存储空间,假如有关系,是不是定义的全局变量多了,堆栈就小了?比如1kb的ram的单片机,是不是包括了ram和堆栈的大小
3.堆栈与函数的关系,所说的堆栈溢出是指什么?
4.局部变量与堆栈的关系,定义的局部变量多了,直接影响的是什么?有什么后果
5.堆栈与函数大小有什么关系吗?
6.函数的大小与什么有关系。比如一个函数100行,1000行与什么有关系。影响的是什么?
7.stm32有很多外设,这些地址都是固定的,我们烧程序的时候 是不是只是把应用程序烧进去。还是把从地址0x00000000——0xffffffff中的全部烧进去。
lzw89 发表于 2014-12-20 14:09 | 显示全部楼层
mark一下等高人解答。。
mcspic 发表于 2014-12-20 15:11 | 显示全部楼层

楼主用了ST 2年了怎么基础的东西都没有概念!

1.全局变量分布是不是分配在RAM中,--是的
2.堆栈和ram的关系, 堆栈在哪里,是不是就是ram中的一片存储空间,假如有关系,是不是定义的全局变量多了,堆栈就小了?比如1kb的ram的单片机,是不是包括了ram和堆栈的大小--堆栈是放在RAM里的,全局变量多了,堆的空间变小了。栈的大小是根据你的MCU的RAM大小软件来定的。堆和栈都是在RAM里分配
3.堆栈与函数的关系,所说的堆栈溢出是指什么?--ST的堆栈跟函数没有关系,只跟函数里的局部变量有关系。所谓溢出是指当前堆栈的地址超出了分配的堆栈的地址,造成对RAM其他数据的影响,进而影响到程序的运行,产生异常。
4.局部变量与堆栈的关系,定义的局部变量多了,直接影响的是什么?有什么后果--局部变量是在栈里的,如果栈的大小不够,栈就会溢出
5.堆栈与函数大小有什么关系吗?--冇关系
6.函数的大小与什么有关系。比如一个函数100行,1000行与什么有关系。影响的是什么?--跟你的编码习惯有关
7.stm32有很多外设,这些地址都是固定的,我们烧程序的时候 是不是只是把应用程序烧进去。还是把从地址0x00000000——0xffffffff中的全部烧进去。--你只需要烧录FLASH
 楼主| 369000753 发表于 2014-12-20 15:35 | 显示全部楼层
mcspic 发表于 2014-12-20 15:11
楼主用了ST 2年了怎么基础的东西都没有概念!

1.全局变量分布是不是分配在RAM中,--是的

堆栈都是在ram里面分配,1k的ram 假如分配了0.2kb的堆栈,那剩下的0.8作为ram?程序是不是要搬到ram执行?
laoxu 发表于 2014-12-20 18:33 | 显示全部楼层
一般应用RAM分配是: 扣除全局变量,余下的都分配给堆栈。

当然,也可特殊分配:一部分给全局变量,一部分给堆栈,余下的RAM空间可将有执行速度要求的程序搬到其中执行,以加快这部分程序运行速度。
mmuuss586 发表于 2014-12-20 19:15 | 显示全部楼层
都是存在RAM里的;
堆栈大小可以设,默认不设的情况下还是比较大的;一般够用;
runningwzf 发表于 2014-12-20 19:50 | 显示全部楼层
这基础,实在是太不扎实了
建议回去看看C语言、微机原理、编译远原理
迷茫中的醒悟 发表于 2014-12-20 21:11 | 显示全部楼层
建议看看汇编。。。
shdjdq 发表于 2014-12-20 21:14 | 显示全部楼层
第一次看到,可能底层的东西都是别人写的。不是谁写的,了解下还是有点必要的。
mcuisp 发表于 2014-12-21 10:15 | 显示全部楼层
全局变量也未必在Ram里头,也可以在FLASH里头。
这些实际是编译器的权限,不属于STM32
沈老 发表于 2014-12-21 10:33 | 显示全部楼层
"堆"是堆(即heap)
"栈"是栈(stack)

不要混为一谈.
wuxing1106 发表于 2014-12-21 11:59 | 显示全部楼层
我一直觉得堆是PC中的概念,栈才是单片机中的概念。当然如果单片机上了系统,而且系统有堆这个东东的话就另说了
李冬发 发表于 2014-12-21 13:07 | 显示全部楼层
本帖最后由 李冬发 于 2014-12-21 13:18 编辑

LZ补一下CPU原理的课。
局部变量不见得都是用“栈”实现的,尽管局部变量放在栈里最方便。
通宵敲代码 发表于 2014-12-21 13:10 | 显示全部楼层
这基础,比我还差劲!

汇编永远不过时,推荐给你!
记得顺便学学微机原理!
yjmwxwx 发表于 2014-12-21 15:07 | 显示全部楼层
打开bin文件就看到了,第一个0x20005000就是栈顶。
19.jpeg
cool_coder 发表于 2014-12-21 15:13 | 显示全部楼层
楼主虽然基础不够扎实,学习态度还是不错的,鼓励一个。
赞同#14楼,多学点基础理论,从最基本的汇编练起,再深入学习高级语言的编译原理,所有问题都会明白的
tuzihog 发表于 2014-12-21 18:54 | 显示全部楼层
关注以下
 楼主| 369000753 发表于 2014-12-21 19:01 | 显示全部楼层
cool_coder 发表于 2014-12-21 15:13
楼主虽然基础不够扎实,学习态度还是不错的,鼓励一个。
赞同#14楼,多学点基础理论,从最基本的汇编练起, ...

谢谢鼓励。。
bear1 发表于 2014-12-22 14:07 来自手机 | 显示全部楼层
沈老 发表于 2014-12-21 10:33
"堆"是堆(即heap)
"栈"是栈(stack)


有什么区别?各有什么作用?
willsun 发表于 2014-12-22 16:00 | 显示全部楼层
我觉得和stm32无关,本质还是单片机的一些基础没搞清楚
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部