如何编译和链接示例代码以获取二进制文件?

时间:2013-02-18 17:20:31

标签: c arm linker-scripts

我正在使用TI Stellaris LM3S1968。该MCU具有ARM Cortex-M3。

我在我的笔记本电脑上安装了一个带有Windows 7的虚拟机,并在那里安装了GNU Tools for ARM Embedded Processors。然后我安装了Stellaris Flash Programmer, GUI and command line。我还安装了Stellaris FTDI Drivers

最后,我下载并提取了EK-LM3S1968 Firmware Development Package

在解压缩的文件夹中,有一些例子。其中一个是眨眼的。如果我去/ StellarisWare / board / ek-lm3s1968 / blinky / gcc /,有一个名为blinky.bin的文件。使用Stellaris Flash编程器,我可以将它连接到我的计算机并闪存,它会工作。我尝试了各种各样的例子,它们都奏效了。

现在我的目标是编译/ StellarisWare / board / ek-lm3s1968 / blinky /中提供的示例代码,然后将其刷新。但是,我没有太多运气,因为我对C或编程微控制器的经验不足。

我将LM3S1968库从StellarisWare文件夹复制到编译器的include文件夹中。然后我按照我在网上找到的一些例子,但我没有成功。这就是我试过的:

arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb blinky.c -nostartfile -T blinky.ld -o blinky.o
arm-none-eabi-ld -T blinky.ld -o blinky.out blinky.o
arm-none-eabi-objcopy -Obinary blinky.out blinky.bin

当我刷这个.bin文件时,它什么也没做,LED就一直亮着。

我认为这是因为有一个startup_gcc.c文件,它在运行程序之前处理启动MCU。但我不确定如何捆绑它。

有很多文件适用于不同的IDE,但它们不是免费的,所以我想使用GNU工具。

我尝试在StackOverflow和谷歌搜索,但我无法找到答案。

1 个答案:

答案 0 :(得分:0)

我相信链接器正在丢弃启动代码。 确保包含它的一种好方法是在链接描述文件中使用KEEP。这将确保链接器不会丢弃您的启动代码。如果您在某个部分中没有启动代码,则需要先执行此操作。