gpt4 book ai didi

c - 处理器字长? 8 位处理器 = 8 位字?

转载 作者:行者123 更新时间:2023-12-05 01:29:34 25 4
gpt4 key购买 nike

我想如果我有一个 AVR 8 位微 Controller ,字长是 8 位/1 字节?但是在数据表中它指出大多数 AVR 处理器都有一个 16 位的字。但它并没有说特定的处理器有那个。在特定的数据表中一般地陈述一些东西很奇怪。

但是,如果这不是字长,那么 8 位、32 位 MCU 是什么?

如果 wordsize = 2 字节,那么这在 C 中是原子的:
U16位置;

位置 = 1000;

但是如果这个字是 1 个字节,我应该在写入这个变量时禁用中断(中断使用这个变量)?
禁用中断有多慢?

最佳答案

传统的 AVR 系列(即 ATtiny、ATmega、ATxmega,而不是 AVR32)是在 8 位寄存器/累加器上工作的 8 位 MCU,尽管有一些 16 位指令,例如通过地址对处理指针时。

不幸的是,对于“词”是什么,没有普遍接受的定义。在这种情况下,我怀疑作者只是将 16 位值称为一个字,而不是 8 位字节或 32 位双字。

因此,不,您不能指望以原子方式访问 16 位变量。值得庆幸的是,一些最重要的 I/O 寄存器(例如定时器)具有内部锁存器来隐藏这一事实,但您确实需要小心与中断共享的 RAM 变量。

临时禁用中断非常快,每个 CLI/SEI 指令一个周期。某些编译器(想到 ImageCraft)的一个问题是,在函数中使用这样的内联汇编可能会禁用优化,因此实际成本可能会更高。考虑仅禁用有争议的中断以避免此问题并减少延迟。

请注意,与其他一些 MCU 不同,原子位访问通常仅限于最低 I/O 端口范围内的一小部分寄存器,通常是一些端口和通用寄存器。

关于c - 处理器字长? 8 位处理器 = 8 位字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20473434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com