开发者社区> 问答> 正文

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

我有一个奇怪的问题。最好在附图中进行说明。我使用的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%。

提前致谢。 wxliZ.png

展开
收起
kun坤 2019-11-29 11:03:01 681 0
1 条回答
写回答
取消 提交回答
  • 16F18323没有浮点单元,这意味着它不能本地执行浮点运算。结果,编译器必须在软件中模拟浮点运算,并且甚至必须为单个浮点运算发出大量代码。

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

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

    red = blue + (blue / 2);
    

    或替代(如果您的编译器未生成有效的代码来除以二的幂):

    red = blue + (blue >> 1);
    

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

    2019-11-29 11:03:26
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载