C 8位微控制器的64位整数实现

C 8位微控制器的64位整数实现,c,optimization,64-bit,performance,microcontroller,C,Optimization,64 Bit,Performance,Microcontroller,我在研究OKI431微控制器。这是8位微控制器。我们不希望在我们的项目中执行任何浮点运算,所以我们消除了所有浮点运算,并以某种方式将它们转换为整数运算。但我们不能消除一个浮点运算,因为优化整数运算的计算需要64位整数,而micro本机不支持这一点。它有支持最多32位整数运算的C编译器。计算时间太长,这对用户来说是显而易见的 我想知道是否有任何64位整数库可以在C语言中方便地用于微控制器编码。或者,高效地写这些东西最简单的方法是什么?这里有效地意味着将所需的时间量降至最低 提前感谢。您可能需要进入

我在研究OKI431微控制器。这是8位微控制器。我们不希望在我们的项目中执行任何浮点运算,所以我们消除了所有浮点运算,并以某种方式将它们转换为整数运算。但我们不能消除一个浮点运算,因为优化整数运算的计算需要64位整数,而micro本机不支持这一点。它有支持最多32位整数运算的C编译器。计算时间太长,这对用户来说是显而易见的

我想知道是否有任何64位整数库可以在C语言中方便地用于微控制器编码。或者,高效地写这些东西最简单的方法是什么?这里有效地意味着将所需的时间量降至最低


提前感谢。

您可能需要进入组装程序才能完成此操作。你需要的显而易见的东西是:

  • 加成

  • 2s补码(反转和递增)

  • 左右算术移位1

从这些你可以建立减法,乘法,长除法和更长的移位。请记住,将两个64位数字相乘将得到一个128位数字,长除法可能需要能够获得128位的红利

它看起来慢得让人痛苦,但在这样一台机器中,假设你需要的是一个小的占地面积,而不是速度。我假设你正在以最低的频率进行这些计算

一个开源库可能有一个稍微快一点的方法来做到这一点,
但它也可能更慢。

因为这是一个微控制器,所以您可能需要使用一个简单的组装库。它支持的操作越少,它就越简单、越小。您还可能会发现,您可以避开小于64位的数字(可能是48位),并减少运行时间和寄存器要求。

当小型嵌入式系统中浮点数学的速度有问题,并且整数数学不够时,定点数学可以快速替代


您确定编译器不支持64位长的无符号整数或类似整数吗?是的,我确定。令人惊讶的是,编译器非常基本。为什么需要64位?它是什么类型的操作?它是将湿度传感器的原始湿度读数转换为实际相对湿度。您有哪种需要64位的高科技湿度传感器?甚至没有一个A/D转换器接近这个精度。关于计算频率:计算必须定期进行。最短周期为10秒。@Donotalo:如果基本时钟为1mhz,我猜乘法或除法大约为一毫秒,所以这应该是可以的。@Donotalo:当然,基本的IEEE浮点软件库也在相同的范围内,不会是国产的。您的编译器可能有一个。@Donotalo:有一次我在8088(16位寄存器)上进行了IEEE浮点加法运算。大约需要300条指令,其中只有少数指令在实际添加。其余的是拆包、包装、规格化、检查特殊值等。但如果您不需要高频,它工作正常。我们可以使用两种时钟速度:32K和500K。32K是首选。是的,因为微控制器是8位,8的任意倍数就足够了。一些8位微控制器的编译器甚至可以选择24位浮点。扩展到64位数学只会减慢速度