Почему cfs_write() потребляет слишком много ПЗУ?

Я разрабатываю приложение 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? Как уменьшить размер cfs_write() в разделе .text?

С наилучшими пожеланиями,

Серхио Диас


person Sgio Dz    schedule 05.10.2017    source источник


Ответы (1)


Хотя cfs_write() сама по себе не является огромной функцией, она вызывает другие функции. Если вы используете cfs_write() из кода приложения, все эти другие функции также связаны в исполняемом файле.

Например, если вы используете реализацию CFS в Coffee (имеется несколько реализаций), она вызывает merge_log(), которая, в свою очередь, сама по себе вызывает набор функций.

Не существует простого способа оптимизировать это использование, поскольку код CFS уже разработан с целью создания компактного двоичного кода.

person kfx    schedule 05.10.2017