问题描述
我正在尝试获得一个简单的嵌入式 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 (将#修改为@)