> 文档中心 > GD32F4xx适配OpenHarmony问题踩坑记录

GD32F4xx适配OpenHarmony问题踩坑记录


1.时钟配置导致的串口乱码

现象描述:

最新在适配GD32产品时,发现使用外部晶振时调试串口输出内容会出现乱码,使用内部晶振则不会出现这个问题。配置如下所示:
GD32F4xx适配OpenHarmony问题踩坑记录
后来研究了半天,发现GD32除了配置system_gd32f4xx.h中的时钟倍频宏外,还需要在gd32f4xx.h中配置外部晶振的频率宏HXTAL_VALUE为实际使用的值:
GD32F4xx适配OpenHarmony问题踩坑记录

原因分析

由于gd32的库默认的外部晶振频率为25MHz,而我们的硬件将外部晶振替换为了8MHz,故而导致这个问题。

2.Bootloader引导带系统的APP程序会导致系统崩溃

现象描述:

  1. 不使用Bootloader,直接烧录适配了OpenHarmony的APP程序能够正常运行。
  2. 使用BootLoader程序跳转至裸机APP程序,裸机APP程序可以正常运行。
  3. 使用BootLoader程序跳转至适配了OpenHarmony的APP程序,APP程序运行崩溃。

原因分析:

BootLoader与APP程序是两个独立的工程,在编译Bootloader时,携带了编译参数:
-mfpu=fpv4-sp-d16 和 -mfloat-abi=hard,该编译参数会导致FPU宏浮点运算单元开启。而APP适配OpenHarmony时,没有添加该参数,从而导致系统崩溃。
GD32F4xx适配OpenHarmony问题踩坑记录
从liteos_m内核中可以看出,是否开启浮点单元,会影响中断、上下文切换的结构体定义,从而影响整个系统的正常调度运行。
GD32F4xx适配OpenHarmony问题踩坑记录
之后测试BootLoader在跳转至APP前,将浮点单元关闭,程序也能够正常运行。
在APP适配OpenHarmony时添加浮点编译选项,亦可以正常运行。

结论

浮点单元编译选项的开启关闭,BootLoader与APP需要保持一致。

游戏市场