引脚映射代码

Las*_*sse 0 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
....
Run Code Online (Sandbox Code Playgroud)

共有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);
}
Run Code Online (Sandbox Code Playgroud)

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

Jab*_*cky 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]);
}
Run Code Online (Sandbox Code Playgroud)

而顺便说一句:在你的原始功能中,可能return之前有一个缺失adc_get_channel_value.