• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

wb-code

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

宏定义的高级应用

#define KEY3_PORT				GPIOE
#define KEY3_PIN				GPIO_Pin_1
#define KEY3_EXTI_PORTSOURCE	EXTI_PortSourceGPIOE 
#define KEY3_EXTI_PINSOURCE		EXTI_PinSource1
#define KEY3_EXTI_Line			EXTI_Line1
#define KEY4_PORT				GPIOE
#define KEY4_PIN				GPIO_Pin_0
#define KEY4_EXTI_PORTSOURCE	EXTI_PortSourceGPIOE 
#define KEY4_EXTI_PINSOURCE		EXTI_PinSource0
#define KEY4_EXTI_Line			EXTI_Line0

上面这一部分可以使用下面的宏定义新形式替换:

#define KEY_DEFINE(n,PORT,PIN) \
static	GPIO_TypeDef * key##n##_port=GPIO##PORT; \
static	uint16_t	   key##n##_pin =GPIO_Pin_##PIN; \
static  uint8_t		   key##n##_exti_port_src=EXTI_PortSourceGPIO##PORT; \
static  uint8_t		   key##n##_exti_pin_src =EXTI_PinSource##PIN; \
static	uint32_t	   key##n##_exti_line=EXTI_Line##PIN;
KEY_DEFINE(3,E,1)
KEY_DEFINE(4,E,0)

程序中的\是续行符,用与将一行过长的宏定义分成多行书写,提高代码的可读性。使用\的注意事项;\之后不能有任何字符包空格和注释,
实际上这部分代码宏定义展开是这样的:
#define KEY_DEFINE(n,PORT,PIN) static GPIO_TypeDef * key##n##_port=GPIO##PORT; static uint16_t key##n##_pin =GPIO_Pin_##n; static uint8_t key##n##_exti_port_src=EXTI_PortSourceGPIO##PORT; static uint8_t key##n##_exti_pin_src =EXTI_PinSource##PIN; static uint32_t key##n##_exti_line=EXTI_Line##PIN;

使用宏定义KEY_DEFINE(3,E,1)
展开后:

static	uint16_t	   key3_pin =GPIO_Pin_1;
static  uint8_t		   key3_exti_port_src=EXTI_PortSourceGPIOE;
static  uint8_t		   key3_exti_pin_src =EXTI_PinSource1;
static	uint32_t	   key3_exti_line=EXTI_Line1;

posted on 2025-11-11 17:53  心事不在脸上  阅读(3)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3