Мне интересно, есть ли лучший способ реализации этого кода:
if (strcmp(port_p, all_ports_a[inc++]) == 0)
{
#ifdef GPIOA
HAL_GPIO_WritePin(GPIOA, all_pins_a[offset] , atoi(args[OFF_VALUE_WRITE]));
SER_send("Value written\r", strlen("Value written\r"));
return 1;
#endif
//b
}else if (strcmp(port_p, all_ports_a[inc++]) == 0){
#ifdef GPIOB
HAL_GPIO_WritePin(GPIOB, all_pins_a[offset] , atoi(args[OFF_VALUE_WRITE]));
SER_send("Value written\r", strlen("Value written\r"));
return 1;
#endif
//c
}else if (strcmp(port_p, all_ports_a[inc++]) == 0){
#ifdef GPIOC
HAL_GPIO_WritePin(GPIOC, all_pins_a[offset] , atoi(args[OFF_VALUE_WRITE]));
SER_send("Value written\r", strlen("Value written\r"));
return 1;
#endif
//etc.
особенно эта часть:
#ifdef GPIOA
HAL_GPIO_WritePin(GPIOA, all_pins_a[offset] , atoi(args[OFF_VALUE_WRITE]));
SER_send("Value written\r", strlen("Value written\r"));
return 1;
#endif
я хочу заменить это макросом, что-то как:
MY_MACRO (GPIOx, MESSAGE):
#ifdef GPIOx
HAL_GPIO_WritePin(GPIOx, all_pins_a[offset] , atoi(args[OFF_VALUE_WRITE]));
SER_send(MESSAGE, MESSAGE);
return 1;
#endif
Я знаю, что мы не можем добавить #ifdef в макрос, но, возможно, я что-то пропустил? Одна строка вместо 5 была бы очень хороша!
Спасибо!
AJT