最新在适配GD32产品时,发现使用外部晶振时调试串口输出内容会出现乱码,使用内部晶振则不会出现这个问题。配置如下所示:
后来研究了半天,发现GD32除了配置system_gd32f4xx.h
中的时钟倍频宏外,还需要在gd32f4xx.h
中配置外部晶振的频率宏HXTAL_VALUE
为实际使用的值:
由于gd32的库默认的外部晶振频率为25MHz,而我们的硬件将外部晶振替换为了8MHz,故而导致这个问题。
BootLoader与APP程序是两个独立的工程,在编译Bootloader时,携带了编译参数:
-mfpu=fpv4-sp-d16 和 -mfloat-abi=hard
,该编译参数会导致FPU宏浮点运算单元开启。而APP适配OpenHarmony时,没有添加该参数,从而导致系统崩溃。
从liteos_m内核中可以看出,是否开启浮点单元,会影响中断、上下文切换的结构体定义,从而影响整个系统的正常调度运行。
之后测试BootLoader在跳转至APP前,将浮点单元关闭,程序也能够正常运行。
在APP适配OpenHarmony时添加浮点编译选项,亦可以正常运行。
浮点单元编译选项的开启关闭,BootLoader与APP需要保持一致。