Forums

LPC2387 / 88的链接器和启动文件

开始于 巴特 2013年1月20日
你好

我是ARM领域的新手,但之前在GNU和Linux上使用过AVR和AVR32 MCU。 IAR编译器。现在,我正在尝试使用ARM7入门。 已经安装有LPC2387的现有定制板。

我的工具链是Yagarto + Eclipse,我有一个Segger J-Link EDU和一个Olimex 提供ARM-USB-OCD-H。

我现在正在寻找的是GNU的链接器控制和启动文件 compiler.

有什么想法可以从哪里获得此类文件吗?

提前致谢,
伯恩德

LPC2100系列工程师指南

嗨伯恩德,

欢迎来到ARM世界。快速说明一下,ARM7体系结构的运行速度很慢
由于各种技术原因,被Cortex系列取代。

Yagarto和Eclipse是不错的选择(我们可能会在某个时候看到一场火焰大战
有关Eclipse的信息,但它能胜任工作)请注意,您将需要一个额外的
资源,即OpenOCD,用于将Olimex JTAG探针连接到GDB。

您的第一步有几种资源:
http://ics.nxp.com/support/design/microcontrollers/ (我怀疑这些
示例依赖于Keil编译器...)
//www.olimex.com/Products/ARM/NXP/LPC-H2148/ (These may support
IAR ...)
...还有我现在找不到的更多内容(http://www.lpcware.com may be
另外一个,但是在撰写本文时它已关闭)

如果需要快速入门,可以查看我放入的zip文件
http://www.gautherot.net/doku.php?id=firmware:homesample_lpc2148_project
它一点儿也没做,但是您会发现Makefile的基础知识,
链接器定义文件,带有向量表和主程序的示例引导带
调用另一个函数。它不是直接用于LPC2368,而是
LPC2148可能足够靠近。此示例应用程序是由
CodeBlocks进行了修改,以支持独立的Makefile(包括在内)。

检查如何禁用内部应用程序和
在使用PLL播放之前,请激活引导监视器。如果一切顺利,
没关系,但是如果您弄错了,CPU可能会停止响应...

在开始解决JTAG问题之前,此发行版包括一个
.gdbinit文件,执行一些技巧(括号中的注释):
目标远程localhost:3333(与OpenOCD的连接)
mon adapter_khz 100(在运行的芯片上被证明是必需的
关闭默认的内部时钟)
mon reset init(请确保在您停止CPU之前
开始玩)
加载(加载程序)
周一重置暂停(我怀疑“加载”将启动
执行...)
mon mwb 0xE01FC040 1 1(检查MEMMAP寄存器是否相同
位置并激活用户Flash)
b主(确保它会停在某处
有用...)
c(继续执行直到
断点)

我不确定是否需要所有命令,但是命令“ adapter_khz 100”
碰巧是使我的董事会恢复活力的东西(在某些时候,我认为这是
死...)
希望能帮助到你
-
奥利维尔·高特罗
o ... @ gautherot.net
电话:+56 98 730 9361
www.gautherot.net
http://www.linkedin.com/in/ogautherot
2013年1月19日星期六,下午5:44,bartddgd写道:

> **
> Hi,
>
>我是ARM领域的新手,但之前在GNU上使用过AVR和AVR32 MCU
>和IAR编译器。现在,我正在尝试着手进入ARM7世界
>使用已经装有LPC2387的现有定制板。
>
>我的工具链是Yagarto + Eclipse,我有一个Segger J-Link EDU和一个
>提供Olimex ARM-USB-OCD-H。
>
>我现在正在寻找的是GNU的链接器控制和启动文件
> compiler.
>
>有什么想法可以从哪里获得此类文件吗?
>
> Thanks in advance,
> Bernd
>
>
>


我的CMAKE脚本项目会自动生成链接器脚本并
的makefile
LPC23xx和LPC24xx MCU。也有很多资料和例子
我的资料
所以我希望您可以使用其中一些。
2013/1/20 bartddgd

> **
> Hi,
>
>我是ARM领域的新手,但之前在GNU上使用过AVR和AVR32 MCU
>和IAR编译器。现在,我正在尝试着手进入ARM7世界
>使用已经装有LPC2387的现有定制板。
>
>我的工具链是Yagarto + Eclipse,我有一个Segger J-Link EDU和一个
>提供Olimex ARM-USB-OCD-H。
CMAKE可以为Eclipse和代码块生成项目文件。

-
CMake构建环境项目
用于微控制器(使用
它或
添加你
最喜欢的MCU)


2013/1/21 Olivier Gautherot

