我有一个简单的FreeRTOS应用程序,它只在主循环中切换LED。
当我使用-Os
编译它时,生成的二进制文件大小为0。没有使用-Os
时,一切都按预期工作。这是怎么回事?
我的CFLAGS
是:
CPUFLAG = -mthumb -mcpu=cortex-m4
FPUFLAG = -mfpu=fpv4-sp-d16 -mfloat-abi=hard
WFLAG = -Wall -Wextra -Werror -Wstrict-prototypes
CFLAGS += -std=gnu99 $(WFLAG) $(CPUFLAG) $(FPUFLAG) -mlittle-endian -mthumb -nostartfiles
CFLAGS += -ffunction-sections -fdata-sections -fno-builtin
LDFLAGS += -nostdlib --gc-sections -static
main基本上是TI的闪烁演示:
int main(void)
{
volatile uint32_t ui32Loop;
//
// Enable the GPIO port that is used for the on-board LED.
//
SYSCTL_RCGC2_R = SYSCTL_RCGC2_GPIOF;
//
// Do a dummy read to insert a few cycles after enabling the peripheral.
//
ui32Loop = SYSCTL_RCGC2_R;
//
// Enable the GPIO pin for the LED (PF3). Set the direction as output, and
// enable the GPIO pin for digital function.
//
GPIO_PORTF_DIR_R = 0x08;
GPIO_PORTF_DEN_R = 0x08;
//
// Loop forever.
//
while(1)
{
//
// Turn on the LED.
//
GPIO_PORTF_DATA_R |= 0x08;
//
// Delay for a bit.
//
for(ui32Loop = 0; ui32Loop < 200000; ui32Loop++)
{
}
//
// Turn off the LED.
//
GPIO_PORTF_DATA_R &= ~(0x08);
//
// Delay for a bit.
//
for(ui32Loop = 0; ui32Loop < 200000; ui32Loop++)
{
}
}
return 0;
}
使用
-Os
编译选项将生成以下内容: text data bss dec hex filename
0 0 0 0 0 image.elf
否则
text data bss dec hex filename
2012 4 728 2744 ab8 image.elf
编辑:.map 文件的差异
GPIO_PORTF_DATA_R
和相关变量是如何声明的? - unwindimage.elf
文件是否真的为空,还是只是像size
命令所报告的那样大小为0?ls -l image.elf
- Keith Thompsonls -sh image.*
命令输出0 image.bin* 4,0K image.elf*
。 - user1273684