关于ADS的优化与全局变量

这两个星期在LPC2214上调一些代码,前几天调试感觉代码稳定性特别差,同样的代码不做任何改动从新编译一次就有可能造成程序不能执行。后来逐渐发现了原因,在ADS中设置全局变量很可能造成代码不稳定甚至不能运行。而且编译器的优化可能会造成很多毛病,同样的代码 我用-O2编译能够正常运行,但是用-O0编译就不能正常执行。后来把容易造成错误的全局变量全部用VOLATILE声明,但是结果仍然不理想,最后是在忍无可忍,选择了IAR来编译。感觉IAR还是相当好用的,我用的4.40A,一个不好的地方是和HJTAG之间配合的不太好。决定过两天买一个仿真器。今天代码在RAM中已经调通但是下载到FLASH中程序一中断就跑飞,出现取指令异常。后来发现是中断向量表的重映射没设置对(memmap寄存器),导致中断向量表存在片上RAM中,中断程序跳转的时候程序就飞了。2214的UART不知道是不是有BUG,将从串口发给2214的数据再重新传回来,经常发送的00就会被忽略掉,而且如果发送的数中有13的话,就根本没有反馈了,不知道是串口调试软件的问题还是2214的问题。可能是外国人觉得13不吉利给我没收了。这几天调代码问过几次ZLG的技术支持,总体感觉水平很差。而且一直性我推荐什么垃圾ECOS增值包,在他们口中ECOS增值包就是个万金油,什么问题都有相应解决方案。还有一点感觉是LPC2214的BUG太多,下载勘误表一大堆BUG,简直让人不敢放心。

使用关键词__volatile限定的一个对象,可以告诉编译器该对象可能在程序之外被修改,这样编译器在编译时将不优化对该操作对象的操作。对于系统中的IO寄存器,通常使用volatile类型的结构来访问。
                               ——《ARM体系结构与编程》

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值