我有一个奇怪的问题。最好在附图中加以说明。我正在使用一个PIC 16F18323与MPLAB和XC8写在C中,程序内存只有2KB,所以我需要保持它尽可能低。问题是,当我尝试进行计算时,程序内存使用量会增加40%-50%。我所做的计算很简单:
int blue;
int red;
blue = 4 * 1.5;
这是很好的,并占用了几乎零的内存,正如人们所预期的。但是,如果我再做一次类似的计算,就像这样:
int blue = 4;
int red;
red = blue * 1.5;
如图所示,程序内存使用量跃升到40-50% .
提前谢谢。
发布于 2019-11-28 23:19:00
16F18323没有浮点单元,这意味着它不能在本地执行浮点操作。因此,编译器必须在软件中模拟浮点操作,并且随后必须为单个浮点操作发出大量代码。
第一个操作涉及一个常量表达式,因此不涉及芯片上的浮点操作。
对于特定的示例,您可以考虑一种基于整数的方法:
red = blue + (blue / 2);
或者(如果您的编译器没有生成有效的代码,以便按2的幂除法):
red = blue + (blue >> 1);
注意,由于四舍五入,结果可能略有不同。另外,请注意,转换有符号类型(如您的int
)是实现定义的;XC8编译器将有符号值的移位作为符号扩展的算术移位,这正是我们所希望的。
https://stackoverflow.com/questions/59097032
复制相似问题