打印
[STM32F1]

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

[复制链接]
5085|35
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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执行?

使用特权

评论回复
5
laoxu| | 2014-12-20 18:33 | 只看该作者
一般应用RAM分配是: 扣除全局变量,余下的都分配给堆栈。

当然,也可特殊分配:一部分给全局变量,一部分给堆栈,余下的RAM空间可将有执行速度要求的程序搬到其中执行,以加快这部分程序运行速度。

使用特权

评论回复
6
mmuuss586| | 2014-12-20 19:15 | 只看该作者
都是存在RAM里的;
堆栈大小可以设,默认不设的情况下还是比较大的;一般够用;

使用特权

评论回复
7
runningwzf| | 2014-12-20 19:50 | 只看该作者
这基础,实在是太不扎实了
建议回去看看C语言、微机原理、编译远原理

使用特权

评论回复
8
迷茫中的醒悟| | 2014-12-20 21:11 | 只看该作者
建议看看汇编。。。

使用特权

评论回复
9
shdjdq| | 2014-12-20 21:14 | 只看该作者
第一次看到,可能底层的东西都是别人写的。不是谁写的,了解下还是有点必要的。

使用特权

评论回复
10
mcuisp| | 2014-12-21 10:15 | 只看该作者
全局变量也未必在Ram里头,也可以在FLASH里头。
这些实际是编译器的权限,不属于STM32

使用特权

评论回复
11
沈老| | 2014-12-21 10:33 | 只看该作者
"堆"是堆(即heap)
"栈"是栈(stack)

不要混为一谈.

使用特权

评论回复
12
wuxing1106| | 2014-12-21 11:59 | 只看该作者
我一直觉得堆是PC中的概念,栈才是单片机中的概念。当然如果单片机上了系统,而且系统有堆这个东东的话就另说了

使用特权

评论回复
13
李冬发| | 2014-12-21 13:07 | 只看该作者
本帖最后由 李冬发 于 2014-12-21 13:18 编辑

LZ补一下CPU原理的课。
局部变量不见得都是用“栈”实现的,尽管局部变量放在栈里最方便。

使用特权

评论回复
14
通宵敲代码| | 2014-12-21 13:10 | 只看该作者
这基础,比我还差劲!

汇编永远不过时,推荐给你!
记得顺便学学微机原理!

使用特权

评论回复
15
yjmwxwx| | 2014-12-21 15:07 | 只看该作者
打开bin文件就看到了,第一个0x20005000就是栈顶。

使用特权

评论回复
16
cool_coder| | 2014-12-21 15:13 | 只看该作者
楼主虽然基础不够扎实,学习态度还是不错的,鼓励一个。
赞同#14楼,多学点基础理论,从最基本的汇编练起,再深入学习高级语言的编译原理,所有问题都会明白的

使用特权

评论回复
17
tuzihog| | 2014-12-21 18:54 | 只看该作者
关注以下

使用特权

评论回复
18
369000753|  楼主 | 2014-12-21 19:01 | 只看该作者
cool_coder 发表于 2014-12-21 15:13
楼主虽然基础不够扎实,学习态度还是不错的,鼓励一个。
赞同#14楼,多学点基础理论,从最基本的汇编练起, ...

谢谢鼓励。。

使用特权

评论回复
19
bear1| | 2014-12-22 14:07 | 只看该作者
沈老 发表于 2014-12-21 10:33
"堆"是堆(即heap)
"栈"是栈(stack)


有什么区别?各有什么作用?

使用特权

评论回复
20
willsun| | 2014-12-22 16:00 | 只看该作者
我觉得和stm32无关,本质还是单片机的一些基础没搞清楚

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

16

帖子

0

粉丝