编译Cortex M3裸机

use*_*382 6 native cortex-m3 llvm c++11

是否有某个指南描述了如何让LLVM为Cortex-M3发出二进制文件,我可以按摩它来运行裸机?我花了相当多的时间在Windows和Ubuntu上使用LLVM无济于事.我可以得到类似ARM的装配.我可以得到一些代码,但我真正需要的是ELF,DWARF,Hobbit,Gandalf或任何其他具有文件格式规范的Lord of the Rings生物.任何和所有帮助表示赞赏!我正在Ubuntu,Windows和/或OS X上使用CLANG编译LLVM 3.4.

小智 5

我创建了一个固件框架 - PolyMCU https://github.com/labapart/polymcu - 它基于支持 GCC 和 LLVM 的 CMake。因为它基于 CMake,所以您可以在 Linux/Windows/MacOS 上构建固件。它还使用 Newlib 并支持 Baremetal/CMSIS RTOS (RTX)/FreeRTOS。

使用 PolyMCU 的好处是该框架不会在 libc 和 MCU 供应商的 SDK 之上添加任何软件层。另一个好处是您可以轻松切换工具链。我使用此功能通过使用许多编译器进行测试来获得有关我的代码的更多反馈。

我还写了一篇博客,比较了 ARM Cortex-M 上的 GCC 和 LLVM 构建大小:http://labapart.com/blogs/3-the-importance-of-the-toolchain-version-in-embedded-space有趣的结果,Clang 生成的代码并不比 Cortex-M 上的 GCC 大多少...


Ver*_*rax 1

我所知道的最好的指南在这里: http: //wiki.osdev.org/LLVM_Cross-Compiler。它主要是关于构建 LLVM 交叉编译器,但它确实显示了“用法”部分。不过,该部分专门展示了 Cortex-A 处理器的示例,但您应该能够了解总体思路。

我创建了一个简单的 clang 裸机 Cortex-M3“hello world”程序,但我面前没有它。IIRC,我唯一需要的选项是-march=thumb -mcpu=cortex-m3只要 LLVM 编译器后端是使用 ARM 拇指后端支持构建的(再次参见http://wiki.osdev.org/LLVM_Cross-Compiler)。然而,我确实需要从这里的 GCC 工具链链接到 arm-none-eabi-ld ( http://launchpad.net/gcc-arm-embedded ) 链接到 arm-none-eabi-ld,我相信这就是获取 ELF 二进制文件的方法。

此后我开始使用 D 编程语言,这里有一个使用 LDC(LLVM D 编译器)的简单示例(http://wiki.dlang.org/Extremely_minimal_semihosted_%22Hello_World%22

所以,我相信用LLVM编译裸机ARM Cortex-M3软件是可以完成的,但似乎没有多少人尝试过。