PIC 16F18-与浮点数相乘时程序内存使用过多

PIC 16F18-与浮点数相乘时程序内存使用过多,c,math,floating-point,pic,C,Math,Floating Point,Pic,我有一个奇怪的问题。附件中更好地说明了这一点。 我使用的是PIC16F18323,MPLAB和XC8用C编写。 PIC的程序内存只有2KB,所以我需要尽可能降低它的内存。 问题是,当我尝试进行计算时,程序内存使用率会猛增40-50%。 我所做的计算很简单: int blue; int red; blue = 4 * 1.5; 这很好,正如人们所期望的那样,占用了几乎为零的内存。 但是如果我做另一个类似的计算,像这样: int blue = 4; int red; red = blue * 1.

我有一个奇怪的问题。附件中更好地说明了这一点。 我使用的是PIC16F18323,MPLAB和XC8用C编写。 PIC的程序内存只有2KB,所以我需要尽可能降低它的内存。 问题是,当我尝试进行计算时,程序内存使用率会猛增40-50%。 我所做的计算很简单:

int blue;
int red;
blue = 4 * 1.5;
这很好,正如人们所期望的那样,占用了几乎为零的内存。 但是如果我做另一个类似的计算,像这样:

int blue = 4;
int red;
red = blue * 1.5;
如图所示,程序内存使用率跃升至40-50%

提前谢谢


16F18323没有浮点单元,这意味着它无法以本机方式执行浮点运算。因此,编译器必须在软件中模拟浮点操作,并且随后必须为单个浮点操作发出大量代码

第一个操作涉及常量表达式,因此不涉及芯片上的浮点操作

对于您的具体示例,可以考虑基于整数的方法:

red = blue + (blue / 2);
或者(如果您的编译器不能生成有效的代码以二的幂除):


请注意,由于四舍五入,结果可能略有不同。此外,请注意,移位有符号类型(如
int
)是由实现定义的;XC8编译器将有符号值的移位作为符号扩展算术移位,这正是我们想要的。

太好了,非常感谢您提供了一个简洁而有用的答案。@AlphaModular没问题。你的问题措辞得体,细节充分,易于回答。如果这完全解决了您的原始问题,您可以通过单击此答案左侧的复选标记将问题标记为已回答。一般来说,我鼓励你对所有问题都这样做,一旦你有了满意的答案。
red = blue + (blue >> 1);