OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

楼主: 正点原子

STM32 大小端模式 与 堆栈及其增长方向分析

  [复制链接]

  离线 

6

主题

18

帖子

0

精华

初级会员

Rank: 2

积分
62
金钱
62
注册时间
2013-9-19
在线时间
0 小时
发表于 2014-4-27 18:54:28 | 显示全部楼层
正点原子公众号
原子哥问你个问题,一直不清楚编译时指示的这几个代表什么啊?code 知道什么意思,后面三个一直不清楚。

回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2014-4-27 20:28:18 | 显示全部楼层
回复【101楼】sdutkqb:
---------------------------------
这两个之和=SRAM的占用量
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

0

主题

1

帖子

0

精华

新手入门

积分
21
金钱
21
注册时间
2014-6-9
在线时间
0 小时
发表于 2014-6-9 09:56:50 | 显示全部楼层
mark
回复 支持 反对

使用道具 举报

  离线 

50

主题

1453

帖子

3

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
2390
金钱
2390
注册时间
2011-1-25
在线时间
119 小时
发表于 2014-6-9 11:03:11 | 显示全部楼层
回复【101楼】sdutkqb:
---------------------------------
Code为程序代码部分
RO-data 表示 程序定义的常量
RW-data 表示 已初始化的全局变量
ZI-data 表示 未初始化的全局变量
一直努力就很好。
回复 支持 反对

使用道具 举报

  离线 

1

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-5-22
在线时间
5 小时
发表于 2014-7-2 11:39:47 | 显示全部楼层
正点原子公众号
原子哥,我想问下,为什么stack_dir和cpu_endian 以及*addr  ,占用6字节这三个U8就占用了6个字节啊,还有delay.o//delay.c里面,fac_us和fac_ms,这两个一个是U16,一个是U8,为什么是4个字节啊,是算的方式不一样吗?
回复 支持 反对

使用道具 举报

  离线 

1

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-5-22
在线时间
5 小时
发表于 2014-7-2 11:42:22 | 显示全部楼层
原子哥,我想问下,为什么stack_dir和cpu_endian 以及*addr  ,占用6字节这三个U8就占用了6个字节啊,还有delay.o//delay.c里面,fac_us和fac_ms,这两个一个是U16,一个是U8,为什么是4个字节啊,是算的方式不一样吗?
回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2014-7-2 23:34:18 | 显示全部楼层
回复【106楼】freedomcain:
---------------------------------
*addr 是指针,占4字节。
stack_dir和cpu_endian ,各一个。总共6个。

后一个问题,应该是fac_us按字节对其方式,与fac_ms对齐,这样就是2个u16了。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

1

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-5-22
在线时间
5 小时
发表于 2014-7-3 08:33:21 | 显示全部楼层
回复【107楼】正点原子:
---------------------------------
明白了,谢谢原子哥。另外关于你在76楼发的图片,我还想多问下,按照图片显示,那里应该只有静态存储区和栈区吧,那要是程序里面没有设置堆的大小,但是调用了malloc,那变量申请的空间是占用静态存储区吗?如果在程序里面设置了堆大小,那76的图片是不是在静态存储区和栈区之间,会多了一段堆区的空间呢,然后我们自己在程序用malloc申请的空间就会放在堆里面了?
回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2014-7-4 00:26:44 | 显示全部楼层
回复【108楼】freedomcain:
---------------------------------
是的。
但是MDK的自带malloc我不知道怎么用,我一般用自己写的malloc函数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

1

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
81
金钱
81
注册时间
2013-5-22
在线时间
5 小时
发表于 2014-7-4 08:35:33 | 显示全部楼层
回复【109楼】正点原子:
---------------------------------
明白,谢谢。
回复 支持 反对

使用道具 举报

  离线 

3

主题

48

帖子

0

精华

初级会员

Rank: 2

积分
86
金钱
86
注册时间
2012-10-15
在线时间
2 小时
发表于 2014-7-5 08:34:10 | 显示全部楼层
学习了,这个问题我也遇到过,定义一个大数组的局部变量,然后程序总是跳到HARDFAULT
回复 支持 反对

