【发布时间】:2015-02-17 17:33:34
【问题描述】:
在嵌入式系统上,我有一个为每个端口提供特定调用的库,例如__PORTA_ENABLE(pin)、__PORTB_ENABLE(pin)、__PORTn__WRITE(pin, val)、__PORTn_TIMERm(pin, 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_ENABLE(int port, int pin) 这样的调用,显然这将是微不足道的,但他们没有,所以我坐在这里。有没有一种优雅的方法可以将它抽象出来并防止它膨胀成 300 行、无法维护的大量复制意大利面?
【问题讨论】:
-
你为什么不能自己写
GPIO_ENABLE? -
@isaach1000 主要是时间限制:我正在尝试完善代码,并且抽象层非常复杂(11 MB 的 C 代码),以便可以移植到同一芯片中的许多不同芯片家庭;我更喜欢使用 API 定义的调用来保持这种可移植性。
-
我的意思是把你自己的实用函数写成静态函数或其他东西,这样你就只在需要的地方使用它。我不建议您添加到原始 API。
-
那么你的问题是什么?如何将一堆常见/重复的代码提取到一个函数中?
标签: embedded abstraction