C 处理器字大小?8位处理器=8位字?

C 处理器字大小?8位处理器=8位字?,c,word,atomic,C,Word,Atomic,我想如果我有一个AVR 8位微控制器,字号是8位/1字节?但在数据表中指出,大多数AVR处理器都有一个16位字。但它并没有说特定的处理器有这个功能。在特定的数据表中一般地陈述一些东西是很奇怪的 但是,如果不是字长,那么8位、32位MCU是关于什么的呢 如果wordsize=2字节,则这是C右侧的原子: U16位 位置=1000 但是如果字是1字节,我应该在写入这个变量时禁用中断(中断使用这个变量)? 禁用中断的速度有多慢?传统的AVR系列(即ATtiny、ATmega、ATxmega,而不是AV

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

但是,如果不是字长,那么8位、32位MCU是关于什么的呢

如果wordsize=2字节,则这是C右侧的原子: U16位

位置=1000

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

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

不幸的是,对于什么是“词”还没有一个公认的定义。在本文中,我怀疑作者只是将16位值称为单词,而不是8位字节或32位双字

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

临时禁用中断的速度相当快,CLI/SEI指令每个中断周期一次。某些编译器(我想到的是ImageCraft)的一个问题是,在函数中使用这样的内联汇编可能会禁用优化,因此实际成本可能会更高。考虑只禁用有争议的中断,以避免这个问题,并减少等待时间。
请注意,与其他一些MCU不同,原子位访问通常仅限于最低I/O端口范围内的一小部分寄存器,通常为几个端口和通用寄存器。

现代64位CPU的寄存器甚至有256位宽的字(AVX寄存器),但实际上有一些32位CPU的寄存器有128位宽的寄存器。(MMX,至今仍在使用)。CPU的位数与参考字的宽度几乎没有关系,更重要的是,当针对不同的寄存器时,您的“字”可以有不同的最佳大小,MMX与AVX。这是一个简单的例子,在现代CPU中,两者都有,它们的字大小也不同。你应该阅读制造商文档,这是唯一能告诉你你需要知道的东西。你应该阅读生成的代码来解决这个问题,或者(更好的)搜索平台特定的原子指令信息。假设单个RAM移动是原子的是不安全的。您应该有一个专门用于微控制器的
stdint.h
文件,该文件包含
typedef
的数据类型,以便更容易了解它们的位宽度。