c - 是否可以将 char 中的位映射到 Short 中的任意位?

标签 c mapping microcontroller

我想知道是否有任何方法可以将较小变量的位任意映射到较大变量中的位。我认为通过示例我的问题会更容易理解。

如果我有一个 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

最佳答案

我认为您不能直接映射作业,这意味着:

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

关于c - 是否可以将 char 中的位映射到 Short 中的任意位?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12407735/

相关文章:

c - 为什么我们使用函数指针的结构?

c - 我怎样才能检查文件是否存在

c - C 中的结构字符串字段作为函数参数

javascript - 动态调整 D3 TopoJSON map 上的点大小

java - Hibernate View 映射

c - 微 Controller C 代码的单元测试模式

c - 如何打开一个新的 xterm 窗口并使用 fork-exec 调用在该窗口上运行命令? (仅限 C 程序)

c - 带有 char 数组参数的函数

hibernate - 使用额外列映射多对多关联表