【发布时间】:2021-01-28 07:26:50
【问题描述】:
我想连接一个字符串和一个整数(枚举)来寻址嵌入式系统项目中的端口/引脚。 端口被命名:
M1_MS1_GPIO_Port
M2_MS1_GPIO_Port
M2_MS1_GPIO_Port
... 并且引脚被相应地命名
M1_MS1_GPIO_Pin
M2_MS1_GPIO_Pin
M2_MS1_GPIO_Pin
...
现在我想要一个获取数字并调用 GPIO_Write 函数的函数。 我尝试了类似的东西
#define SETMS1(NUMBER) (HAL_GPIO_WritePin(M##NUMBER##_GPIO_Port ...)
void set_MS1( int M )
{
SETMS1( M );
}
但是 M 没有被解析为一个数字。有没有办法做到这一点?
【问题讨论】:
-
几乎没有人在 SO 上发布此类问题,并设法为 GPIO 编写了一个合理的抽象层。所以我的建议只是不要 - 并且放弃ST bloatware。只需直接访问端口寄存器,这与 C 代码的可读性差不多,而且大多数添加抽象的尝试只会使代码变得更糟。
-
同意@Lundin,与硬件相关的抽象倾向于使代码更便携,但也很臃肿。根据我的经验,这不值得,代码变得太棘手了。
标签: c macros concatenation preprocessor