1、堆栈溢出导致频繁重启:
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、数组越界:
2012.4.24 UESTC
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);
关键字:MSP430 跑飞
引用地址:MSP430重启/频繁重启/跑飞 原因分析
案例1:
concern_tower_num为从铁电内读取的数据,因为铁电没有初始化,所以concern_tower_num的值很大
下面的程序一直循环到铁电内concern_tower_num所在位置的值,所以超过了option内所设置的stack的最大容量导致堆栈溢出,重启。
定义了一个29字节长度的数组: char back_info[29]={0};
结果给其填充50个字节的内容 memcpy( back_info+19,send_back_data,data_len); ,现象是堆栈没有溢出,机器重启。
问
答 1:
先看IFG1.0位状态,看是什么原因导致复位
答 2:
您测量一下复位脚上的波形,看是否是硬件复位。
答 3:
你的工作环境??是不是干扰问题?
是不是指针弄飞了??
是不是指针弄飞了??
答 4:
外部有看门狗吗?有的话要先关掉。
答 5:
谢谢以上各位的回答:
我的具体情况是原来程序是用查询方式,已经通过测试,没有这个问题
而现在需要添加部分功能,为此把查询方式改为了中断方式(新功能还未添加),
现在已经检查过IFG1.0位0,不是内部看门狗导致复位
外部无看门狗,也无明显干扰源
硬件复位可能性也不大,不过这个可以再测一下!
有可能是指针弄飞等程序错误,但是这种内部程序错误会导致系统复位吗?
我的具体情况是原来程序是用查询方式,已经通过测试,没有这个问题
而现在需要添加部分功能,为此把查询方式改为了中断方式(新功能还未添加),
现在已经检查过IFG1.0位0,不是内部看门狗导致复位
外部无看门狗,也无明显干扰源
硬件复位可能性也不大,不过这个可以再测一下!
有可能是指针弄飞等程序错误,但是这种内部程序错误会导致系统复位吗?
答 6:
错误写FLASH也能复位,程序超出,复位向量错误等也可能导致复位。
答 7:
可能是复位电路问题!
答 8:
经测试,不是外部复位电路的问题!
现在问题应该在中断子程序对主函数造成了不确定的影响上,
但是目前仍无法定位问题在哪?
郁闷ing!!!
现在问题应该在中断子程序对主函数造成了不确定的影响上,
但是目前仍无法定位问题在哪?
郁闷ing!!!
答 9:
是无法进入中断吗还是其他的原因,能具体说的详细些吗。
答 10:
呵呵,我的问题是430出现不确定的复位,有时运行几分钟就复位,有时能到几十分钟
而在这之前,我的程序是用的查询方式处理外部事务,一直运行正常,没有这个问题
现在改为中断来处理外部事务,就出现了莫名的复位问题
中断是能正常进入的!!
通过几天的排查,现在问题应该在中断子程序对主函数造成了不确定的影响,
从而导致了系统复位。但无法定位问题所在!
而在这之前,我的程序是用的查询方式处理外部事务,一直运行正常,没有这个问题
现在改为中断来处理外部事务,就出现了莫名的复位问题
中断是能正常进入的!!
通过几天的排查,现在问题应该在中断子程序对主函数造成了不确定的影响,
从而导致了系统复位。但无法定位问题所在!
答 11:
检查一下数据指针吧,是否超出内存范围,看现象可能是这方面的影响
答 12:
程序发出来看看,不然干说也是查不出来
答 13:
一个中断一个中断使能,一个一个排查。多试几次就是了。把问题分块一个一个来。看哪个出的问题
这个跟单片机支持的断点个数也是有关的。如果只支持一个断点,你设置了2个,然后复位的话就容易跑到Cstart而不是Main。另外要注意IAR run to Main的复选框你勾上没?
案例二:跑飞
void send_basic_data_to_dis_part()
{
}
//basic_data_buf[60] 数组所开辟的长度为60,但是在下面从basic_data_buf首地址起填装数据的过程当中,填写的数据长度超过了60,数组越界,破坏了栈内保持的进入send_basic_data_to_dis_part()函数之前保存的现场数据,结果跳出该函数调用,要执行下步的时候,由于SP内的值已经被修改,导致程序跑飞。(这种情况症状往往表现为:进入某个函数内正常,在跳出的时候就跑飞,多为在函数内SP的指针被修改)
上一篇:RS-232串行通信与单片机接口简介
下一篇:单片机控制的韩氏穴位神经刺激仪
推荐阅读最新更新时间:2024-03-16 14:40
TI超低功耗MSP430 MCU助力电容式触摸设计
德州仪器 (TI) 推出一款最新软件库,其可提供传感器调节 GUI、设计配套产品以及更多微控制器 (MCU) 支持简化电容式触摸解决方案开发,进一步壮大业界最低功耗电容式触摸产品阵营。TI MSP430 MCU 能以每个按钮不足 1μA 的平均电流实现超低功耗工作,是业界电容式触摸按钮、滑块、滚轮及邻近效应应用与配件的最佳选择,可充分满足便携式电子设备与家用电器等应用需求。
TI 开源 MSP430 电容式触摸软件库现在可帮助开发人员使用近期推出的 MSP430G2xx5 Value Line 器件与 Wolverine MSP430FR58xx/FR59xx 器件实现按钮、滑块、滚轮以及邻近电容式触摸应用。这些新器件可为工程
[单片机]
基于MSP430F1611单片机的音频信号分析
本系统将采用集成有μC/OS-Ⅱ操作系统的单片机,利用快速傅里叶变换并加窗函数的方法来实现对音频信号各项参数的分析。 1 系统总体方案 信号首先通过8阶有源巴特沃兹滤波器进行抗混叠处理,然后通过放大衰减,电平搬移缓冲网络后,送单片机处理。 系统的2片MSP430F1611单片机,一片负责对模拟信号进行采样,并对采集得到的信号进行4096点的FFT计算,另一片负责控制显示设备以及完成对信号功率谱,周期性,失真度的分析。 系统的总体方框图如图1所示。 2 系统各硬件设计 2.1 抗混叠滤波器的设计 根据Nyquist定理,AD模数转换器以fs的频率采样输入信号时,频率f f
[单片机]
MSP430模拟串口的源程序-汇编语言
#i nclude MSP430x11x1.h ; ; MSP430F1121 ; ----------------- ; /|\| XIN|- ; | | | 32k ; --|RST XOUT|- ; | | ; | | 2400 8N1 ; | TX/P1.1|-------- ; | TX/P2.2| -------- ; RXD equ 004h ; RXD on P2.2 TXD equ 002h
[单片机]
基于MSP430单片机的直流电子负载设计
摘要:直流电子负载具有使用方便、灵活,功能强大等特点,能够很好的检测直流稳压电源。因此人们对电子负载的需求越来越多,对其性能要求也越来越高。设计了一种高精度的电子负载,其主要由电子模块、电子负载模块、频率切换模块、采样模块、显示模块和电源模块构成。它是以MSP430单片机为控制中心,通过D/A的控制达到恒流值在一定范围内的控制,通过内含A/D的采集模块将实际的端电压、端电流送回单片机控制模块,还采用了PID控制算法,通过显示模块加以显示电子负载参教。该直流电子负载具有精度达到±1%、分辨率高、实时测量、自动测试等特点。 直流电子负载用于测试直流稳压电源、蓄电池等电源的性能,它可以模拟真实环境中的负载(用电器)。与传统的模拟电阻
[单片机]
基于I2C总线的MSP430应用系统设计
引言 串行护展总线技术是新一代单片机技术发展的一个显著特点。其中PHILIPS公司推出的I2C总线最为著名,它包括一个两端接口,通过一个带有缓冲区的接口,数据可以被I2C发送或接收,控制和状态信息则通过一套内存映射寄存器来传送。与并行扩展总线相比,串行扩展总线有突出的优点:电路结构简单,程序编写方便,易于实现用户系统软硬件的模块化、标准化等。本文是把I2C总线应用到MSP430单片机温度控制系统中的一个典型实例。 I2C总线是用2根双向I/O信号线(串行时钟线SCL和串行数据线SDA)把多种器件连接起来,并实现器件之间的串行通讯。 MSP430是TI公司一种具有超低功耗的功能强大的
[单片机]
msp430g2553+pcf8574+dht11+lcd1602
先放硬件连接图 DHT11驱动子程序 模块功能:检测温湿度信息 DHT11.h #ifndef DHT11_H_ #define DHT11_H_ #include msp430g2553.h #define delay_us(x) __delay_cycles((long)(((double)8000000)*((double)x)/1000000.0)) #define delay_ms(x) __delay_cycles((long)(((double)8000000)*((double)x)/1000.0)) //输出数据P1.5 #define SET_DATA P1OUT |= BIT5 //拉高数据线
[单片机]
蓝牙和MSP430音频信宿设计
描述 TI 的蓝牙 + MSP430 音频散热器参考设计可供客户用于创建各种低端、低功耗音频解决方案的应用。一些可能的应用 - 玩具、低端蓝牙扬声器、音频播放配件。此参考设计是一种经济实惠的音频实施方案,通过参考其提供的完整设计文件,您可以将重心转移到应用和最终产品开发工作上。此参考设计支持的软件包括 Stonestreet One Bluetopia 蓝牙堆栈(经过认证且免专利费)。 特性 凭借最低成本、最低功耗的 MSP430F5229 实现蓝牙音频功能(SBC 编码/解码) 设计中将音频处理任务从 MCU 转移到蓝牙器件,从而实现低功耗音频 这种经济高效的低端无线音频解决方案,采用 4 层布局和 QFN 封装 此解决方案
[单片机]
MSP430常用程序架构
一、低功耗+中断 主函数 { 关闭看门狗 设置系统时钟 显示等外围设备初始化 定时器等内部资源初始化设置 开全局中断 进入低功耗 } 中断函数1 {}; 中断函数2 {} 文件组织形式 main.c /***************************头文件引用*******************************/ #include msp430f149.h 设备文件1头文件(例如#include ILI9325_Driver.h ) 设备文件2头文件(例如#include Disp_Lib.h ) /*********************宏定义与数据定义*********************
[单片机]
小广播
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐
最新单片机文章
更多精选电路图
更多热门文章
更多每日新闻
更多往期活动
11月13日历史上的今天
- 微软、腾讯、英特尔“不务正业”种黄瓜,是因为人工智能
- 郭明錤下调iPhone XR出货量,但恐遭供应链打脸!
- 微软 Windows 10 十月更新仍未重新上线,但四月更新调整到支
- 取代刘海屏指日可待?美国专利商标局公布苹果屏下摄像头
- 拆解对比:Apple苹果 Lightning与USB-C to 3.5mm转换器
- LabVIEW机器人模块――机器人选板中的特殊算法和API
- 利用LabVIEW Multisim连接工具包(ß版)实现Multisim自动化简介
- Elektrobit (EB) 全新云端工具加速 ADAS 和 AD系统开发速度
- 采用LabVIEW 8.2的多用虚拟电压表原理及设计
- 2019年Q2基带市场份额:高通和三星争夺5G基带市场领导权
厂商技术中心