OpenEdv-开源电子网

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

程序运行中停止了

[复制链接]

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
发表于 2015-6-23 11:18:23 | 显示全部楼层 |阅读模式
5金钱
我在测试一段WIFI的代码的时候,发现:
    程序编译完Jlink-v8自动下载并自动复位后程序运行正常,
    用jlink-v8在线debug程序也是能正常运行,
但是:
    在Jlink-v8自动下载并自动复位后程序运行正常,但手动按复位按钮后程序运行一段后卡住。
    在Jlink-v8自动下载并自动复位后程序运行正常,但断电后重新上电后程序运行一段后卡住。

我栈大小设置了1万字节:
NoOS_START_STACK := 10000

编译后Flash 是 272832字节,Static RAM 是 8936

程序在进入_start()后(还没有运行到main())后的寄存器状态如下:


硬件是战舰V1版,经过其它原子的程序测试,硬件是没问题的。

请教各位大师:这个是什么原因导致手动复位和断电后恢复供电后程序为什么卡住了?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-6-23 16:22:22 | 显示全部楼层
栈开了10k?请问下你的ram一共多大
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
 楼主| 发表于 2015-6-24 11:19:36 | 显示全部楼层
回复【2楼】ianhom:
---------------------------------
我在线调试的时候发现进栈的函数比较多,有5层以上,前期用了小的字节崩溃了,后来调大了才没崩溃。

我用的是原子的战舰第1版,MCU是STM32F103ZE, RAM是64KB, flash是512KB.
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-6-24 11:23:49 | 显示全部楼层
回复【3楼】xinshou:
---------------------------------
哦,不过5层不算多,我的有25层,栈也就用了200多字节,估计你局部变量用的比较多
刚开始的时候怀疑你的栈开的太大了,和堆区域重叠导致的问题,不过你RAM够大,估计不是这个问题
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
 楼主| 发表于 2015-6-24 11:33:24 | 显示全部楼层
你牛叉啊。栈堆了那么多。

我考虑栈大些,主要是基于WIFI芯片在传送数据时需要比较大的buffer.

我就奇怪:如果是堆栈重叠或内存溢出或内存分配失败,那应该:

程序编译完Jlink-v8自动下载并自动复位后程序运行 就应该不正常
或debug在线调试也应该不正常啊。

更奇葩的是:我断电后重新上电debug调试都正常,一点没崩溃。
回复

使用道具 举报

9

主题

538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3371
金钱
3371
注册时间
2015-1-7
在线时间
794 小时
发表于 2015-6-24 14:50:42 | 显示全部楼层
回复【5楼】xinshou:
---------------------------------
堆区域和栈区域重叠一般不会立即出现问题,一般会在操作重叠区域的时候出现问题,我在用其他芯片的时候遇到过这样的情况

wifi数据buffer可以开在堆里啊。如果开在栈里,buff的地址也不确定,而且压栈的话挺费事的,个人觉得。
机器生汇编,汇编生B,B生C,C生万物.... 经过长期对C语言的研究,目前只有两个方面不懂:这也不懂,那也不懂
https://github.com/ianhom
回复

使用道具 举报

27

主题

91

帖子

0

精华

初级会员

Rank: 2

积分
137
金钱
137
注册时间
2014-8-11
在线时间
3 小时
 楼主| 发表于 2015-6-25 00:24:59 | 显示全部楼层
回复【6楼】ianhom:
---------------------------------
嗯。这个是个好注意。我测试的逻辑很简单,就是不停地给PC发UDP包,DEBUG一天都正常的。断电或下载后手动复位就是不行。不知道为什么啊,晕死了。
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-21 02:38

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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