请教一个 C 语言的宏定义问题【AVR】

wsptr 2014-08-12 12:10:26
想写一个偷懒的宏定义,用于读取管脚值。

#define DIN PINA,1
#define READ_PIN(PIN,n) ((PIN&(1<<n))!=0)
uint8_t val;

如何写宏定义才能够用类似 val=READ_PIN(DIN); 的写法实现呢?
...全文
466 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
unsv29 2014-11-02
  • 打赏
  • 举报
回复
少用宏定义。 会什么不重要。知道不需要会什么比较重要。
mangoalx 2014-08-19
  • 打赏
  • 举报
回复
引用 9 楼 more607 的回复:
[quote=引用 4 楼 humingxin 的回复:] 定义: #define READ_PIN(port_data_reg,pin) ((uint8_t)((port_data_reg&(1<<pin))?1:0)) #define I2C_SDA_PORT (0x0xxxxx) #define I2C_SDA_PIN (0x00) 使用: uint8_t i2c_data = READ_PIN(I2C_SDA_PORT,I2C_SDA_PIN)
感觉这样比较规范[/quote] 是规范,示范程序也是这么用的。不过还是需要两个参数,两次定义。所以也忍不住想找更省事的办法。偷懒无下限
码农兼养猪 2014-08-19
  • 打赏
  • 举报
回复
引用 4 楼 humingxin 的回复:
定义: #define READ_PIN(port_data_reg,pin) ((uint8_t)((port_data_reg&(1<<pin))?1:0)) #define I2C_SDA_PORT (0x0xxxxx) #define I2C_SDA_PIN (0x00) 使用: uint8_t i2c_data = READ_PIN(I2C_SDA_PORT,I2C_SDA_PIN)
感觉这样比较规范
竹影半墙 2014-08-16
  • 打赏
  • 举报
回复
ST库
mangoalx 2014-08-14
  • 打赏
  • 举报
回复
这里主要是想只用一个参数去读,两个参数的话有改动就有两个预定义要去处理,还是嫌麻烦了些
mangoalx 2014-08-14
  • 打赏
  • 举报
回复
引用 6 楼 sunxingzhesun 的回复:
定义成结构体来读取管脚效果更好吧,也很偷懒
请给个例子说明
  • 打赏
  • 举报
回复
定义成结构体来读取管脚效果更好吧,也很偷懒
humingxin 2014-08-13
  • 打赏
  • 举报
回复
定义: #define READ_PIN(port_data_reg,pin) ((uint8_t)((port_data_reg&(1<<pin))?1:0)) #define I2C_SDA_PORT (0x0xxxxx) #define I2C_SDA_PIN (0x00) 使用: uint8_t i2c_data = READ_PIN(I2C_SDA_PORT,I2C_SDA_PIN)
mangoalx 2014-08-12
  • 打赏
  • 举报
回复
#define DIN (PINA&(1<<0)) #define READ_PIN(DIN) (DIN!=0) 这样怎么样?我没试过。
zhxianbin 2014-08-12
  • 打赏
  • 举报
回复
#define READ_PIN(val, PIN,n) val=((PIN&(1<<n))!=0)
qq_19407611 2014-08-12
  • 打赏
  • 举报
回复
.想写一个偷懒的宏定义,用于读取管脚值。 #define DIN PINA,1 #define READ_PIN(PIN,n) ((PIN&(1<<n))!=0) uint8_t val; 如何写宏定义才能够用类似 val=READ_PIN(DIN); 的写法实现呢?

27,375

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