中级会员
 
- 积分
- 389
- 金钱
- 389
- 注册时间
- 2019-4-25
- 在线时间
- 74 小时
|
2金钱
本帖最后由 cook 于 2020-8-13 10:28 编辑
这样子编译没有问题
//#define TM1650_SDAIN_L(y) {GPIOB->CRL&=(~((u32)15<<(y*4)));GPIOB->CRL|=((u32)8<<(y*4));} //上下拉1000
//#define TM1650_SDAOUT_L(y) {GPIOB->CRL&=(~((u32)15<<(y*4)));GPIOB->CRL|=((u32)3<<(y*4));} //推挽0011
#define TM1650_SDAIN_H(y) ({GPIOB->CRH&=(~((u32)15<<((y)*4)));GPIOB->CRH|=((u32)8<<((y)*4));})
#define TM1650_SDAOUT_H(y) ({GPIOB->CRH&=(~((u32)15<<((y)*4)));GPIOB->CRH|=((u32)3<<((y)*4));})
//#define SDA_IN(x) ((x<8)?(TM1650_SDAIN_H(x)) : (TM1650_SDAIN_H(x-8)))
//#define SDA_OUT(x) ((x<8)?(TM1650_SDAOUT_H(x)) : (TM1650_SDAOUT_H(x-8)))
#define SDA_IN(x) ((x<8)?(x-1) : (x = 8))
#define SDA_OUT(x) ((x<8)?(x-1) : (x = 8))
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
这样编译就报错,显示SDA_IN(x)和SDA_OUT(x)表达有误
HARDWARE\tm1650.c(58): error: #29: expected an expression
#define TM1650_SDAIN_H(y) ({GPIOB->CRH&=(~((u32)15<<((y)*4)));GPIOB->CRH|=((u32)8<<((y)*4));})
#define TM1650_SDAOUT_H(y) ({GPIOB->CRH&=(~((u32)15<<((y)*4)));GPIOB->CRH|=((u32)3<<((y)*4));})
#define SDA_IN(x) ((x<8)?(TM1650_SDAIN_H(x)) : (TM1650_SDAIN_H(x-8)))
#define SDA_OUT(x) ((x<8)?(TM1650_SDAOUT_H(x)) : (TM1650_SDAOUT_H(x-8)))
有大佬能解答一下吗?
|
|