打印

第一次用GD就碰到一个诡异的事情

[复制链接]
2154|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
hh312|  楼主 | 2017-5-25 23:13 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
第一块GD32F103RCT6样品,原来的代码在STM32上好好的,放到GD32上不能运行,花了一天一夜把网上所有关于GD的**都看了,没一点用。虽然我能用特殊的办法避开这个问题,但如果没有找到问题的根本原因,实在不安心,毕竟这是第一步,以后还有很远的路要走。如下图,我使用eclipse平台,GCC编译器,这是一段从Bootloader程序跳到APP程序的很简单的代码,左边是源程序,右边是反汇编。现在的问题是,运行到箭头所指的那一行后,再下一步就跳到 HardFault_Handler 去了。完全一样的操作,在STM32上没有问题。然后我仔细的测试了下,发现,如果不开优化或只开一级优化,没问题,优化开大了才有问题。或者,把代码开头那一句函数 InsureMotorControlMcuReady 的调用移到 BootApp 这个函数外(由于if的判断总是不成立,函数实际上也没运行到),也能解决问题。


下面再贴一段去掉开头函数调用的效果,这段代码就能正常运行。从图可以看到汇编变化很大,不过我是看不懂~~


在这个论坛里也有看到一些朋友说GD有些诡异的问题,我怀疑这个也属于诡异了,或者是GCC水土不服吧。
由于只是简单的一段Bootloader代码,经过检查可以确认不存在数组越界、指针乱指这类问题(还有什么可能的问题呢?),毕竟这段代码在STM32上已经出货几千套产品,还没发现异常。
沙发
shenmu2012| | 2017-5-26 20:52 | 只看该作者
这问题的我还没遇到过的

使用特权

评论回复
板凳
shenmu2012| | 2017-5-26 20:52 | 只看该作者
下去在插下这个gd芯片对照你哦这个代码的看看

使用特权

评论回复
地板
firstblood| | 2017-5-28 22:44 | 只看该作者
我原来在调试stm32的程序的时也遇到过这个HardFault_Handle的问题

使用特权

评论回复
5
firstblood| | 2017-5-28 22:45 | 只看该作者
这个吧工程代码的重新建立下的

使用特权

评论回复
6
youminlee| | 2017-6-1 09:46 | 只看该作者
问题有解决没

使用特权

评论回复
7
hh312|  楼主 | 2017-6-11 18:40 | 只看该作者

后来联系到了GD的技术员,告诉我在跳转前关掉全局中断就可以了,他说就算STM32可能也会出错,只是因为芯片有点差异,STM32刚好没有出错而已。
对我这种好学的人士来说,仅解决问题是不行的,我还要知道具体原因,可惜那位老大不说,我自己编个原因问他是不是,他也不说,只是强调STM32和GD多少有差别,STM32本来少一句关全局中断也是不行的。
好吧,于是我又问,如果这里关了全局中断,是否到APP那里要重新打开,因为我是做产品的,代码不能随便动,如果仅仅关掉某个中断,我就不用去改APP程序嘛。结果那位大哥回复说:APP是否要开全局中断,根据实际需要而定。
好吧,我还是自己来,我找出BootLoader里所有已经打开的中断,然后全部在跳转前关掉。
最后结论:还是不知道为什么会出现这个问题。

使用特权

评论回复
8
michael8908| | 2017-6-11 21:06 | 只看该作者
不能开高优化等级的问题我是遇到过的,都是与自己的编码有关。至于GD技术支持说芯片差异,需要关中断的解决方法,是否是根本所在,就不知道了。

你可以试试这样操作,将所有C代码变量都加上volatile关键字修饰,然后再开各种优化等级编译运行,如果没有问题了,那就是你编码问题,和GD芯片没有半毛钱关系。是否如此,可以试一试。

使用特权

评论回复
9
jekey| | 2017-6-11 21:21 | 只看该作者
在跳转前关中断应该是正确的。因为app的中断入口移植与bootloader不一致,如果在跳转过程中,发生中断,中断返回就会导致异常。

使用特权

评论回复
10
comeon201208| | 2017-6-13 21:43 | 只看该作者
右边直接看汇编的不好看的

使用特权

评论回复
11
comeon201208| | 2017-6-13 21:43 | 只看该作者
我现在开发调试还没到那个水平的

使用特权

评论回复
12
zhangbo1985| | 2017-6-15 22:25 | 只看该作者
两者之间肯定是有一些差异的,注意下

使用特权

评论回复
13
zhangbo1985| | 2017-6-15 22:26 | 只看该作者
从stm32mcu移植到gd32mcu上的,固件库的都不一样的

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

42

帖子

1

粉丝