- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 LLVM 生成用于裸机 ARM Cortex M4 开发的代码。IR 的创建进展顺利,LLVM 正在生成(在我看来)正确的 ARM Thumb ASM。
我购买了 Arm 开发套件来进行一些测试:Atmel SAM4L-EK http://www.atmel.com/tools/SAM4L-EK.aspx
我创建了一个打开开发板上黄色 LED 的应用程序。(我只是想从板上得到一些东西)我使用 Atmel Studio 运行了一个附带的应用程序,LED 工作正常。但我的应用程序似乎什么也没做...
根据手册将LED连接到PC10在ATSAM4LC4C MCU的数据表中,它说GPIO端口的地址是0x400E1000,一个端口占用 0x0200 字节的地址空间,因此端口 C 位于 0x400E1000 + 0x0400。
这是我的程序输出(LLVM 输出):
.syntax unified
.eabi_attribute 6, 10
.eabi_attribute 9, 2
.eabi_attribute 20, 1
.eabi_attribute 21, 1
.eabi_attribute 23, 3
.eabi_attribute 24, 1
.eabi_attribute 25, 1
.eabi_attribute 44, 1
.file ""
.text
.globl main
.align 2
.type main,%function
.code 16
.thumb_func
main:
movw r0, #5120
movw r2, #5184
movw r3, #5200
mov.w r1, #1024
movt r0, #16398
movt r2, #16398
movt r3, #16398
.LBB0_1:
str r1, [r0]
str r1, [r2]
str r1, [r3]
b .LBB0_1
.Ltmp0:
.size main, .Ltmp0-main
此代码将 GPIOEnableRegister 中的位 10 设置为 1
然后将 OutputDriverEnableRegister 中的位 10 设置为 1
然后将 OutputValueRegister 中的位 10 设置为 1
此时 LED 应亮起...
这是我使用的启动代码:
.section INTERRUPT_VECTOR, "x"
.global _Reset
_Reset:
B Reset_Handler /* Reset */
B . /* Undefined */
B . /* SWI */
B . /* Prefetch Abort */
B . /* Data Abort */
B . /* reserved */
B . /* IRQ */
B . /* FIQ */
Reset_Handler:
#mov r0, stack_top
MOV sp,r0
BL main
B .
两个汇编程序文件都被编译为目标文件,如下所示:
as -mcpu=cortex-m4 -g startup.s -o startup.o
使用 GNU ARM 汇编器
这是我使用的链接器脚本:
ENTRY(_Reset)
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
OUTPUT_ARCH(arm)
SEARCH_DIR(.)
/* Memory Spaces Definitions */
MEMORY
{
rom (rx) : ORIGIN = 0x00000000, LENGTH = 0x00040000 /* flash, 256K */
ram (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 /* sram, 32K */
}
SECTIONS
{
. = 0x0;
.text : {
startup.o (INTERRUPT_VECTOR)
*(.text)
}
.data : { *(.data) }
.bss : { *(.bss COMMON) }
. = ALIGN(8);0
. = . + 0x1000; /* 4kB of stack memory */
stack_top = .;
}
然后目标文件被链接到 ELF 二进制文件,如下所示:
ld -T linkerscript.ld armtest.o startup.o -o armtest.elf
使用 GNU Arm 链接器
然后我使用 Atmel Studio 将 ELF 二进制文件上传到开发板
机器人没有任何反应(重置后也没有发生)
任何见解将不胜感激!
最佳答案
cortex-m 系列不像非 cortex-m 系列 ARM 那样启动。 cortex-m 采用(非 Arm)传统中断向量表方法,而不是像全尺寸 Arm 那样的指令表。
/* vectors.s */
.thumb
.word 0x20020000 /* stack top address */
.word _start /* 1 Reset */
.word hang /* 2 NMI */
.word hang /* 3 HardFault */
.word hang /* 4 MemManage */
.word hang /* 5 BusFault */
.word hang /* 6 UsageFault */
.word hang /* 7 RESERVED */
.word hang /* 8 RESERVED */
.word hang /* 9 RESERVED*/
.word hang /* 10 RESERVED */
.word hang /* 11 SVCall */
.word hang /* 12 Debug Monitor */
.word hang /* 13 RESERVED */
.word hang /* 14 PendSV */
.word hang /* 15 SysTick */
.word hang /* 16 External Interrupt(0) */
.word hang /* 17 External Interrupt(1) */
.word hang /* 18 External Interrupt(2) */
.word hang /* 19 ... */
.thumb_func
.global _start
_start:
/*ldr r0,stacktop */
/*mov sp,r0*/
bl notmain
b hang
.thumb_func
hang: b .
您需要将堆栈顶部地址设置为特定于您的处理器的第一项。使用 llvm 您可能需要在这里调整一些指令,以上是针对 gnu 的。
关于embedded - 裸机 ARM 应用程序启动时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17123958/
ASIDE:是的,这可以被认为是一个主观问题,但我希望从回答的统计数据中得出结论。 有各种各样的计算设备。它们的物理尺寸、计算能力和电力各不相同。我想知道嵌入式开发人员认为什么是使系统“嵌入式”的决定
当我听到这个时,我总是想到移动设备。但为什么硬件“嵌入”在那里?整个设备不就是硬件吗?为什么个人电脑没有嵌入式硬件系统? 最佳答案 在当今世界,嵌入式仅指具有以下一项或多项特征的系统: 单一用途(即,
我想测试嵌入式 PowerBI 所以我下载了 the sample app能够发布 pbix 文件并嵌入它。 所以我创建了最简单的 PowerBI 文件,可以使用 Azure SQL 制作,使用 Di
我需要问几个关于词嵌入的问题......可能是基本的。 当我们转换一个词的 one-hot 向量时,例如 king [0 0 0 1 0]嵌入向量 E = [0.2, 0.4, 0.2, 0.2] .
我想知道如何将 CEF 添加到我的 Yocto 项目中。此时,我还没有对项目进行任何修改。它由我们的电路板制造商提供。该板有一个ARM 9。 最佳答案 直接在 CEF 论坛上问这个问题是个好主意,可能
实体是否可以访问其 Embedded 对象的 Embedded?例如: @Embeddable public class Address { @Embedded protected A
我有一个类似于这个的 Morphia 架构: @Entity class BlogEntry { @Embedded List comments } @Embedded class B
我的 pom.xml 中有以下插件配置: com.day.jcr.vault maven-vault-plugi
直到现在,我仍然对 Openembedded-core 和 meta-openembedded 中的食谱感到困惑。很多时候,很难将食谱放在正确的目录中。它们真的很相似,但在食谱的内容上似乎如此不同。
我正在尝试使用此处找到的 Tensorflow 运行单词教程的矢量表示: http://www.tensorflow.org/tutorials/word2vec/index.md 第一个脚本 wor
谁能帮我解释一下 power BI premium 和 power BI Embedded 之间的区别? 最佳答案 Power BI Embedded 容量(也称为 SKU)是 billed hour
我在执行一个 MongoDB 请求时遇到了一些麻烦。我在 Node.js 上下文中使用 MongoDB 3.2 和 Mongoose。这是文档: { _id: ObjectId('12345'),
Xcode 常规选项卡中的“嵌入式二进制文件”和构建阶段选项卡中的“嵌入式框架”有什么区别? General 选项卡中的“Linked Frameworks”和 Build Phrases 选项卡中的
我正在尝试执行 maven install在 pom 上,显示的结果是: Grave: SEC5054: Certificate has expired 此结果会在测试执行开始后立即出现。 我一直在搜
我正在研究 ppc32 和 ppc64 架构来为我的编译器实现一个新的后端,但是我对一个函数的序言有疑问,我已经阅读了几个关于 PowerPC 的 IBM 文档,但是我读到的关于堆栈的信息很少.一个程
我大部分时间都在使用 Atmel Studio 等工具和 IDE 开发微 Controller ,并抽象出幕后发生的事情。 假设在这种情况下,我们直接从闪存执行代码,这在嵌入式系统中可能是这种情况。
我刚刚发现我在(Cortex M0)上编写代码的ARM不支持未对齐的内存访问。 现在,在我的代码中,我使用了很多打包结构,并且从未收到任何警告或硬故障,所以当Cortex不允许不对齐访问时,Corte
我正在研究 Uboot bootstrap 。我有一些关于 Bootloader 的功能和它要处理的应用程序的基本问题: Q1:据我所知,引导加载程序用于将应用程序下载到内存中。在互联网上,我还发现引
我想了解基本的RISC架构。经过一些研发,我想使用MIPS架构。但是,我没有获得有关带有MIPS处理器的嵌入式开发板的良好信息。 如果有人可以提出好的董事会建议,将会有很大的帮助。 问候, 拉姆吉 最
考虑我们正在为裸机 MCU 编写固件,即没有操作系统。有人告诉我不可能(非法?)将参数传递给中断处理函数? 我无法准确理解为什么会这样?这有什么问题? 附注。是否可以在某些 RTOS-es、嵌入式 L
我是一名优秀的程序员,十分优秀!