设计的一款产品中采用了IAP功能,一直正常。
偶然把IAR升级为7.6后带来一些问题:
首先是ST LINK不能使用,完全无法找到Device也不能通讯,而此前都是正常的,很怀疑是新版IAR的问题。后来证实是STLINK的问题,固件太新造成的,在21ic的网站上找到了旧的固件,刷新后马上正常。
下一个问题,非常离奇。正常的代码,使用7.4版本编译的可以正常运行,IAP也能正常跳转,使用7.6编译后IAP的代码可以运行,但是IAP在执行跳转后就直接进入到了HardFault,跟踪分析问题产生在进入跳转后代码的Main函数前就已经崩溃,再跟踪和产科堆栈,发现是在执行汇编代码的__iar_data_init3函数时崩溃的,而这些代码如果使用ST Link监控运行则是正常的不会崩溃,只能是在监控IAP代码时发现其崩溃,也就是无**常运行。
现在这个问题我很头大,将新代码直接下载不使用IAP是正常的,使用IAP就崩溃。最离奇的问题是我把代码的优化等级设置为低时,居然正常运行了。这就让我更离奇了。完全不知道问题出在哪里了?
感觉我没有说明白,其实就是采用新版本的IAR后,在高和中等优化的情况下不能使用IAP进行代码跳转,在低优先级的情况下则可以,而且这个和IAP本身的代码没有关系。
不清楚如何解决这个问题。
|