Предотвращение связывания ненужных процедур STDLIBC ++ для Cortex-M4

Я пытаюсь создать голое приложение на языке c ++ для устройства cortex-M4. Мой инструментарий ARM-GCC

Я заметил, что размер кода увеличился на 300 КБ, что составляет 30% от доступного размера флэш-памяти. Существует целая куча вещей из стандартных библиотек, которые связаны между собой в областях TEXT, DATA и BSS.

Можно ли это уменьшить?

Приложение — почтенная мигающая программа с:
— Blinky.c, содержащий подпрограмму C для переключения порта порта в цикле while
— Main.cpp, содержащий main () и простой класс с конструктором
— Файл запуска устройства, который выполняет загрузку программы и передает управление main ()

Файл c скомпилирован с использованием gcc, а cpp скомпилирован с использованием g ++. Линкер вызывается через g ++ для автоматической ссылки в stdlibc ++ (при условии, что в stdlibc ++ будут связаны только необходимые объекты).

У меня даже есть параметры -fno-rtti и -fno-exception в качестве параметров компиляции для g ++, но экономия — жалкая вещь.

Кстати, сгенерированный двоичный файл работает.

Это Main.cpp

 #include <iostream>

using namespace std;

extern "C" void Toggle_Pin(uint8_t Speed);

void *__dso_handle = (void *)NULL;
void __cxa_atexit(void (*Arg)(void *), void *Arg2, void *Arg3){}
void  __cxa_guard_acquire(void){}
void  __cxa_guard_release(void){}
void  __aeabi_atexit(void (*Arg)(void *), void *Arg2, void *Arg3){}

class Computer
{
public:
uint32_t aa;
uint32_t bb;

Computer();
};

Computer::Computer()
{
aa=0;
bb=0;
for(uint8_t i=0;i < 10; i++)
{
Toggle_Pin((uint8_t)100);
}
}

Computer a;

int main(void)
{
a.aa = 10;
Toggle_Pin();
}

И это мои параметры компиляции, предоставляемые g ++.

 -O0 -ffunction-sections -Wall -fno-rtti -fno-exceptions -mfloat-abi=softfp -Wa,-adhlns="[email protected]" -c -fmessage-length=0 -mfpu=fpv4-sp-d16 -MMD -MP -MF"$(@:%.o=%.d)" -MT"$(@:%.o=%.d) $@" -mcpu=cortex-m4 -mthumb -g3 -gdwarf-2 -o "$@" "$<"

Опции компоновщика, предоставляемые g ++:

 -T LinkerScript.ld" -nostartfiles -L"Path to libraries" -Wl,-Map,"Project.map" -mcpu=cortex-m4 -mthumb -g3 -gdwarf-2 -o "Project.elf" "@makefile.rsp" $(USER_OBJS) $(LIBS)

1

Решение

Удалить часть с

#include <iostream>
using namespace std;

тебе это не нужно Я предполагаю, что он добавляет дополнительные глобальные объекты / переменные и может оставить некоторые определения в двоичном виде.

Также используйте -Операционные системы

-Операционные системы

Оптимизировать по размеру. -Os включает все оптимизации -O2, которые обычно не увеличивают размер кода. Он также выполняет дальнейшую оптимизацию, предназначенную для уменьшения размера кода.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]