发新帖我要提问
12
返回列表
打印
[STM32F1]

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

[复制链接]
楼主: 369000753
手机看帖
扫描二维码
随时随地手机跟帖
21
小班儿| | 2014-12-22 18:37 | 只看该作者 回帖奖励 |倒序浏览
学习了…………

使用特权

评论回复
22
feilusia| | 2014-12-23 14:48 | 只看该作者
你单单了解堆和栈是不够的,最好清楚数据段、BSS段、代码段、堆栈段的区别。这些在STM32上可能用不到,因为不需要你去写链接文件。而其他一些单片机可能需要自己写链接文件。
一、数据段:存放程序中已初始化的全局变量的一块内存区域。
二、BSS段:存放程序中未初始化的全局变量的一块内存区域。
三、代码段:存放程序执行代码的一块内存区域。
四、堆栈段:
1、堆(heap):由用户分配。存放进程运行中被动态分配的内存段,大小不固定,比如使用malloc。
2、栈(stack):由操作系统分配。存放程序的局部变量。

使用特权

评论回复
23
仙人球W| | 2014-12-23 15:05 | 只看该作者
mark

使用特权

评论回复
24
沈老| | 2014-12-23 19:21 | 只看该作者
以前单片机RAM少,通常只用栈(栈也很小)
现在"单片机"Ram 大多了(stm32 是arm , M3), 一部分用作 栈,一部分可以用作 堆 ( 堆是可以动态创建变量的地方), c语言下一旦c库初始化后,就可以用malloc 来分配动态变量,c++ 就是 new 了.

使用特权

评论回复
25
ktfe| | 2014-12-24 08:30 | 只看该作者
369000753 发表于 2014-12-20 15:35
堆栈都是在ram里面分配,1k的ram 假如分配了0.2kb的堆栈,那剩下的0.8作为ram?程序是不是要搬到ram执行 ...

堆和栈是两个东西,在启动文件中都有定义起始地址和大小
一般局部变量都在栈中,堆多数是动态分配的,其他变量区分RO、RI、RW,根据情况存放

使用特权

评论回复
26
zxm19820916| | 2014-12-24 09:25 | 只看该作者
Mark!!!

使用特权

评论回复
27
fengzaideng| | 2014-12-24 09:51 | 只看该作者
虽然简单,但有助于新手。

使用特权

评论回复
28
bhkjcg| | 2014-12-24 13:15 | 只看该作者
长期供应ST  MCU  STM32F103ZET6  STM32F103C8T6  STM32F103RBT6  STM32F103R8T6  STM32F103VET6  原装正品 进口 环保 需要联系  13316984089   QQ596615307

使用特权

评论回复
29
zjwyczj| | 2014-12-24 15:37 | 只看该作者
分享你一个**,有用的话结贴给分啊

堆 和 栈的 区别(经典).pdf

72.1 KB

使用特权

评论回复
30
子翁| | 2014-12-25 09:39 | 只看该作者
肯学就好

使用特权

评论回复
31
//YZC| | 2014-12-25 14:23 | 只看该作者
栈是一种先进后出的数据结构,MCU用它来实现现场保护的功能。我不理解的是,为什么大家都说“局部变量一般在栈中”。按照在下的理解是,局部变量优先被编译器分配在通用寄存器中,当局部变量太多时,编译器会另分配一段RAM来存储局部变量,而当函数调用或中断发生时,把通用寄存器和存储局部变量的RAM中的数据压入栈中,以保护现场;进入新的状态时,通用寄存器和那段RAM会被重新分配局部变量,完成后则把数据挤出栈,以恢复现场。所以,局部变量不是分配在栈中,栈的唯一作用是保护现场。可能我错了,看看楼下怎么说。。。

使用特权

评论回复
32
haimianbao888| | 2015-3-19 12:04 | 只看该作者
Mark

使用特权

评论回复
33
myxiaonia| | 2015-3-19 12:17 | 只看该作者
在mdk里,你可以把启动文件定义的栈理解为一个全局变量,所以他和其他全局变量几乎一样,只不过启动文件和分散加载文件一起会决定这个栈的起始地址。mdk里栈不是自动分配的而是人工指定大小的,不是说没有分配的ram自动转为栈
栈溢出就是入栈的内容穿过了栈的底部,改变了其他ram的值,如果哪些地址正好是其他全局变量,程序就会出错
在risc单片机里,有较多工作寄存器,因此可以定义较多的局部变量,这些局部变量没有在栈上而是在工作寄存器里,很多时候可以加速程序但是一般不会降低栈的使用率
烧程序的时候只烧写flash的

使用特权

评论回复
34
Zacking| | 2015-3-19 16:02 | 只看该作者
学习,mark

使用特权

评论回复
35
81190865| | 2015-3-20 14:15 | 只看该作者
羞愧啊,我也没搞清楚呢

使用特权

评论回复
36
wforest68| | 2016-12-5 15:04 | 只看该作者
除了看书之外,再看看IAR的配置文件及MAP文件,看完之后就知道怎么分配的了
同时也看看MDK的配置文件和生成的MAP文件,会发现其中的区别

使用特权

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

本版积分规则