使用道具 举报

  离线 

33

主题

209

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
361
金钱
361
注册时间
2014-1-20
在线时间
0 小时
发表于 2014-7-5 10:57:17 | 显示全部楼层
默默的顶。有空再来研习下
回复 支持 反对

使用道具 举报

  离线 

4

主题

92

帖子

1

精华

高级会员

Rank: 4

积分
741
金钱
741
注册时间
2012-5-27
在线时间
82 小时
发表于 2014-7-5 11:02:39 | 显示全部楼层
感觉原子哥分析的很透彻  受教了  感谢原子哥的深入分析
回复 支持 反对

使用道具 举报

  离线 

13

主题

310

帖子

0

精华

高级会员

Rank: 4

积分
650
金钱
650
注册时间
2012-7-20
在线时间
89 小时
发表于 2014-9-19 12:03:14 | 显示全部楼层
感谢分享!!!
互联网,智能设备爱好者,欢迎讨论任何有意思的想法。
回复 支持 反对

使用道具 举报

  离线 

5

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1427
金钱
1427
注册时间
2012-7-16
在线时间
369 小时
发表于 2014-10-23 16:46:02 | 显示全部楼层
回复【49楼】正点原子:
---------------------------------
原子哥,那意思是说如果要使用malloc的话还需要设置HEAP的大小吗?
回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2014-10-23 23:17:07 | 显示全部楼层
回复【115楼】hyghyg1234:
---------------------------------
必须的
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

48

主题

535

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1287
金钱
1287
注册时间
2014-2-13
在线时间
139 小时
发表于 2014-10-24 09:02:18 | 显示全部楼层
回复【16楼】兰斯洛:
---------------------------------
是段间距小了,一看长篇幅的东西就很不舒服。
回复 支持 反对

使用道具 举报

  离线 

48

主题

535

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1287
金钱
1287
注册时间
2014-2-13
在线时间
139 小时
发表于 2014-10-24 09:07:54 | 显示全部楼层


例子没有改,小端应该是0x12 34 56 78
回复 支持 反对

使用道具 举报

  离线 

9

主题

73

帖子

0

精华

初级会员

Rank: 2

积分
149
金钱
149
注册时间
2012-2-16
在线时间
9 小时
发表于 2014-10-26 22:06:15 | 显示全部楼层
默默的顶。有空再来研习下
回复 支持 反对

使用道具 举报

  离线 

0

主题

2

帖子

0

精华

新手入门

积分
39
金钱
39
注册时间
2014-3-4
在线时间
3 小时
发表于 2014-11-6 15:53:49 | 显示全部楼层
这个太给力了
回复 支持 反对

使用道具 举报

  离线 

1

主题

20

帖子

0

精华

新手入门

积分
46
金钱
46
注册时间
2013-11-22
在线时间
0 小时
发表于 2014-11-26 16:38:28 | 显示全部楼层
大家讨论的如此深入,作为初学者都不好意思回复了,真是厉害!
回复 支持 反对

使用道具 举报

  离线 

1

主题

20

帖子

0

精华

新手入门

积分
46
金钱
46
注册时间
2013-11-22
在线时间
0 小时
发表于 2014-11-26 17:30:10 | 显示全部楼层
我想到一个问题,volatile变量是存放在哪里呢?它跟一般的变量不同,每次用之前都要刷新,它是跟C语言里register变量一样是存储在寄存器里的吗?
回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2014-11-26 23:29:05 | 显示全部楼层
回复【122楼】firstzys:
---------------------------------
一样是sram里面。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

84

主题

368

帖子

0

精华

高级会员

Rank: 4

积分
859
金钱
859
注册时间
2013-4-29
在线时间
82 小时
发表于 2014-11-27 07:58:32 | 显示全部楼层
mark  mark
回复 支持 反对

使用道具 举报

  离线 

10

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
105
金钱
105
注册时间
2012-7-7
在线时间
2 小时
发表于 2014-12-11 10:07:58 | 显示全部楼层
我都舍不得看了
回复 支持 反对

