pico-sdk(八)-程序架构之自定义预处理变量

pico-sdk(八)-程序架构之自定义预处理变量

SDK可以使用编译时定义来配置库的行为和功能,能够对那些不太可能在运行时更改的配置(例如物理引脚)进行设置。这样做可以生成更小、更高效的代码,能够避免额外的运行时开销且不会包含实际上不会使用的配置代码(例如,当仅需要使用I2S1时,却不得不包含了PWM音频支持)!

由于使用了INTERFACE库,导致所有的应用程序在构建时会将依赖的库的源代码进行构建,因此,对于同一应用程序,可以构建具有不同内置行为的多个版本。

预处理器变量可以通过多种方式指定,具体内容将在以下各节中描述。

是否支持编译时配置或运行时配置或两者兼有,取决于特定库本身。然而,一般的理念是允许在用户未指定任何设置(超出板级配置提供的设置之外)的情况下实现合理的默认行为。

Board 配置文件中的预处理变量

许多常见的配置设置与实际所使用的特定RP系列微控制器板有关,包括各种SDK库的默认引脚设置。可以通过PICO_BOARD CMake变量来指定使用的板子型号,该变量可以通过CMake命令行或环境变量设置。

板子配置提供了一个头文件,如果未另行指定,则该头文件指定了默认值;例如,pico.h 头文件中指定了这些默认设置。

#ifndef PICO_DEFAULT_LED_PIN
#define PICO_DEFAULT_LED_PIN 25
#endif

通过设置 PICO_BOARD=my_board_name,头文件 my_board_name.h 将被所有其他SDK头文件包含。这样开发人员就可以创建自己的板子头文件。

CMake 中的预处理变量

可以通过修改应用程序的 CMakeListst.txt 中的 target_compile_definitions 来指定使用一组不同的 UART2 引脚。

修改后的hello_world CMakeLists.txt指定了不同的UART引脚。

add_executable(hello_world
  hello_world.c
)
# SPECIFY two preprocessor definitions for the target hello_world
target_compile_definitions(hello_world PRIVATE
  PICO_DEFAULT_UART_TX_PIN=16
  PICO_DEFAULT_UART_RX_PIN=17
)
# Pull in our pico_stdlib which aggregates commonly used features
target_link_libraries(hello_world pico_stdlib)
# create map/bin/hex/uf2 file etc.
pico_add_extra_outputs(hello_world)

target_compile_definitions 设置了预处理器定义,这些定义将传递给目标 hello_world 中的每个源文件的编译器(正如前面提到的,这包括所有依赖的INTERFACE库的所有源文件)。PRIVATE3 是由CMake要求用来指定编译定义作用范围的。请注意,SDK使用的所有预处理器定义都有一个 PICO_ 前缀。


  1. I2S(Inter-IC Sound)是一种数字音频接口标准,用于集成电路之间的音频数据传输。它由Philips Semiconductors(现在的NXP Semiconductors)开发,并于1986年首次推出。I2S设计的初衷是为了简化音频设备之间的连接,尤其是在消费电子领域,如CD播放机、数字音频处理器、DAC(数模转换器)和ADC(模数转换器)等设备之间。 ↩︎

  2. UART(Universal Asynchronous Receiver-Transmitter)是一种常见的串行通信协议,用于在两个设备之间进行异步数据传输。UART广泛应用于嵌入式系统、计算机硬件、传感器网络和其他电子设备中,因为它简单且可靠。 ↩︎

  3. PRIVATEtarget_compile_definitions 命令中的一个作用域关键字,它决定了编译定义的作用范围。具体来说,PRIVATE 关键字表示这些编译定义仅对当前目标有效,不会传递给依赖该目标的其他目标。 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值