This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] MSPM0G3507-Q1:通过 stDIO 函数大幅增加了代码存储器大小

Guru**** 1810440 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1404277/mspm0g3507-q1-huge-increase-in-code-memory-size-with-stdio-functions

器件型号:MSPM0G3507-Q1

工具与软件:

您好!

 添加 stdio 库和一个 sscanf 命令后、加入46kB 的代码存储器大小要求。

我使用 GCC 编译器。 空间优化可以提供一些帮助。

这是预期结果吗? 是否可以采取一些措施来减少此开销、例如从库中删除未使用的函数?

我需要空间为我的应用程序:-)。

谢谢!

Dave  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    编写您自己的解析例程。 链接器已经包含了您使用的函数,但是,可能有许多 sscanf()调用的子函数被其他 stdio()例程使用。

    您可以在网络上找到 sscanf()的版本、您可以通过 pare down 将其修改为您自己的目的。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    谢谢 Keith。

    那么您是否不会对代码大小增加46kB 感到惊讶?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    不会、因为我认为 TI 并未投入太多精力对它们进行优化。 它们也是堆栈猪。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 David:

    我不能说太多的具体增加46KB ,但我可以说,我们不建议利用 stdio 函数,因为它们是内存密集型的。 出于这些原因、我们不会预测客户使用 stdio 函数。  

    优化应该会有所帮助、但一致认为、如果可能、在此处编写您自己的函数将可能释放更多内存。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Dylan、感谢您的确认。 不知道 TI 是否在优化 stdio 函数、以便提高竞争力。 MSPM0的代码从 Infineon PSOC5LP (Cortex M3)移植、因此代码存储器要求要低得多。  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我怀疑。 stdio 在嵌入式"非托管"实现中的用处有限、而且 TI 采用调试器的共享内存方案具有相当大的灵活性。 (当然是所有 IMHO)

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我们没有 进一步优化的计划。 特别是对于存储空间较小的 MSPM0器件、我们预计不会有许多客户使用 stdio 函数。 我们还建议我们的用户避免使用 它们。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我不确定我会不会使用这么广泛的刷子。

    使用 snprintf()的某个程序的.map 文件显示整个程序大约5KB (Flash)、包括 printfi (Xprintf 的大容量)大约2KB。 我不使用 Xscanf、因此我不知道那个情况。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    感谢所有的回应。 TI 是否知道 MSPM0器件有一个编译器可以优化 stdio 库中的函数? 谢谢、Dave

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    所有 MSPM0 driverlib 示例都支持 gcc、IAR、Keil 和 ticlang。 我不太熟悉哪一个编译器最方便 stdio、但建议您使用这些其他选项进行快速测试。

    此外、为了添加上下文、我有时在 MSPM0工程中使用 stdio 函数、尽管由于内存使用率较高、建议不要使用 stdio 函数、但这样做不会期望任何人在任何地方都使用 stdio 函数。 只需强调一下它的成本高昂、这在 MSP 等器件中尤为重要。 还有很多人、包括我自己也不 知道 在低内存嵌入式应用中使用 stdio 的缺点。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    在精简 Xprintf 方面付出了大量的努力、因此它可以尽可能小。 我想知道在 Xscanf 上是否花费了同样的努力。  

    特别是、我想知道是否使用 sscanf 拉取大量浮点支持(无论是否要求)。 如果您耐心等待、可从中获取库源  /ccs/tools/compiler/ti-cgt-arm_ /lib/LVDS src。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bruce、您好!

    我只是使用一些浮点表达式(*、/、log、log10、sqrt、 +、-)。 我以前没有过。 这些已将~6KB 添加到代码存储器。

    因此、sscanf 似乎不会拉取浮点支持。 你同意吗?

    谢谢!

    Dave

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    如果你已经把 sscanf ()留在那里,就不会了。 重点是 sscanf()正在拉入支持。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    非常好的评价、Keith。  

    我注释掉了所有 sscanf 和 sprintf 命令以及包含和不含浮点表达式(*、/、log、log10、sqrt、 +、-)、相差13kB。 因此、您的断言看起来是正确的。