我有一个奇怪的问题。最好在附图中进行说明。我使用的MP 16和XC8用C编写的PIC16F18323。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);
或替代(如果您的编译器未生成有效的代码来除以二的幂):
red = blue + (blue >> 1);
请注意,由于舍入,结果可能会略有不同。此外,请注意,转换带符号的类型(例如your int)是实现定义的;XC8编译器将有符号值的移位定义为符号扩展算术移位,这正是我们想要的。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。