OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4060|回复: 22

自己写的代码如下图所示,程序编译没问题,将m【5000】改为m【500】程序可以正常运行,但5000就不行,这是为什么啊?

[复制链接]

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-5-23
在线时间
13 小时
发表于 2016-12-2 15:15:59 | 显示全部楼层 |阅读模式
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-12-2 15:16:00 | 显示全部楼层

额,.s结尾的启动文件啊!

~Q8SCN~I0NTXZDT$MW~XMSP.png
开往春天的手扶拖拉机
回复

使用道具 举报

34

主题

283

帖子

0

精华

高级会员

Rank: 4

积分
739
金钱
739
注册时间
2015-11-15
在线时间
226 小时
发表于 2016-12-2 15:32:09 | 显示全部楼层
你5000的时候,代码块的大小,会不会超过了
与其感慨路难行,不如马上出发
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-12-2 15:39:00 | 显示全部楼层
数组m为5000,那么需要使用到的栈空间就是5000*2=10000个字节=10K。看一下你设置的栈空间有没有这么大!!!
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 15:45:55 | 显示全部楼层
zuozhongkai 发表于 2016-12-2 15:39
数组m为5000,那么需要使用到的栈空间就是5000*2=10000个字节=10K。看一下你设置的栈空间有没有这么大!! ...

是这样吗?定义一个大的buffer,栈空间一定要和这个buffer一样大?甚至更大??我目前的产品有定义8K的buffer,但栈空间只有1K.目前跑起来运行正常。
shop60994719.taobao.com
回复

使用道具 举报

2

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-4-15
在线时间
73 小时
发表于 2016-12-2 15:54:59 | 显示全部楼层
本帖最后由 dengxingling8 于 2016-12-2 15:58 编辑

栈空间过大(即使大于SRAM)并不会产生警告或者错误,在运行过程中,只要没有使用到和变量冲突的地址,程序运行就不会出现问题。500可以,5000不行也是因为这样
回复

使用道具 举报

5

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
182
金钱
182
注册时间
2015-7-13
在线时间
38 小时
发表于 2016-12-2 16:00:17 | 显示全部楼层
应该是数组太大了
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 16:06:25 | 显示全部楼层
dengxingling8 发表于 2016-12-2 15:54
栈空间过大(即使大于SRAM)并不会产生警告或者错误,在运行过程中,只要没有使用到和变量冲突的地址,程序 ...

栈空间过大,编译的时候一定会提示RAM定义过大不够了!他这个定义问题定义m【500】或m【5000】应该是编译了,,没提示警告,说明RAM空间够用,,运行不起来,应该类似于数组越界....  我没太细看STM32的堆栈手册内容。。谁来解释下zuozhongkai(版主)的“
数组m为5000,那么需要使用到的栈空间就是5000*2=10000个字节=10K。看一下你设置的栈空间有没有这么大!!!”这句话,对吗?
shop60994719.taobao.com
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 16:17:01 | 显示全部楼层
zuozhongkai 发表于 2016-12-2 15:39
数组m为5000,那么需要使用到的栈空间就是5000*2=10000个字节=10K。看一下你设置的栈空间有没有这么大!! ...

看了下,你说的对,,LZ居然定义的局部变量,这样在压栈的时候会出现问题。把m[5000]改成全局变量试下!!!
shop60994719.taobao.com
回复

使用道具 举报

2

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-4-15
在线时间
73 小时
发表于 2016-12-2 16:28:52 | 显示全部楼层
本帖最后由 dengxingling8 于 2016-12-2 16:34 编辑
密耳 发表于 2016-12-2 16:06
栈空间过大,编译的时候一定会提示RAM定义过大不够了!他这个定义问题定义m【500】或m【5000】应该是编译 ...

丝毫没有问题,片子SRAM大小8K,测试代码有问题,不过和讨论的问题无关了

QQ截图20161202162001.png
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 16:36:39 | 显示全部楼层
dengxingling8 发表于 2016-12-2 16:28
丝毫没有问题,片子SRAM大小8K,测试代码有问题,不过和讨论的问题无关了

你改的堆栈大小还是你的test[1000*1024]大小?你这样定义个局部变量。。???没问题?????????
shop60994719.taobao.com
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 16:36:42 | 显示全部楼层
dengxingling8 发表于 2016-12-2 16:28
丝毫没有问题,片子SRAM大小8K,测试代码有问题,不过和讨论的问题无关了