使用道具 举报

  离线 

78

主题

902

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1529
金钱
1529
注册时间
2013-4-15
在线时间
107 小时
发表于 2014-12-16 15:19:05 | 显示全部楼层
拜读,解了我很多困惑!
合肥-文盲
回复 支持 反对

使用道具 举报

  离线 

4

主题

45

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
金钱
285
注册时间
2014-10-26
在线时间
28 小时
发表于 2014-12-17 09:23:03 | 显示全部楼层
有没人在IAR下探讨过,堆在栈后面

IAR下的编译结果不是很友好~

回复 支持 反对

使用道具 举报

  离线 

6

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
206
金钱
206
注册时间
2014-12-23
在线时间
34 小时
发表于 2014-12-23 12:07:41 | 显示全部楼层
这个要马克一下
回复 支持 反对

使用道具 举报

  离线 

33

主题

254

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
412
金钱
412
注册时间
2012-8-16
在线时间
0 小时
发表于 2014-12-23 15:46:06 | 显示全部楼层
这个果断顶起.....
开源的世界,你可以做主!!
回复 支持 反对

使用道具 举报

  离线 

15

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-31
在线时间
3 小时
发表于 2014-12-26 21:04:04 | 显示全部楼层
谢谢分享,学习了
总有一天,要为自由而活
回复 支持 反对

使用道具 举报

  离线 

7

主题

26

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2014-11-16
在线时间
1 小时
发表于 2015-1-14 19:34:36 | 显示全部楼层
讨论气氛真是太好了,表示在期末复习还是会来网站看看,受益匪浅,力顶原子哥
回复 支持 反对

使用道具 举报

  离线 

0

主题

18

帖子

0

精华

新手入门

积分
40
金钱
40
注册时间
2014-3-21
在线时间
1 小时
发表于 2015-1-15 11:59:43 | 显示全部楼层
感谢!读了之后真是受益匪浅啊!
回复 支持 反对

使用道具 举报

  离线 

7

主题

32

帖子

0

精华

初级会员

Rank: 2

积分
109
金钱
109
注册时间
2013-1-14
在线时间
7 小时
发表于 2015-1-15 21:35:30 | 显示全部楼层
原子兄说错了吧,全局和静态变量应该都位于静态区
天道酬勤
回复 支持 反对

使用道具 举报

  离线 

15

主题

142

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
241
金钱
241
注册时间
2014-10-31
在线时间
3 小时
发表于 2015-4-16 17:57:20 | 显示全部楼层
好帖啊,原子威武。果断收藏。。
总有一天,要为自由而活
回复 支持 反对

使用道具 举报

  离线 

2

主题

20

帖子

0

精华

新手入门

积分
48
金钱
48
注册时间
2014-2-26
在线时间
0 小时
发表于 2015-5-15 09:29:15 | 显示全部楼层
值得一顶,犯错误了就找到经验了
回复 支持 反对

使用道具 举报

  离线 

2

主题

20

帖子

0

精华

新手入门

积分
48
金钱
48
注册时间
2014-2-26
在线时间
0 小时
发表于 2015-5-15 09:31:24 | 显示全部楼层
那具体这个栈和堆的这个大小设置有没有个极限?这是我一直疑惑的
回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2015-6-17 10:29:54 | 显示全部楼层
回复【136楼】豪放的笔杆:
---------------------------------
当然有极限了,肯定是少于内部内存的总和
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

33

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2014-10-27
在线时间
25 小时
发表于 2015-6-19 16:03:53 | 显示全部楼层
学习了,好好消化一下!
回复 支持 反对

使用道具 举报

  离线 

33

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2014-10-27
在线时间
25 小时
发表于 2015-6-19 16:16:29 | 显示全部楼层
回复【137楼】正点原子:
---------------------------------
原子哥,是不是理论上这个堆和栈 以及静态区的大小都是我们自己再启动文件里设置,只要总和不超过内存大小即可?
另外启动文件中:有关于堆和栈大小设置
Stack_Size      EQU     0x00000800
Heap_Size       EQU     0x00000000
里面有关于静态区大小的设置吗?
回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2015-6-19 23:50:39 | 显示全部楼层
回复【139楼】善良的二哥:
---------------------------------
静态存储区就是堆栈之外的内存区域,最大可以是内存总大小-Stack_Size -Heap_Size
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

