微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

最小的PIC32程序是巨大的

如何解决最小的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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?