假设我的PCB带有插头连接器。其中一些引脚是模拟输入,称为A0-A15。这些引脚连接到MCU上的ADC输入,但为了简化布局任务,信号没有与索引一对一连接。因此,在我的电路板特定头文件中,我定义了引脚映射,其中BOARD_A0指的是板连接器上的输入A0,后跟MCU ADC的相应索引:
#define BOARD_A0 13
#define BOARD_A1 4
#define BOARD_A2 5
#define BOARD_A3 14
....
共有16个频道。我希望能够使用for循环转储所有通道值,因此我需要遍历整个映射并转换每个引脚。为此我有功能:
unsigned int adc_get_board_channel(int channel)
{
int adc_channel;
switch(channel) {
case 0:
adc_channel = BOARD_A0;
break;
case 1:
adc_channel = BOARD_A1;
break;
case 2:
adc_channel = BOARD_A2;
break;
case 3:
adc_channel = BOARD_A3;
break;
case 4:
adc_channel = BOARD_A4;
break;
....
}
adc_get_channel_value(ADC,adc_channel);
}
我无法想知道是否有更优雅的方法为这种引脚映射编写代码?
答案 0 :(得分:5)
是的,有:
unsigned int adc_get_board_channel(int channel)
{
static int boards[] =
{BOARD_A0, BOARD_A1, ..., BOARD_16}; // I let you take care of the typing
return adc_get_channel_value(ADC, boards[channel]);
}
而BTW:在您的原始函数中,return
之前可能会遗漏adc_get_channel_value
。