33

主题

188

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
金钱
294
注册时间
2014-10-27
在线时间
25 小时
发表于 2015-6-23 09:20:29 | 显示全部楼层
回复【140楼】正点原子:
---------------------------------
谢谢原子哥解答!
回复 支持 反对

使用道具 举报

  离线 

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
发表于 2015-6-23 10:39:05 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------

请教大师:

最上面的://delay.c里面,fac_us和fac_ms,共占用4字节
我看了这2个变量的定义:

static u8  fac_us=0;     
static u16 fac_ms=0; 

我的理解是: fac_us 占1个字节,fac_ms占2个字节, 还多出的1个字节是为什么呢?
回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2015-6-23 19:49:51 | 显示全部楼层
回复【142楼】xinshou:
---------------------------------
这里是3个字节。写错了。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
发表于 2015-6-24 11:12:57 | 显示全部楼层
原子大师:我还有点没搞明白。

delay.c里面变量的定义:
static u8  fac_us=0;     
static u16 fac_ms=0; 

fac_us 占1个字节,fac_ms占2个字节,

RW-Data   为什么是4个字节而不是3个字节?

如果是4字节对齐的话,test.c里面的
RW-Data为什么是6字节? 它不需要4字节对齐吗?




回复 支持 反对

使用道具 举报

  离线 

497

主题

9万

帖子

31

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
128160
金钱
128160
注册时间
2010-12-1
在线时间
1131 小时
 楼主| 发表于 2015-6-24 22:43:43 | 显示全部楼层
回复【144楼】xinshou:
---------------------------------
这里多的1个被用于字节对齐了。
你可改为如下:
static u8  fac_us=0;
static u8  fac_u1s=0; //us延时倍乘数    
static u16 fac_ms=0; //ms延时倍乘数,在ucos下,代表每个节拍的ms数

再编译试试
会发现结果还是4字节。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

  离线 

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
发表于 2015-6-25 00:19:41 | 显示全部楼层
回复【145楼】正点原子:
---------------------------------

非常感谢。

但是下面的:
test.c里面的RW-Data为什么是6字节? 它不需要4字节对齐吗?
回复 支持 反对

使用道具 举报

  离线 

6

主题

30

帖子

0

精华

初级会员

Rank: 2

积分
116
金钱
116
注册时间
2012-5-5
在线时间
6 小时
发表于 2015-6-25 17:08:32 | 显示全部楼层
好贴,学习了
黑白风云谁是主,旁人笑看输赢
回复 支持 反对

使用道具 举报

  离线 

78

主题

902

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1529
金钱
1529
注册时间
2013-4-15
在线时间
107 小时
发表于 2015-8-26 10:52:17 | 显示全部楼层
回复【77楼】正点原子:
---------------------------------
再次拜读原子哥的这个帖子,对堆栈的理解加深了,既然全局变量存在堆区,是从0x2000 0000开始向上增长,局部变量存在栈区,是从0x2000 0940开始向下增长,如果全局变量、静态变量太多,就可能会导致堆栈冲突,系统崩溃,那有个疑问,地址>0x2000 0940的SRAM是存什么的?不存全局变量、不存静态变量、不存局部变量,那存的是什么类型的变量
合肥-文盲
回复 支持 反对

使用道具 举报

  离线 

78

主题

902

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1529
金钱
1529
注册时间
2013-4-15
在线时间
107 小时
发表于 2015-8-27 10:28:35 | 显示全部楼层
keil 4

合肥-文盲
回复 支持 反对

使用道具 举报

  离线 

78

主题

902

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1529
金钱
1529
注册时间
2013-4-15
在线时间
107 小时
发表于 2015-8-27 13:26:28 | 显示全部楼层
回复【51楼】正点原子:
---------------------------------
终于看到真谛了
合肥-文盲
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2018-6-20 09:52

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */