首先说一下我遇上的情况。我的工程代码是从别人那考的原程序,编译环境是Keil5,下载方式用的是SW。工程copy过来直接编译出现:
..\HARDWARE\ADC\Adc_Init.c(34): error: #167: argument of type "dma_parameter_struct" is incompatible with parameter of type "dma_parameter_struct *"
RTE\Device\GD32F103CB\gd32f10x_bkp.c(219): error: #147-D: declaration is incompatible with "FlagStatus bkp_flag_get(void)" (declared at line 222 of "D:\Keil_v5\ARM\PACK\GigaDevice\GD32F10x_DFP\2.0.1\Device\Firmware\Peripherals\inc\gd32f10x_bkp.h")
RTE\Device\GD32F103CB\gd32f10x_dbg.c(38): error: #20: identifier "DBG_CTL0" is undefined
以上错误有32多条。
由于GD片子我一开始不是很熟悉,这些错误直接是配置文件里的,我也没法修改。于是我在百度中盲目搜索关于GD32环境移植有关的内容。最后发现问题出在这里:之前我Copy的程序用的兼容包GD32F10x_AddOn_V2.0.0_KEIL插件.而现在电脑里装的是GD32F10x_AddOn_V2.0.1_KEIL插件。两个之间是否存在直接关系,于是我找到工程文件下的RTE文件夹,直接将其中的Device删除。Keil会有一个提醒,直接确定不管它。左边文件目录出现很多感叹号。
后面是重点,重新再次配置manage Run-Time Environment。(魔术棒右边绿色的),这里打开一下点击OK,Keil又会给出提醒。不用管,这样会发现感叹号重新消失。我的理解是环境配置正常了。于是直接编译。
未定义和申明错误的问题直接解决,只剩下这个错误
..\HARDWARE\ADC\Adc_Init.c(165): error: #167: argument of type "dma_parameter_struct" is incompatible with parameter of type "dma_parameter_struct *"
革命即将胜利,
这里存在结构体冲突还是怎滴,于是我将dma_init(DMA0, DMA_CH0, dma_data_parameter);修改为
dma_init(DMA0, DMA_CH0, &dma_data_parameter);问题完美解决。编译通过。
下载程序后我发现SW找不到单片机,于是通过J-link直接修改与GD32类似的单片机型号,问题解决。
下载之后程序正常运行。
以上是我遇上的GD32移植环境问题,希望有点帮助。
|