Embedded 抽象掉重复的、不可交互的调用的最优雅的方法

Embedded 抽象掉重复的、不可交互的调用的最优雅的方法,embedded,abstraction,Embedded,Abstraction,在嵌入式系统上,我有一个为每个端口提供特定调用的库,例如uuu PORTA_ENABLEpin、uuu PORTB_ENABLEpin、uuu PORTn_uuwritepin、val、uuuuuu PORTn_TIMERmpin、period等等。我必须将组合端口A到D上的8个任意但预定义的管脚初始化为相同的状态,初始化每个端口大约需要30行。目前,我正在复制粘贴初始化块8次,如下所示: __PORTA_ENABLE(4); __PORTA_SETMODE(4, OUTPUT); __PORT

在嵌入式系统上,我有一个为每个端口提供特定调用的库,例如uuu PORTA_ENABLEpin、uuu PORTB_ENABLEpin、uuu PORTn_uuwritepin、val、uuuuuu PORTn_TIMERmpin、period等等。我必须将组合端口A到D上的8个任意但预定义的管脚初始化为相同的状态,初始化每个端口大约需要30行。目前,我正在复制粘贴初始化块8次,如下所示:

__PORTA_ENABLE(4);
__PORTA_SETMODE(4, OUTPUT);
__PORTA_TIMER_B_(4, 2000);
///... and so on
__PORTA_ENABLE(5);
__PORTA_SETMODE(5, OUTPUT);
__PORTA_TIMER_C_(5, 2000);
///... and so on
__PORTB_ENABLE(7);
__PORTB_SETMODE(7, OUTPUT);
__PORTB_TIMER_A_(7, 2000);
///... and so on
__PORTB_ENABLE(2);
__PORTB_SETMODE(2, OUTPUT);
__PORTB_TIMER_F_(2, 2000);
///... and so on

显然,如果抽象层的设计者使用像GPIO_ENABLEint port,int pin这样的调用,这将是微不足道的,但是他们没有,所以我坐在这里。有没有一种优雅的方法可以将其抽象出来,并防止其膨胀成300行、无法维护的大量复制面食?

使用令牌粘贴宏进行初始化,然后为每个pin分别调用它

宏定义了常用的初始化功能:

#define INIT_PIN(port, pin, timer) \
    __PORT ## port ## _ENABLE(pin);          \
    __PORT ## port ## _SETMODE(pin, OUTPUT); \
    __PORT ## port ## _TIMER_ ## timer ## _(pin, 2000);
然后,特定于pin的初始化为:

INIT_PIN(A, 4, B);
INIT_PIN(A, 5, C);
INIT_PIN(B, 7, A);
INIT_PIN(B, 2, F);

为什么你不能自己编写GPIO_ENABLE呢?@isaach1000主要是时间限制:我正在尝试整理代码,抽象层是非常复杂的11MB C代码,以便可以移植到同一家族中的许多不同芯片上;我更喜欢使用API定义的调用来维护这种可移植性,我的意思是,只需将自己的实用程序函数作为静态函数或其他东西编写,以便只在需要的地方使用它。我不是建议您添加到原始API中。那么您的问题是什么呢?如何将一堆常见/重复的代码提取到函数中?