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

时间:2013-12-09 14:45:48

标签: c word atomic

我想如果我有一个AVR 8位微控制器,则字数为8位/ 1字节?但在数据表中,它表​​明大多数AVR处理器都有16位字。但它没有说具体的处理器有这个。通常在特定的数据表中陈述一些内容很奇怪。

但是,如果不是字大小,8位32位MCU是什么?

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

位置= 1000;

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

1 个答案:

答案 0 :(得分:4)

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

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

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

暂时禁用中断非常快,每个都是CLI / SEI指令的循环。某些编译器的问题(ImageCraft浮现在脑海中)是在函数中使用这样的内联汇编可能会禁用优化,因此实际成本可能会更高一些。请考虑仅禁用相关争议中断以避免此问题并减少延迟。

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