引脚映射代码

时间:2018-02-05 16:47:50

标签: c embedded mapping

假设我的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);
}

我无法想知道是否有更优雅的方法为这种引脚映射编写代码?

1 个答案:

答案 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