Пишу для STM32F100xxx
Использую стандартный GCC, codesourcery gcc arm toolchain
И Эклипс в качестве среды.
Встретился с непонятный поведением размера кода после компиляции.
Если добавить пару строк кода в любое место, например
было
CODE
char *rs_tx_command;
char rs_tx_command_crc=0;
void rs_tx_command_add(char v)
{
rs_tx_command[rs_tx_command_count++]=v;
rs_tx_command_crc+=v;
}
стало
CODE
char *rs_tx_command;
char rs_tx_command_crc=0;
void rs_tx_command_add(char v)
{
if (rs_tx_command_count == 2)
{
rs_tx_command[rs_tx_command_count++] = RS_COMMANDS_EXTENDER; //RS_COMMANDS_EXTENDER = 0xFF
rs_tx_command_crc += RS_COMMANDS_EXTENDER;
}
rs_tx_command[rs_tx_command_count++]=v;
rs_tx_command_crc+=v;
}
то размер кода увеличивается на 2 килобайта, хотя по асм-листингу добавляется 10-20 команд всего.
Хотя если вносить изменения в других местах проекта не связанных с кодом а данными добавляемыми в флешь (как константы), например поменять константу с 8 битной на 32 битную или 64 битную то увеличивается размер кода на 4 или 8 байт.
Настройки:
командная строка компилятора
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -Wall -ffunction-sections -O3 -fdata-sections -g
линковщика
arm-none-eabi-gcc -O3 -nostartfiles -Map=one_chanel.map -mcpu=cortex-m3 -mthumb -L${linkdir} -T${linkdir}\link.ld --gc-sections
Куда девается остальное?
И почему это происходит?
Спасибо.