> Hi Bernd,
>
>欢迎来到ARM世界。快速说明一下,ARM7体系结构的运行速度很慢
>由于各种技术原因,被Cortex系列取代。
无论如何,LPC2378都是从ARM开始的不错的控制器。您 could
之后就可以轻松移植到Cortex LPC1768,因为它是引脚对引脚
兼容并且可以编写独立于MCU的源代码,因为
外设寄存器与LPC1768中的寄存器相同(大约95%)

-
CMake构建环境项目
用于微控制器(使用
它或
添加你
最喜欢的MCU)


谢谢你们到目前为止的支持!

我已经使用了Yagarto + Eclipse。 Makefile和链接描述文件已经 针对我和代码编译并链接的LPC2387板进行了调整 any error.

下一步将使用OpenOCD和 J-LINK EDU.

第一个示例代码只是主while()循环中的端口引脚切换。 当这工作时,我将检查定时器中断以进行端口引脚切换。
最好的祝福,
伯恩德

你好,我们又见面了,

在过去的几天里,我取得了很大的进步。 PLL正在工作,我有一个基本的 计时器中断正在运行,甚至可以发送CAN消息。

同时,我也将Code :: Blocks作为我的IDE。到目前为止,我已经使用过 内部UART引导加载程序和FlashMagic对目标MCU进行编程。

现在,我正在尝试使JTAG编程和调试正常工作。作为JTAG适配器 使用Segger JLINK EDU。闪烁可以正常工作,但调试始终会失败:-(

在Code :: Blocks中的GDB配置的“连接之前”字段中,我具有:

文件./obj/lpc2387_88_test.elf
将mem设置为默认无法访问
目标远程本地主机:2331
监视器闪存设备= LPC2387
监控器闪存断点= 1
显示器Flash下载= 1
监视字节序小
自动监控速度
监视器重置
监控长0xE01FC040 = 1
加载

“连接后”字段包含:

监视器重置
突破主
继续

如果删除“ thbreak main”行,我的程序将上传并开始运行。 如果我保留这一行,程序将被上传,甚至似乎停止在 main(),但从那时起,Code :: Blocks中没有其他调试功能。所有 步进选项显示为灰色,我无法终止调试会话。一世 必须关闭并重新启动Code :: Blocks和Segger GDB服务器。

任何想法如何使调试在Code :: Blocks中起作用?

最好的祝福,
伯恩德

让我自己回答最后一个问题。我在 代码::阻止嵌乐橙云app论坛并获得一些快速响应 correctly.

现在,用于GDB的“之前”命令如下所示:
文件./obj/lpc2387_88_test.elf
将mem设置为默认无法访问
监视器闪存设备= LPC2387
监控器闪存断点= 1
显示器Flash下载= 1
监视字节序小
自动监控速度
监视器重置
监控长0xE01FC040 = 1
加载
监视器重置

注意,特别是。行“ target remote localhost:2331”行消失了。这些 必须在GDB的“远程连接”选项卡中配置参数 projects settings.

由于此更改,我可以调试,单步执行并观察其中的变量 Code::Blocks.

最好的祝福,
伯恩德

我想我应该在连接后将所有字符串移到。

afterconnection =连接前+连接后

2013/3/3 bartddgd

> **
> Hi again,
>
>在过去的几天里,我取得了很大的进步。 PLL正在工作,我有一个
>基本定时器中断正在运行,甚至可以发送CAN消息。
>
>同时,我也将Code :: Blocks作为我的IDE。到目前为止,我已经
>使用内部UART引导加载程序和FlashMagic对目标MCU进行编程。
>
>现在,我正在尝试使JTAG编程和调试正常工作。作为JTAG
>适配器我使用Segger JLINK EDU。闪烁可以正常工作,但始终可以调试
> fails :-(
>
>在Code :: Blocks中的GDB配置的“连接之前”字段中,我具有:
>
>文件./obj/lpc2387_88_test.elf
>将mem设置为默认无法访问
>目标远程本地主机:2331
>监视器闪存设备= LPC2387
>监控器闪存断点= 1
>
>监视字节序小
> monitor speed auto
> monitor reset
>监控长0xE01FC040 = 1
> load
>
>“连接后”字段包含:
>
> monitor reset
> thbreak main
> continue
>
>如果删除“ thbreak main”,我的程序将上传并开始运行
>线。如果我保留这一行,程序将被上传,甚至似乎
>停在main()处,但是从那一点起,没有其他调试功能
>代码::阻止工作。所有的步进选项都是灰色的,我不能
>终止调试会话。我必须关闭并重新启动Code :: Blocks和
>Segger GDB服务器。
>
>任何想法如何使调试在Code :: Blocks中起作用?
>
> Best regards,
> Bernd
>
>
>

-
CMake构建环境项目
用于微控制器(使用
它或
添加你
最喜欢的MCU)