为什么 cfs_write() 消耗过多的 ROM 内存?
Why cfs_write() consumes too much ROM memory?
我正在开发一个 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() 的大小?
此致,
塞尔吉奥·迪亚兹
虽然 cfs_write()
本身并不是一个巨大的函数,但它确实调用了其他函数。如果您在应用程序代码中使用 cfs_write()
,则所有这些其他函数也会链接到可执行文件中。
例如,如果您使用的是 CFS 的 Coffee 实现(有多个实现),它会调用 merge_log()
,后者又会自行调用一堆函数。
没有简单的方法来优化这种用法,因为 CFS 代码的开发目标是生成紧凑的二进制代码。
我正在开发一个 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() 的大小?
此致,
塞尔吉奥·迪亚兹
虽然 cfs_write()
本身并不是一个巨大的函数,但它确实调用了其他函数。如果您在应用程序代码中使用 cfs_write()
,则所有这些其他函数也会链接到可执行文件中。
例如,如果您使用的是 CFS 的 Coffee 实现(有多个实现),它会调用 merge_log()
,后者又会自行调用一堆函数。
没有简单的方法来优化这种用法,因为 CFS 代码的开发目标是生成紧凑的二进制代码。