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

PIC 16F18 - Excessive program memory usage when multiplying by a floating point number

我遇到了一个奇怪的问题。附图中有更好的说明。 我正在使用带有 MPLAB 和 XC8 的 PIC 16F18323,用 C 编写。 PIC 的程序内存只有 2KB,所以我需要尽可能地降低它。 问题是当我尝试进行计算时,程序内存使用率上升了 40-50%。 我做的计算很简单:

int blue;
int red;
blue = 4 * 1.5;

这很好,正如人们所期望的那样,占用的内存几乎为零。 但是,如果我再做一次类似的计算,就像这样:

int blue = 4;
int red;
red = blue * 1.5;

如图所示程序内存使用率跳到40-50%

提前致谢。

Picture ------ Upper image: low mem. Lower image: high mem.

16F18323没有浮点运算单元,这意味着它本身不能进行浮点运算。因此,编译器必须在软件中模拟浮点运算,随后必须为单个浮点运算生成大量代码。

第一个运算涉及常数表达式,因此不涉及芯片上的浮点运算。

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

red = blue + (blue / 2);

或者(如果您的编译器没有生成除以 2 的幂的有效代码):

red = blue + (blue >> 1);

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