第一块GD32F103RCT6样品,原来的代码在STM32上好好的,放到GD32上不能运行,花了一天一夜把网上所有关于GD的**都看了,没一点用。虽然我能用特殊的办法避开这个问题,但如果没有找到问题的根本原因,实在不安心,毕竟这是第一步,以后还有很远的路要走。如下图,我使用eclipse平台,GCC编译器,这是一段从Bootloader程序跳到APP程序的很简单的代码,左边是源程序,右边是反汇编。现在的问题是,运行到箭头所指的那一行后,再下一步就跳到 HardFault_Handler 去了。完全一样的操作,在STM32上没有问题。然后我仔细的测试了下,发现,如果不开优化或只开一级优化,没问题,优化开大了才有问题。或者,把代码开头那一句函数 InsureMotorControlMcuReady 的调用移到 BootApp 这个函数外(由于if的判断总是不成立,函数实际上也没运行到),也能解决问题。
下面再贴一段去掉开头函数调用的效果,这段代码就能正常运行。从图可以看到汇编变化很大,不过我是看不懂~~
在这个论坛里也有看到一些朋友说GD有些诡异的问题,我怀疑这个也属于诡异了,或者是GCC水土不服吧。
由于只是简单的一段Bootloader代码,经过检查可以确认不存在数组越界、指针乱指这类问题(还有什么可能的问题呢?),毕竟这段代码在STM32上已经出货几千套产品,还没发现异常。
|