【问题标题】:ARM assembly in NXP LPC1768NXP LPC1768 中的 ARM 组件
【发布时间】:2016-06-19 16:05:12
【问题描述】:

我想为 LPC1768 编写程序集,但链接时它没有运行。 这是我的程序,我想让它打开 LED。

STACK_TOP   EQU     0x10008000  
AREA | Header Code |,CODE
DCD STACK_TOP
DCD START
ENTRY

START

MOV R0,#0XFF
LDR R1,=0x2009C040
STRB R0,[R1]

MOV R0,#0XFF
LDR R1,=0x2009C054
STRB R0,[R1]

deadloop
B deadloop

END

我使用这些命令:

armasm --cpu cortex-m3 -o lamp.o lamp.s 
armlink --rw_base 0x10000000 --ro_base 0x0 --map -o lamp.elf lamp.o 
fromelf --bin --output lamp.bin lamp.elf 

【问题讨论】:

  • 当你尝试运行它时会发生什么?将确切的错误消息编辑到您的问题中。
  • 不要在我的微电脑上工作,这意味着不要打开 LED!

标签: assembly arm cortex-m3


【解决方案1】:

首先,反汇编是什么样的?它是否正确生成了向量表 32 位堆栈地址,然后是 32 位起始地址或 1(lsbit 设置)?当然,这假设您将其加载到闪存中而不是从 ram 中运行,如果从 ram 中运行,那么您最有可能想要做一些不同的事情或知道入口点的偏移量。

您正在将所有端口 2 引脚设置为输出。然后将它们设置为高。

您的 LED 是否配置为高电平打开或高电平关闭? (应该是 gpio、led、电阻器,然后是 vcc 或接地,高电平可以打开它,它应该接地。如果是 vcc,那么你想将端口引脚设置为低电平)。 (不管元件的顺序是电阻后 LED 或 LED 后电阻)。

我猜你没看过:

有效用户代码的标准

保留的 Cortex-M3 异常向量位置 7(向量表中的偏移量 0x 001C)应包含表条目 0 到 6 的校验和的 2 的补码。这导致前 8 个表条目的校验和为0. 引导加载程序代码校验闪存扇区 0 中的前 8 个位置。如果结果为 0,则执行控制权转移到用户代码。 ...

在数据表中?

嗯,或者你确实想从 ram 中运行它?您需要将您的 ro 地址设置为 0x10000xxx(见下文),并且您不需要向量表。

数据表还说:

ISP 命令处理程序使用的 RAM

ISP 命令使用从 0x1000 0118 到 0x1000 01FF 的片上 RAM。用户可以使用该区域,但重置后内容可能会丢失。 Flash 编程命令使用片上 RAM 的前 32 字节。堆栈位于 RAM 顶部 - 32。最大堆栈使用量为 256 字节,并且向下增长。

所以你会看到人们通常在使用引导加载程序时经常为引导加载程序保留 0x200 字节。所以从 0x10000200 而不是 0x10000000 开始。出于某种原因,我更慷慨,我使用 0x10000800。有些人一直保留 0x200 字节,即使他们不使用 ISP 工具。

我从您的 ro 地址和 rw 地址和向量表中假设您希望从闪存运行。你需要在那里得到校验和,我建议反汇编看看向量表有一个奇数的起始地址。您可能希望将其他一些向量放入死循环以填充校验和的空间。

【讨论】:

  • 谢谢!因为帮助了我!你能给我正确的代码吗?!具有相同的内存地址!
  • 我非常喜欢在 goolge 中搜索但如果您有 LPC1768 的程序集,我找不到 LPC1768 的程序集!给我……!非常感谢
  • 装配与它无关,裸机是你要找的,会有一个装配引导程序,这就是你想要的。或者只是写它花费你更少的时间来写它甚至搜索它......
猜你喜欢
  • 2011-04-10
  • 1970-01-01
  • 2011-12-16
  • 1970-01-01
  • 2019-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-05
相关资源
最近更新 更多