利用预编译实现编译调节界定

预编译

很好理解,包含#ifdef、#ifndef等关键字,面向编译器,使其根据条件选择性地编译或放弃部分代码

预编译实现环境界定

写库函数时,利用条件预编译可以界定环境、避免后续调用错误的库
写嵌入式驱动时,利用条件预编译,可以避免让用户手动添加大部分环境内容
在stm32相关库中,可以按照以下模板编写

#ifdef __CODEVISIONAVR__  //环境定义
/*操作*/
#elif defined(__GNUC__) && !defined(USE_HAL_DRIVER)//标准库
/*操作*/

#elif defined(USE_HAL_DRIVER)
/*操作*/

#endif

最近的一次编程中,使用的环境界定如下


#ifdef defined(__GNUC__) && !defined(USE_HAL_DRIVER) //编译器定义
#pragma GCC diagnostic ignored "-Wunused-function" /* Disable 'unused function' warning */
#elif defined(USE_HAL_DRIVER)
    #include "main.h"
    #ifdef STM32F0
        #include "stm32f0xx_hal.h"       /* Import HAL library */
    #elif defined(STM32F1)
        #include "stm32f1xx_hal.h"       /* Import HAL library */
    #elif defined(STM32F2)
        #include "stm32f2xx_hal.h"       /* Import HAL library */
    #elif defined(STM32F3)
        #include "stm32f3xx_hal.h"       /* Import HAL library */
    #elif defined(STM32F4)
        #include "stm32f4xx_hal.h"       /* Import HAL library */
    #elif defined(STM32F7)
        #include "stm32f7xx_hal.h"       /* Import HAL library */
    #elif defined(STM32G0)
        #include "stm32g0xx_hal.h"       /* Import HAL library */
    #elif defined(STM32G4)
        #include "stm32g4xx_hal.h"       /* Import HAL library */
    /* ------------ Check High Performance series ------------ */
    #elif defined(STM32H7)
        #include "stm32h7xx_hal.h"       /* Import HAL library */
    /* ------------ Check Ultra low power series ------------- */
    #elif defined(STM32L0)
        #include "stm32l0xx_hal.h"       /* Import HAL library */
    #elif defined(STM32L1)
        #include "stm32l1xx_hal.h"       /* Import HAL library */
    #elif defined(STM32L5)
        #include "stm32l5xx_hal.h"       /* Import HAL library */
    #elif defined(STM32L4)
        #include "stm32l4xx_hal.h"       /* Import HAL library */
    #elif defined(STM32H7)
        #include "stm32h7xx_hal.h"       /* Import HAL library */
    #else
    #endif /* STM32F1 */
    #if defined ( __ICCARM__ ) /* ICCARM Compiler */
    #pragma diag_suppress=Pe177   /* Disable 'unused function' warning */
    #elif defined   (  __GNUC__  ) /* GNU Compiler */
    #pragma diag_suppress 177     /* Disable 'unused function' warning */
    #endif /* __ICCARM__ */
#else
    #error Chip || Library not supported
#endif

定时函数界定

编写驱动、组件时,用户往往会因为定时器资源的调用、复用耽误很多功夫,可以参考以下内容进行定时器调用相关函数(以获取计时数为例)

#ifdef GetTime//定时函数定义
    #ifdef __CODEVISIONAVR__//默认编译器
        #define GetTime() 0
    #elif defined(__GNUC__) && !defined(USE_HAL_DRIVER)//标准库情况下
        #define GetTime() 0
    #elif defined(USE_HAL_DRIVER)//hal库情况下
        #define GetTime() HAL_GetTick() //视情况而定,默认设置为滴答定时器计时
    
    #else
    #endif
#endif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值