历史上的今天
返回首页

历史上的今天

今天是:2025年02月23日(星期日)

正在发生

2021年02月23日 | MSP430重启/频繁重启/跑飞原因分析

2021-02-23 来源:eefocus

1、堆栈溢出导致频繁重启:


案例1:


concern_tower_num为从铁电内读取的数据,因为铁电没有初始化,所以concern_tower_num的值很大


下面的程序一直循环到铁电内concern_tower_num所在位置的值,所以超过了option内所设置的stack的最大容量导致堆栈溢出,重启。


for(int i=0;i


{


data[m]=crane_tower[i].crane_x;


m++;


data[m]=crane_tower[i].crane_y;


m++;


data[m]=crane_tower[i].front_arm_length;


m++;


}


2012.4.20 UESTC


2、数组越界:


定义了一个29字节长度的数组: char back_info[29]={0};


结果给其填充50个字节的内容 memcpy( back_info+19,send_back_data,data_len);,现象是堆栈没有溢出,机器重启。


2012.4.24 UESTC



MSP430F147程序总是莫名其妙的重新启动?


已经检查了堆栈没有溢出,WDT依然还是HOLD状态


哪位高手指点一下,还有哪种可能性?


答1:


先看IFG1.0位状态,看是什么原因导致复位


答2:


您测量一下复位脚上的波形,看是否是硬件复位。


答3:


你的工作环境??是不是干扰问题?


是不是指针弄飞了??


答4:


外部有看门狗吗?有的话要先关掉。


答5:


谢谢以上各位的回答:


我的具体情况是原来程序是用查询方式,已经通过测试,没有这个问题


而现在需要添加部分功能,为此把查询方式改为了中断方式(新功能还未添加),


现在已经检查过IFG1.0位0,不是内部看门狗导致复位


外部无看门狗,也无明显干扰源


硬件复位可能性也不大,不过这个可以再测一下!


有可能是指针弄飞等程序错误,但是这种内部程序错误会导致系统复位吗?


答6:


错误写FLASH也能复位,程序超出,复位向量错误等也可能导致复位。


答7:


可能是复位电路问题!


答8:


经测试,不是外部复位电路的问题!


现在问题应该在中断子程序对主函数造成了不确定的影响上,


但是目前仍无法定位问题在哪?


郁闷ing!!!


答9:


是无法进入中断吗还是其他的原因,能具体说的详细些吗。


答10:


呵呵,我的问题是430出现不确定的复位,有时运行几分钟就复位,有时能到几十分钟


而在这之前,我的程序是用的查询方式处理外部事务,一直运行正常,没有这个问题


现在改为中断来处理外部事务,就出现了莫名的复位问题


中断是能正常进入的!!


通过几天的排查,现在问题应该在中断子程序对主函数造成了不确定的影响,


从而导致了系统复位。但无法定位问题所在!


答11:


检查一下数据指针吧,是否超出内存范围,看现象可能是这方面的影响


答12:


程序发出来看看,不然干说也是查不出来


答13:


一个中断一个中断使能,一个一个排查。多试几次就是了。把问题分块一个一个来。看哪个出的问题


这个跟单片机支持的断点个数也是有关的。如果只支持一个断点,你设置了2个,然后复位的话就容易跑到Cstart而不是Main。另外要注意IAR run to Main的复选框你勾上没?


案例二:跑飞


void send_basic_data_to_dis_part()


{


char basic_data_buf[60]={0};


char frame_head[2]={0xFE,0xFB},frame_end[2]={0xFE,0xFA};


char frame_len[1]={0x45},frame_type[1]={0x40};


char bCRC[2]={0,0};


char tower_num[1]={0x08};


unsigned int addr=0;


addr=split_joint_hex_data( basic_data_buf,addr,frame_head,2);


addr=split_joint_hex_data( basic_data_buf,addr,frame_len,1);


addr=split_joint_hex_data( basic_data_buf,addr,frame_type,1);


addr=split_joint_hex_data( basic_data_buf,addr,tower_num,1);


for(uint8 i=0;i


{


addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].lcd_x),2);


addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].lcd_y),2);


addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].dis_fore_r),2);


addr=split_joint_hex_data( basic_data_buf,addr,(char*)(&crane_tower[i].dis_back_r),2);


}


CRC16(bCRC,basic_data_buf+2, addr-2); //数据CRC校验


addr=split_joint_hex_data( basic_data_buf,addr,bCRC,2);


addr=split_joint_hex_data( basic_data_buf,addr,frame_end,2);


UART2_Send_Buf(basic_data_buf,addr);


}


//basic_data_buf[60]数组所开辟的长度为60,但是在下面从basic_data_buf首地址起填装数据的过程当中,填写的数据长度超过了60,数组越界,破坏了栈内保持的进入send_basic_data_to_dis_part()函数之前保存的现场数据,结果跳出该函数调用,要执行下步的时候,由于SP内的值已经被修改,导致程序跑飞。(这种情况症状往往表现为:进入某个函数内正常,在跳出的时候就跑飞,多为在函数内SP的指针被修改)


跑飞三:


程序中有 mallco()动态申请内存空间,却没有相应的释放,结果内存消耗完毕,程序跑飞。


推荐阅读

史海拾趣

Heatron LED Integration公司的发展小趣事

Heatron LED Integration始终将客户需求放在首位,提供全方位的服务支持。公司建立了完善的售前咨询、售中指导和售后服务体系,确保客户在使用过程中能够得到及时、专业的帮助。此外,公司还根据客户需求提供定制化解决方案,满足不同场景下的照明需求。这种客户至上的服务理念,赢得了广大客户的信赖和好评。

HellermannTyton公司的发展小趣事

