华大单片机驱动库文件编译出错问题说明以及有硬件浮点运算单元的MCU的keil工程配置参数

     今天在华大的官网上下载了 H C 32 F 460 HC32F460 HC32F460系列的芯片的驱动文件,如图1所示,然后用该驱动库文件新建完工程之后,编译有错误,错误如图2所示。这里主要都是图2中红圈中的错误,当然也有一些警告信息。这里的错误的大意就是变量的定义和声明不能位于执行语句的后面。但是我打开下载的驱动文件中华大官方自己的例子工程之后就就没有这种报错,也没有任何警告。

  华大单片机驱动库文件编译出错问题说明以及有硬件浮点运算单元的MCU的keil工程配置参数_第1张图片
图1.
  华大单片机驱动库文件编译出错问题说明以及有硬件浮点运算单元的MCU的keil工程配置参数_第2张图片
图2.

     最后我把我的 k e i l keil keil工程的 O p t i o n s f o r T a r g e t Options\quad for \quad Target OptionsforTarget选项框里面的参数和官方的例子的相应参数做了对比之后,我发现了原因如图3所示。我这里出现如2中红圈中的错误时因为没有勾选 C 99 M o d e C99\quad Mode C99Mode选项。C99是一个在1999年建立的 C C C语言标准,这里如果没有勾选 C 99 M o d e C99\quad Mode C99Mode选项话,那编译器在编译的时候可能就是按照新的 C C C语言标准去编译的,这样也就说明了华大官方的这个驱动库文件不符合新的 C C C语言标准。官方的例子工程编译之后没有警告信息是因为它在 O p t i o n s f o r T a r g e t Options\quad for \quad Target OptionsforTarget选项框里面配置了编译器选项 − − d i a g _ s u p p r e s s = 186 , 66 --diag\_suppress=186,66 diag_suppress=186,66,如图3所示,这个编译器选项的意思就是屏蔽错误代码为十进制数186和66的警告,从图2中我们可以看到这里的警告信息的错误代码为66。关于具体的错误和警告信息对应的数字编码可以参考这里。

  华大单片机驱动库文件编译出错问题说明以及有硬件浮点运算单元的MCU的keil工程配置参数_第3张图片
图3.

     还有就是我目前接触的通用 M C U MCU MCU型号不是很多,在上面的调试过程中我发现了一个以前在其它型号的芯片,比如 S T M 32 F 103 Z E T 6 , M 3 的 核 STM32F103ZET6,M3的核 STM32F103ZET6,M3,没有看到过的 K E I L KEIL KEIL软件里面的 O p t i o n s f o r T a r g e t Options\quad for \quad Target OptionsforTarget选项框里面的参数配置选项, F l o a t i n g P o i n t i n g H a r d w a r e Floating\quad Pointing\quad Hardware FloatingPointingHardware,如图4所示。这个参数配置选项只有在具有硬件浮点单元, F P U FPU FPU,的芯片里面才会有。你用 K E I L KEIL KEIL软件打开 H C 32 F 460 , M 4 的 核 HC32F460,M4的核 HC32F460,M4系列芯片的工程后,在如图4所示的位置就可以发现该选项,但是你用 K E I L KEIL KEIL软件打开 S T M 32 F 103 Z E T 6 , M 3 的 核 STM32F103ZET6,M3的核 STM32F103ZET6,M3的工程后就不会发现该选项。另外该选项是有下拉框的,下拉框的内容根据芯片的不同,下拉框的内容也会有所不同。总的来说就是,如果下拉框的内容是 N o t U s e d Not\quad Used NotUsed,就是告诉编译器不使用硬件浮点运算单元,如果程序代码中有浮点运算相关的运算的话会用软件去实现浮点运算,如果下拉框的内容不是 N o t U s e d Not\quad Used NotUsed而是其它选项,就是告诉编译器使用硬件浮点运算单元,如果程序代码中有浮点运算相关的运算的话会,编译器生成的代码中会包含了硬件浮点运算单元的指令,此时一般需要通过内核的 S C B SCB SCB模块的 C P A C R CPACR CPACR寄存器来开启硬件浮点单元。

     另外还要重点强调一下,对于以下三个选项的不同配置组合程序表现的情况会不同,有的配置下有可能会进入 H a r d F a u l t H a n d l e r HardFault\quad Handler HardFaultHandler,这里也算是一个很多人遇到的坑,我这里也没有完全理清它们之间的关系。你们可以看看这篇文章:STM32F4之FPU与float类型导致的HardFault调试记录

  • 勾选或不勾选 U s e M i c r o L I B Use\quad MicroLIB UseMicroLIB
  • F l o a t i n g P o i n t i n g H a r d w a r e Floating\quad Pointing\quad Hardware FloatingPointingHardware的下拉框配置为不同的值。
  • S C B SCB SCB模块的 C P A C R CPACR CPACR寄存器是否有被配置为开启硬件浮点单元。
  华大单片机驱动库文件编译出错问题说明以及有硬件浮点运算单元的MCU的keil工程配置参数_第4张图片
图4.

你可能感兴趣的:(嵌入式,嵌入式)