【发布时间】:2015-02-14 16:07:54
【问题描述】:
我一直在查看我的代码的内存映射(用 c 编写并由 XC16 编译器编译),并看到分配给 powers、npowers 的大量空间, 和 .data 段中的 dpowers。
有人知道这个分配是做什么用的吗?
我的代码使用浮点库以及 printf/scanf - 这可能是这些函数的工作空间吗?
这是地图文件中的两个 sn-ps:
section address alignment gaps total length (dec)
------- ------- -------------- -------------------
...
.data._powers_ 0x20b2 0 0xb0 (176)
.data._npowers_ 0x2162 0 0xb0 (176)
.data.dpowers 0x2212 0 0x140 (320)
...和...
.data._powers_ 0x20b2 0xb0
.data._powers_
0x20b2 0xb0 c:/program files (x86)/microchip/xc16/v1.24/bin/bin/../../lib\libc-coff.a(powers.epo)
0x20b2 _powers_
.data._npowers_
0x2162 0xb0
.data._npowers_
0x2162 0xb0 c:/program files (x86)/microchip/xc16/v1.24/bin/bin/../../lib\libc-coff.a(powers.epo)
0x2162 _npowers_
.data.dpowers 0x2212 0x140
.data.dpowers 0x2212 0xa0 c:/program files (x86)/microchip/xc16/v1.24/bin/bin/../../lib\libc-coff.a(doprnt_cdfFnopsuxX.EPo)
.data.dpowers 0x22b2 0xa0 c:/program files (x86)/microchip/xc16/v1.24/bin/bin/../../lib\libc-coff.a(doprnt.epo)
【问题讨论】:
-
浮点和格式化 I/O 在内存和 CPU 负载方面都很昂贵。格式化 I/O 在支持浮点时特别昂贵。大多数嵌入式库都可以选择从 stdio 中删除浮点支持,并且浮点运算通常可以替换为定点代码。
-
你说得对,这些是代码/内存密集型例程,但我预计大部分 RAM 需求将从堆栈中获得,并且查找表/常量可以保留在 ROM 中。后者会消耗更多的代码来进行 PSV 访问的页面切换(正如您所指出的,这些例程已经很慢了),但 RAM 节省会相当可观。
-
我同意您希望库实现是最佳的,但这不是给定的。这对提高我对 Microchip 的所有事情已经很低的看法没有任何帮助。