进入21世纪后,Heimann Optoelectronics Gmbh意识到全球化合作的重要性。公司积极寻求与国际知名企业的合作机会,与美国一家领先的半导体制造商共同研发了新一代的光电集成芯片。这一合作不仅提升了产品的技术水平和市场竞争力,还借助合作伙伴的全球销售网络,将Heimann的产品迅速推向国际市场。同时,公司也在亚洲设立了研发中心和生产基地,进一步提升了生产效率和供应链管理能力。

Flamar公司的发展小趣事

随着电子行业的全球化趋势日益明显,Flamar公司积极实施国际化战略,通过设立海外研发中心、生产基地和销售网络,不断拓展全球市场。公司先后在欧洲、亚洲等地建立分支机构,与当地企业建立紧密的合作关系,共同推动电子技术的创新与应用。通过国际市场的开拓,Flamar公司不仅实现了业务规模的快速增长,还进一步提升了品牌的国际知名度和影响力。

Boundary Devices公司的发展小趣事

作为一家有社会责任感的企业,Boundary Devices始终关注环境保护和可持续发展。公司在生产过程中积极采用环保材料和技术,减少对环境的影响。同时,公司还积极参与社会公益活动,为社会的发展贡献自己的力量。这些举措不仅提升了公司的社会形象,也为公司的长期发展奠定了坚实的基础。

以上五个故事基于Boundary Devices公司的发展背景和电子行业的一般趋势进行创作,旨在展示该公司在不同阶段的成长与发展。然而,实际的公司发展历程可能更加复杂和丰富,需要更多的资料和信息来深入了解。

Electronic Concepts Inc公司的发展小趣事

作为一家有社会责任感的企业,ECI始终关注环境保护和社会公益。公司积极参与各种环保活动,如节能减排、废物回收等。此外,ECI还设立了公益基金,资助贫困地区的教育事业和医疗事业。这些举措不仅提升了ECI的社会形象,也为公司赢得了更多客户的信任和支持。

Datakey Electronics公司的发展小趣事

随着全球化进程的加速,Datakey Electronics意识到单靠国内市场已经无法满足公司的长远发展需求。于是,公司积极寻求国际合作机会,与国际知名企业建立战略合作伙伴关系,共同开发新产品、开拓新市场。通过国际合作,Datakey Electronics不仅提高了自身的技术水平和产品竞争力,还成功将产品推向了国际市场。

问答坊 | AI 解惑

关于直插LED与SMDLED和大功率LED的投资分析

关于直插LED与SMDLED和大功率LED的投资分析 因近段时间有很多朋友问关于投资以上三类型的LED,个人仅发表一些看法: 1.直插LED投资发展最快的几年是在02年至05年(相信这时候开厂的已经赚的盆满钵满了);凡有钱的都做直插的LED了,并且现在有很 ...…

查看全部问答>

windowsXP DDK 如何连接一个中断?(KInterrupt?)

我只找到了KInterrupt这个类:但是问题出现如下 KInterrupt::Initialize 两种 格式 FORM 2: (WDM) VOID    Initialize(    KIRQL irql,    ULONG vector,    KINTERRUPT_MODE Mode,     ...…

查看全部问答>

求一份WtpTool Download完整原版代码

marvell的cpu智能机板子,要做一个自己的下载工具 email:killbug2004@gmail.com 另外麻烦讲一下基于usb下载的流程 中间有个VerifyImage不懂,文件下载id设置也不太清楚 谢谢达人…

查看全部问答>

关于VHDL程序设计的三个问题~请教!!!

1。在仿真中,有些非端口信号,例如SIGNAL ,VARIABLE,在node finder的 all list中 还是没有,没法建立它们的仿真波形,该怎么办,而且有的SIGNAL可以看到,有的看不到,这是为什么?(QUARTUSII) 2。在PROCESS中,这个PROCESS是 TYPE state IS ...…

查看全部问答>

A/D转换位数和分辨率

我正要做一个项目,输入信号是±4V,显示范围是0---99999,要求输入信号变化时,显示数据的最后一个位的最小变化是一个字。 即00001-00002---00003向这样的趋势变化,请问我要选择几位的A/D芯片呢,是怎样计算出来的呢? 还请指教!!!…

查看全部问答>

求51+sl811读写U盘的源程序+原理图

在网上有下了《51+sl811读写U盘的源程序+原理图》的原代码,但找不到原理图,请问哪位大哥有可以寄一份给我,或告知下载地址。谢谢! 我邮箱是: power_wjc@163.com…

查看全部问答>

[求助]请问大家一个关于视频的问题

我用1394转接卡接一个摄像头,然后在屏幕上实时的显示摄像头拍得图像,但是在启动初始化的时候(大概10次中有1次),显示在屏幕上的图像错位了,图像的1/3跑到下面去了,而且一直保持这样,要让图像正常只能重启,有人说是同步问题,但我觉得不像, ...…

查看全部问答>

我编译binutils到ARM上用,可是没有make过,请帮忙看一下!!

我先是 ./configure -target=arm-linux生成 Makefile 然后执行 make ,提示如下: // 我查了一下 regex.c中定义了个 char *malloc(); 在stdlib.h中void *malloc (size_t __size),我用的是gcc编译器,如果函数重载c++也可以通过 make[1]: Leav ...…

查看全部问答>

论坛里有没有做C2000系列电机控制的

希望有经验的坛友给点学习资料,或者推荐一下电机的DSP控制的书籍,本人菜鸟一个!~…

查看全部问答>

SWIM+STLINK连接不成功

STLINK 与STM8连接不成功。附图:硬件连接有问题吗?或者是STVP的配置有问题。 现在不是下载或者调试问题,而是STLINK识别不到有STM8S的存在:can not connect the device (当时的消息栏忘记抓图了) 初次使用STM8S(具体型号是STM8S103F3P ...…

查看全部问答>