最小的PIC32程序是巨大的

问题描述

我正在尝试获得一个简单的嵌入式 PIC32MX“Hello,World!”无需使用 MPLAB X 即可编译的程序。 对于芯片支持,我正在使用 spicastack/pic32-parts-free 库。据我所知,这只是 microchip 的 XC32 头文件的重新分发。

使用以下最小的 cmake 文件,我可以让程序编译得很好:

project(pic32example C ASM)
include_directories(pic32-parts-free/include)
add_compile_options(-mips32 -EL -nostdlib -Os -D__PIC32MX__ -D__32MX570F512L__)
set_source_files_properties(pic32-parts-free/proc/32MX570F512L/p32MX570F512L.S PROPERTIES COMPILE_FLAGS "-x assembler-with-cpp")
add_executable(${PROJECT_NAME}.elf
    main.c 
    pic32-parts-free/proc/32MX570F512L/p32MX570F512L.S
)

main.c :

int main(void) {
    /* Very boring program */
}

使用 cmake -D CMAKE_C_COMPILER=/usr/bin/mipsel-linux-gnu-gcc -D CMAKE_CXX_COMPILER=/usr/bin/mipsel-linux-gnu-g++ .. 调用 cmake 编译程序。但是,生成的 elf 文件的大小比我预期的要大得多。即使在我调用 mipsel-linux-gnu-strip 之后:

$ ls -lah
143K Mar 16 09:19 pic32example.elf           # unstripped simple program
 84K Mar 16 09:09 pic32example-stripped.elf  # stripped simple program

进一步检查看起来有很多用于动态链接 glibc 的调试信息(大约 23KiB)。看起来很像程序的其余部分什么都不做。我不使用 glibc 中的任何内容,因此我希望删除该部分,但 -nostdlib 似乎不会影响它。

所以我的问题是:为什么这个程序如此庞大,尽管它完全没有做任何事情?我应该使用哪些编译器标志来将其缩小到合理的大小? (-Os-nostdlib 除外)

注意:如果您想重新创建我的设置,spicastack/pic32-parts-free 不提供我使用的汇编程序文件,但如果您将其替换为 cmake 文件中的 pic32-parts-free/proc/32MX440F256H/p32mx440f256h.S,它应该可以编译。在剥离之前,生成的二进制文件应该约为 63KiB。对于这么小的程序来说还是太大了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...