现象:程序烧录板子后,单片机不启动,卡死。注释掉部分字节数组后,才能运行。
分析:
这是IAR编译的方法,导致看门狗溢出了。MSP430单片机一上电看门狗就已经启动,但是在进入main()函数之前,软件会先初始化用到的一些数据,比如数组。如果数定义的比较大,初始化时间比较长,那就有可能导致看门狗溢出了,单片机复位,然后重启,再初始化,再溢出,再复位..程序永远也进不去主函数。
解决方法:
使用低级初始化函数:int __low_level_init(void) 。该函数会自动把低级初始化函数放在程序的最开始处,在此可以关闭看门狗,等低级初始化函数执行完之后,才会进行数据初始化,最后再进入main()函数。
void main()
{
}
int __low_level_init(void)
{
WDTCTL = WDTPW+WDTHOLD; // Stop WDT
/* Insert your low-level initializations here */
/*
* Return value:
*
* 1 - Perform data segment initialization.
* 0 - Skip data segment initialization.
*/
return 1;
}
也不用调用该函数,编译器自动将其放在最开始处。
当然也可以把所有硬件初始化函数写进来,这样在进入main函数之前,把硬件都准备好了,避免了其他bug产生。
__no_init unsigned char all_25665[] ={
//4K多字节
};
关键字:MSP430 大型数组 上电不启动
引用地址:
MSP430 大型数组 上电不启动
推荐阅读最新更新时间:2024-11-16 21:57
基于MSP430单片机的无线充电器设计
引言 目前,手机、MP3和笔记本 电脑等便携式电子设备进行充电主要采用的是一端连 接交流电源,另一端连接便携式电子设备充电电池的传统充电方式。这种方式有很多不利 的地方,如频繁的插拔很容易损坏接头,也可能带来触电的危险等。因此,非接触式感应充电器在上个世纪末期诞生。凭借其携带方便、成本低、无需布线等优势迅速受到各界关注。实现无线充电,能量传输效率高,便于携带成为充电系统的研究方向之一 。本设计就是一个由能量发送单元和能量接收单元两大部分组成,利用电磁感应原理 实现电能无线传递的充电器。 1 硬件系统设计 1.1 器件选择 本无线充电系统的设计是用线圈耦合方式传递能量,使接收单元接收到足够的电能,以保证
[电源管理]
MSP430寄存器中文注释----串口寄存器
/************************************************************ * USART 串口寄存器 UCTL , UTCTL , URCTL 定义的各个位 可串口1 串口2公用 ************************************************************/ /* UCTL 串口控制寄存器*/ #define PENA 0x80 /*校验允许位*/ #define PEV 0x40 /*偶校验 为0时为奇校验*/ #define SPB 0x20
[单片机]
MSP430常见问题之开发工具类
Q1:我自己做了一块MSP430F149的试验板,以前用下载线进行调试没有出现过问题,但是,最近我每次make后用下载线调试时,总是弹出一个窗口,给我提示:Could not find target status. 然后就死到那儿了,请问这是什么问题呢? A1:检查Jtag口线是否连接正常,如果JTAG口线连接正常,可能是供电不足,目标板加电再测试。 Q2:我用的430f22x学习套件,请问在IAR Embedded Workbench 中仿真时如何看程序运行时间. A2:只有软件模拟下可以看, VIEW-REGISTER-CYCLECOUNT Q3:请问各位msp430 仿真器和编程器有什么区别啊?是不是我开发的时候这两个
[单片机]
MSP430流水灯Ⅱ
//流水灯三种流动方式和四种流动速度 #include msp430f149.h typedef unsigned int uint; uint i = 0,j = 0,dir = 0; uint flag = 0,speed = 0; void main( void ) { P1DIR = 0XFF;P1OUT = 0XFF; P2DIR = 0XFF;P2OUT = 0XFF; P3DIR = 0XFF;P3OUT = 0XFF; P4DIR = 0XFF;P4OUT = 0XFF; P5DIR = 0XFF;P5OUT = 0XFF; P6DIR = 0XFF;P
[单片机]
基于MSP430F149的室外移动机器人高精度组合导航系统
对于在室外环境工作的移动机器人通常使用惯导/卫星组合导航方式。惯性导航系统具有完全自主、抗干扰强、隐蔽能力好和输出参数全面等优点,但它的鲁棒性极低,误差会不断随时间累积发散。卫星导航系统具有精度高、定位范围广和误差不随时间累积等优点,但其自主性差、易受外界遮挡和干扰、接收机数据更新频率低等缺点。因此工程上常常将两者互补结合使用,组成卫星/惯性组合导航系统。 本文以低功耗MSP430F149为核心,设计了能够同时实现卫星导航(GNSS)接收机、惯性测量单元(IMU)、气压高度等导航信息的高速采集与高速合路传输,并进行初步导航定位信息融合的导航系统,即可为室外移动机器人提供直接的导航服务,也可作为高精度组合导航系统的原始测量信息高
[单片机]
MSP4305529驱动HX711
//3.3V供电 3.2接DT 3.7接SCK #include MSP430.h unsigned long data; unsigned long ReadCount(void) { unsigned long Count; unsigned char i; P3OUT &=~BIT7; //SCL=0;使能AD(PD_SCL 置低) Count=0; while(P3IN&BIT2); //AD转换未结束则等待,否则开始读取 for (i = 0; i 24; i++) { P3OUT|=BIT7;//SCL = 1; PD_SCL 置高(发送脉冲)
[单片机]
实时记录MSP430编程问题
编程中遇到了一个及其诡异的问题,发送缓存与接收缓存的LISTEN控制字为零同时两端未用线路连接的情况下,对发送缓存设置值时接收缓存也同时改变了,正在各种检查中,如果解决了会贴出解决方法。 问题解决了:单片机坏了!!!内部的LISTEN估计被连上了,这块单片机只能用来做为发送端了。 另外,今日还遇到了中断子程序不作用的情况,网上各种寻找后发现程序中缺少 _EINT();导致无法运行中断程序,奇怪的是TI给的示范程序里面都没有_EINT(),我猜想是因为IAR版本或者所用调试程序不同的原因吧。 现在两块单片机已经能够进行简单的单工通信了,明天再来完善程序。 即:UCA1RXBUF = UCA1TXBUF 附上问题程序:
[单片机]
TI推出MSP430 LaunchPad开发套件,快速实现原型设计
日前,德州仪器 (TI) 宣布推出最新MSP430TM MCU Value Line LaunchPad 开发套件 ,进一步兑现了其结合 16位MCU高性能、超低功耗以及超低成本来解决8位MCU不足之处的一贯承诺。该开源套件包含通过TI MSP430 Value Line MCU便捷启动各种设计方案所需的所有软硬件。上述MCU起价仅25美分,可实现比8位MCU锐升10倍的性能以及延长10倍的电池使用寿命。
LaunchPad使开发人员能够快速利用MSP430 Value Line MCU进行器件评估、编程或调试,从而支持快速原型设计与开发。该高灵活性有助于开发人员卸下安放在定制电路板上的编程器件,或将其插入 Laun
[工业控制]