Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 将2字节变量分配给3字节寄存器?_C - Fatal编程技术网

C 将2字节变量分配给3字节寄存器?

C 将2字节变量分配给3字节寄存器?,c,C,我的看门狗计时器有一个默认值0x0fffff,我想在其中写入一个2字节的变量(u2比较)。当我像这样简单地赋值时会发生什么 wdt_register = compare; 寄存器的最高有效字节会发生什么变化 寄存器定义。它是3字节寄存器,包含H、M、L 8位寄存器。4不使用H的最有效位,然后它实际上是一个20位寄存器。数据表将它们全部命名为WDTCR_20 我的问题是,当我使用这一行向寄存器赋值时会发生什么情况(只是一个2字节值写入3字节寄存器的示例): WDT是一个所谓的特殊函数寄存器。在硬

我的看门狗计时器有一个默认值
0x0fffff
,我想在其中写入一个2字节的变量(u2比较)。当我像这样简单地赋值时会发生什么

wdt_register = compare;
寄存器的最高有效字节会发生什么变化

寄存器定义。它是3字节寄存器,包含H、M、L 8位寄存器。4不使用H的最有效位,然后它实际上是一个20位寄存器。数据表将它们全部命名为WDTCR_20

我的问题是,当我使用这一行向寄存器赋值时会发生什么情况(只是一个2字节值写入3字节寄存器的示例):


WDT是一个所谓的特殊函数寄存器。在硬件中,它可能是三个字节,也可能是四个字节,其中一些是固定的/只读的/未使用的。如果SFR是以特定的方式声明的,从而使编译器发出特定于SFR的写入指令,那么编译器的写入实现本身就依赖于实现

这有效地使任务执行的结果相互依赖;高8位可能最终被丢弃,可能会设置一些其他微体系结构标志,或者如果它们没有设置为特定值(可能为全零值),可能会导致陷阱/崩溃。这取决于处理器的数据表(因为您没有提到处理器/工具链,所以我们不确切知道)

例如,基于AVR的atmega328p数据表显示了此类寄存器的示例:


在这种情况下,单字节寄存器实际上只有三位(位7..3在读取时固定为零,在写入时忽略,很可能没有与之相关的物理触发器或SRAM单元)。

您的WDT是一个所谓的特殊功能寄存器。在硬件中,它可能是三个字节,也可能是四个字节,其中一些是固定的/只读的/未使用的。如果SFR是以特定的方式声明的,从而使编译器发出特定于SFR的写入指令,那么编译器的写入实现本身就依赖于实现

这有效地使任务执行的结果相互依赖;高8位可能最终被丢弃,可能会设置一些其他微体系结构标志,或者如果它们没有设置为特定值(可能为全零值),可能会导致陷阱/崩溃。这取决于处理器的数据表(因为您没有提到处理器/工具链,所以我们不确切知道)

例如,基于AVR的atmega328p数据表显示了此类寄存器的示例:


在这种情况下,单字节寄存器实际上只有三位(在读取时位7..3固定为零,在写入时忽略,很可能没有与之相关的物理触发器或SRAM单元)。

变量不是寄存器。什么样的系统有三字节寄存器?您能澄清一下吗?
wdt\u register
的声明是什么?请使用您正在使用的工具链以及目标处理器和目标环境更新您发布的问题,以帮助其他可能看到您的问题的人。请参阅变量不是寄存器。什么样的系统有三字节寄存器?您能澄清一下吗?
wdt\u register
的声明是什么?请使用您正在使用的工具链以及目标处理器和目标环境更新您发布的问题,以帮助其他可能看到您的问题的人。看见
WDTCR_20 = 0x1234;