查看: 428|回复: 12
收起左侧

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

[复制链接]

8

主题

36

帖子

118

积分

中级技术员

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


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


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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

74

主题

3766

帖子

1万

积分

资深工程师

发表于 2017-5-26 20:52 | 显示全部楼层 |返回版面
这问题的我还没遇到过的

74

主题

3766

帖子

1万

积分

资深工程师

发表于 2017-5-26 20:52 | 显示全部楼层 |返回版面
下去在插下这个gd芯片对照你哦这个代码的看看

86

主题

3950

帖子

1万

积分

资深工程师

发表于 2017-5-28 22:44 | 显示全部楼层 |返回版面
我原来在调试stm32的程序的时也遇到过这个HardFault_Handle的问题

86

主题

3950

帖子

1万

积分

资深工程师

发表于 2017-5-28 22:45 | 显示全部楼层 |返回版面
这个吧工程代码的重新建立下的

3

主题

90

帖子

270

积分

中级技术员

发表于 2017-6-1 09:46 | 显示全部楼层 |返回版面
问题有解决没

8

主题

36

帖子

118

积分

中级技术员

 楼主| 发表于 2017-6-11 18:40 | 显示全部楼层 |返回版面

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

6

主题

21

帖子

63

积分

初级技术员

发表于 2017-6-11 21:06 | 显示全部楼层 |返回版面
不能开高优化等级的问题我是遇到过的,都是与自己的编码有关。至于GD技术支持说芯片差异,需要关中断的解决方法,是否是根本所在,就不知道了。

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

2

主题

103

帖子

573

积分

高级技术员

发表于 2017-6-11 21:21 | 显示全部楼层 |返回版面
在跳转前关中断应该是正确的。因为app的中断入口移植与bootloader不一致,如果在跳转过程中,发生中断,中断返回就会导致异常。

68

主题

3532

帖子

1万

积分

资深工程师

发表于 2017-6-13 21:43 | 显示全部楼层 |返回版面
右边直接看汇编的不好看的

68

主题

3532

帖子

1万

积分

资深工程师

发表于 2017-6-13 21:43 | 显示全部楼层 |返回版面
我现在开发调试还没到那个水平的

28

主题

1233

帖子

3709

积分

中级工程师

发表于 2017-6-15 22:25 | 显示全部楼层 |返回版面
两者之间肯定是有一些差异的,注意下

28

主题

1233

帖子

3709

积分

中级工程师

发表于 2017-6-15 22:26 | 显示全部楼层 |返回版面
从stm32mcu移植到gd32mcu上的,固件库的都不一样的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

分享 快速回复 返回顶部 返回列表