8位微控制器可以使用32位整数吗? (反之亦然)[重复]

问题描述 投票:-1回答:2

我真的很想知道数据表的关系,以及它如何改变编程层面的工作方式,

据我所知,uC中的8位是ADC的分辨率高达256个值,可以对信号进行采样,越高,采样信号的精度就越高......

这会影响代码吗? (代码上的所有内容都是32位吗?)

每当我在32位uC中声明一个int时,我实际上使用的是int32吗?还是int8?

c embedded microcontroller
2个回答
4
投票

8位微控制器可以使用32位整数吗?

简短的回答是肯定的

当一个微控制器被称为8位时,意味着内部寄存器是8位,并且算术单元以8位数运行。因此,在单个指令中,您只能进行8位数学运算。

但是,您仍然可以进行32位数学运算,但这需要许多指令。例如,您需要4个8位寄存器来保存单个32位值。此外,您将必须使用8位操作(即多个指令)进行数学运算。

对于两个32位int的ADD,您将需要四个8位加法指令,此外,您还需要指令来处理来自单个加法指令的进位。

所以你可以这样做,但它会很慢,因为单个32位加法可能需要10-20条指令(或更多 - 请参阅@YannVernier的评论)。

......(反之亦然)

AFAIK大多数32位CPU具有允许8位数学运算的指令,即作为单个指令。因此,8位或32位数学运算将同样快(根据所需的指令)。

每当我在32位uC中声明一个int时,我实际上使用的是int32吗?还是int8?

对于32位CPU,int通常为32位,因此答案是:int32

但从C标准的角度来看,在32位机器上有16位int是可以的。因此,即使32位是常见的,您仍然需要检查特定系统的大小才能确定。


1
投票

这似乎不仅仅是一个问题。首先,标题;是的,8位和32位微控制器通常可以使用任一宽度的整数。较窄的处理器将需要更多的步骤来处理更大的宽度,因此更慢。更宽的处理器可能缺乏对较窄类型的支持,导致它们也需要额外的步骤。无论哪种方式,典型的编译器都将处理8位和32位之间的差异。

诸如ADC之类的外设可以有自己的宽度;它们的宽度不能精确地以字节为单位,例如10或12位,这种情况并不少见。逐次逼近型ADC也经常提供更快的模式,其中较少的位保持有效数据。在这种情况下,请求快/窄模式将需要不同的代码在慢/全宽模式下运行。

如果在符合C的编译器中声明int,则永远不会得到8位变量,因为C要求它至少为16位。许多编译器都有选择与标准不同。在32位计算机上,它通常是32位,但在微控制器上,即使处理器是32位,也可以更小以节省内存。如果您想要具体,inttypes.h中有宽度特定类型。

© www.soinside.com 2019 - 2024. All rights reserved.