本人使用MSP430已有6年有余,使用过MSP430F2232及MSP430FG4618。今年公司有个新项目采用了MSP430F5359,使用过程中遇到一个问题困扰了一个多月,始终无法解决,特求助各位大侠。
问题是这样的:项目使用MCU为MSP430F5359,PCB是自已设计的,编译工具为IAR6.30(CCS V6.0.1也试过),链接配置文件采用IAR自带的默认文件lnk430f5359.xcl, 软件中使用了UCOS II操作系统。在开始时一切都还正常,直到代码空间达到52K左右的时候软件运行的时候就出现了异常重启,但只要在程序任何地方删除一点代码就能运行正常,后来我就更改了链接配置文件,在文件0X10000-10001这两个字节配置为CHECKSUM,没想到居然软件运行就正常了,当时我分析的原因是这样的,MSP430F5359的FLASH 空间是0X08000-87FFF,共521K,其中中断向量位置为 INTVEC=0XFF80-FFFF,也就是说中断向量把代码空间分成了两段,程序在编译链接跨段时可能出现异常,把CHECKSUM配置在段交接处应该就避免了这一问题。就这样我当时以为就解决了这一问题,然而后续不久代码空间达到62K左右时这一问题就又出现了。现象跟前面一样,只要稍微增加一点代码软件运行就重启,我也尝试过一些方法来解决都无效果。
比如以下:1、怀疑芯片本身有问题,更换MSP430F5359购买渠道;
2、怀疑编译器问题,采用IAR6.50,CCS 6.0.1;
3、更改IAR编译的不同优化级别;
4、调试发现出现重启的代码后,把这些代码屏蔽掉后,依然会在后续的代码中出现重启;
5、增加任务的堆栈空间;
6、根据重启发现的原因,晶振问题,非法访问FLASH空间,供电电压等都有排查未发现异常。
目前我只要增加软件代码只能先删除一些代码以腾出空间临时应对,很无奈,我甚至怀疑是否MSP430F5359设计有问题。