0

小さい変数のビットを大きい変数のビットに任意にマップする方法があるかどうか疑問に思っていました。私の質問は例で理解しやすいと思います。

16 ビットのレジスタ "PORTA" があり、次に 8 ビットの変数 OPT1 がある場合、次のように書き込めるようにしたいと考えています。

PORTA = 0x0000
OPT1 = 0xAB

そして、0x0A0B を含む PORTA になります。

ビットは、変数 OPT1 に書き込むだけで、次のように自動的にマップされます。

OPT1_bit0 => PORTA_bit0
OPT1_bit1 => PORTA_bit1
OPT1_bit2 => PORTA_bit2
OPT1_bit3 => PORTA_bit3

OPT1_bit4 => PORTA_bit8
OPT1_bit5 => PORTA_bit9
OPT1_bit6 => PORTA_bit10
OPT1_bit7 => PORTA_bit11
4

1 に答える 1

2

割り当てを直接マッピングすることはできないと思います。つまり、次のようになります。

OPT1 = 0xAB => PORTA = 0x0A0B

ただし、マクロを介してジョブを自動化できます。元:

static int PORTA = 0x0000;
#define OPT1(val) (PORTA = (val&0x0F)|((val&0xF0)<<4))

したがって、OPT1に「割り当て」を行うと、毎回正しくPORTAに移動します。

int main(int argc, char *argv[]) 
{
  OPT1(0xAB);
  printf("PORTA's value: %#x\n", PORTA);
  return 0;
}

mike@linux-4puc:~> ./a.out 
PORTA's value: 0xa0b
于 2012-09-13T14:09:08.377 に答える