你改的堆栈大小还是你的test[1000*1024]大小?你这样定义个局部变量。。???没问题?????????
shop60994719.taobao.com
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 16:36:46 | 显示全部楼层
dengxingling8 发表于 2016-12-2 16:28
丝毫没有问题,片子SRAM大小8K,测试代码有问题,不过和讨论的问题无关了

你改的堆栈大小还是你的test[1000*1024]大小?你这样定义个局部变量。。???没问题?????????
shop60994719.taobao.com
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 16:36:49 | 显示全部楼层
dengxingling8 发表于 2016-12-2 16:28
丝毫没有问题,片子SRAM大小8K,测试代码有问题,不过和讨论的问题无关了

你改的堆栈大小还是你的test[1000*1024]大小?你这样定义个局部变量。。???没问题?????????
shop60994719.taobao.com
回复

使用道具 举报

2

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-4-15
在线时间
73 小时
发表于 2016-12-2 16:42:00 | 显示全部楼层
密耳 发表于 2016-12-2 16:36
你改的堆栈大小还是你的test[1000*1024]大小?你这样定义个局部变量。。???没问题?????????

keil在编译的时候,并不会检测栈使用量,所以定义的时候不会有问题,使用的时候,只要没有和需要用的地址重合或者给的地址不合法就不会产生问题,
回复

使用道具 举报

39

主题

597

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
2115
金钱
2115
注册时间
2011-9-3
在线时间
121 小时
发表于 2016-12-2 16:44:01 | 显示全部楼层
LZ尝试改成全局变量看是否OK。
回复

使用道具 举报

21

主题

387

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1043
金钱
1043
注册时间
2016-9-8
在线时间
213 小时
发表于 2016-12-2 16:49:20 | 显示全部楼层
dengxingling8 发表于 2016-12-2 16:42
keil在编译的时候,并不会检测栈使用量,所以定义的时候不会有问题,使用的时候,只要没有和需要用的地址 ...

我说的是你把堆栈的大小这块定义改大,,你看出报错不??我的为什么出??.....................
调整.png
shop60994719.taobao.com
回复

使用道具 举报

2

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
383
金钱
383
注册时间
2015-4-15
在线时间
73 小时
发表于 2016-12-2 17:01:01 | 显示全部楼层
密耳 发表于 2016-12-2 16:49
我说的是你把堆栈的大小这块定义改大,,你看出报错不??我的为什么出??.....................

修改堆栈大小,编译的时候就直接拿出来那么多,这个时候加上全局变量什么的超过SRAM就会报错了。
回复

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-5-23
在线时间
13 小时
 楼主| 发表于 2016-12-3 10:24:19 | 显示全部楼层
螃蟹爱虫 发表于 2016-12-2 16:44
LZ尝试改成全局变量看是否OK。

全局变量没问题
回复

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-5-23
在线时间
13 小时
 楼主| 发表于 2016-12-3 10:25:42 | 显示全部楼层
zuozhongkai 发表于 2016-12-2 15:39
数组m为5000,那么需要使用到的栈空间就是5000*2=10000个字节=10K。看一下你设置的栈空间有没有这么大!! ...

如何设置栈空间啊?我并没有设置栈空间
回复

使用道具 举报

88

主题

7377

帖子

5

精华

资深版主

Rank: 8Rank: 8

积分
14980
金钱
14980
注册时间
2013-11-13
在线时间
1823 小时
发表于 2016-12-3 10:48:56 | 显示全部楼层
梅小小 发表于 2016-12-3 10:25
如何设置栈空间啊?我并没有设置栈空间

那个汇编写的启动文件。一个是栈空间大小,一个是堆空间大小
[F%%JVKL]9C3S_S{NMKDW$D.png
开往春天的手扶拖拉机
回复

使用道具 举报

13

主题

36

帖子

0

精华

初级会员

Rank: 2

积分
57
金钱
57
注册时间
2016-5-23
在线时间
13 小时
 楼主| 发表于 2016-12-3 10:57:34 | 显示全部楼层
zuozhongkai 发表于 2016-12-3 10:48
那个汇编写的启动文件。一个是栈空间大小,一个是堆空间大小

如何查看的啊?
回复

使用道具 举报

43

主题

481

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1352
金钱
1352
注册时间
2014-12-24
在线时间
321 小时
发表于 2016-12-3 11:00:10 | 显示全部楼层
栈和堆很多人搞不清楚!
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-25 18:10

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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