【问题标题】:Why cfs_write() consumes too much ROM memory?为什么 cfs_write() 会消耗太多的 ROM 内存?
【发布时间】:2017-10-05 12:00:53
【问题描述】:

我正在开发一个 Contiki 应用程序,但我的 ROM 内存已用完。我想使用Contiki文件系统(CFS)来写一个小文件(32字节长),所以我添加以下代码:

 fd_write = cfs_open(filename, CFS_WRITE);
 n = cfs_write(fd_write, message, sizeof(message)); //Message size is 32 bytes
 cfs_close(fd_write);

问题在于 cfs_write() 将 .text 部分增加了 3210 个字节。我发现这是因为删除 cfs_write() 的代码大小是:

  text   data    bss    dec    hex filename
  23912    114   4710  28736   7040 coffee-example.sky

而 cfs_write() 的代码大小为:

 text   data    bss    dec    hex filename
 27122    114   4710  31946   7cca coffee-example.sky

请注意,cfs_write() 将 .text 部分增加了 3210 个字节。为什么 cfs_write() 增加了 .text 部分这么多?如何减小 .text 部分中 cfs_write() 的大小?

最好的问候,

塞尔吉奥·迪亚兹

【问题讨论】:

    标签: memory-management out-of-memory contiki


    【解决方案1】:

    虽然cfs_write() 本身并不是一个庞大的函数,但它确实会调用其他函数。如果您在应用程序代码中使用cfs_write(),则所有这些其他功能也会链接到可执行文件中。

    例如,如果您使用 CFS 的 Coffee 实现(有多种实现),它会调用 merge_log(),而后者又会自行调用一堆函数。

    没有简单的方法来优化这种用法,因为 CFS 代码的开发已经考虑到生成紧凑的二进制代码的目标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-30
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多