【第21期】观点:人工智能到底用 GPU?还是用 FPGA?

ARM11学习笔记(一)

原创 2012年03月24日 17:38:29

学习ARM11裸机开发已经一个月了,从最开始的迷茫,毫无头绪,一步一步地走过来,总算有点收获吧。再深刻的记忆总是敌不过时间的侵蚀,因此有必要把这段时间来的心得体会记录下来,供以后的自己参考。

(1)      ARM的软件结构

为理解ARM程序的运行流程,得先知道程序在ARM中是怎么放置的。

一个程序包含很多源文件,而每个源文件都有三个输入段组成:代码段(CODE,RO),初始化的变量段(DATA,RW)和未初始化的变量段(BSS,ZI)。所有源文件中的相同的输入段组成一个域的输出段,所以一个域也是包含三个输出段:RO,RW,ZI。此外,程序在内存中的存放还涉及两个概念:装载域和执行域。装载域是指将程序(bin文件)下载到ARM板子上时存放的位置,此时RW段是存放在RO段后面连续的空间内,还没有ZI段。执行域是程序执行时各个段的位置。这就引出,怎样设定执行域呢?

如果是用ADS1.2(不支持ARM11内核~~)或RVDS2.2编写编译程序的话,在ARM Linker设置一栏可以设置RO_BASE,RW_BASE的值(LinkerType选择Simple)。RO_BASE,RW_BASE就分别是程序的RO段和RW段存放的起始位置,ZI段接着RW段后存放。用这种方式指定执行域的话,会产生几个重要的编译器常量(看名字就知道是什么意思了):Image$$RO$$Base,Image$$RO$$Limit,Image$$RW$$Base,Image$$ZI$$Base,Image$$ZI$$Limit。这几个变量在将程序从装载域搬到执行域的时候需要用到。

还有一种方式就是选择LinkerType为Scattered,然后在Scatter中指定Scatter文件。这种方式可以完成非常复杂的程序映射。例如,可以指定某个文件的某个段放在某个地方。Scatter文件同样可以产生一些编译器常量,Image$$Region_Name$$Base,Image$$ Region_Name$$Limit。其中的Region_Name就是在Scatter文件中定义的执行域的名称了。用这种方式的话,一般将主函数写为main(),即可调用C库函数自动完成程序的搬移和堆栈的初始化(这里有个问题是,某些库函数需要改写,以后再说)。

(2)      ARM汇编与C编程

这部分只要随便找本教材看看就行。

(3)      我的第一个裸机程序

了解了一些基本知识后就可以写最简单的裸机程序啦——点亮led灯。

查看板子的电路图看led灯是与哪个GPIO口相连,以及高低电平。


现在只要通过设置M端口的三个寄存器GPMCON,GPMDAT,GPMPUD就可以实现led1,led2流水灯啦。程序源码如下:

GPIO_BASE                EQU         0x7F008000

GPMCON                   EQU                    0x7F008820

GPMDAT                    EQU                    0x7F008824

GPMPUD                    EQU                    0x7F008828

 

MACRO

         SETGP       $RegName,$SetBit,$SetValue

         ldr    r2,=$RegName

         ldr    r3,[r2]

         bic    r3,$SetBit

         orr    r3,$SetValue

         str    r3,[r2]

         MEND

        

         AREA        Init,CODE,READONLY

         ENTRY

        

         ;Init the GPM0,1

         SETGP       GPMCON,#0xff,#0x11;设置GPM0,GPM1为输出端口

         SETGP       GPMPUD,#0xf,#0x0;Disablepull up/down

         SETGP       GPMDAT,#0x3,#0x0;初始电平为0,即不点亮led灯

 

ledflow

         SETGP       GPMDAT,#0x3,#0x1;01,led1亮

         bl delay

         SETGP       GPMDAT,#0x3,#0x2;10,led2亮

         bl delay

         b       ledflow

        

delay         ldr r0,=0x186A0

                   mov r1,#0

loop

                   add  r1,r1,#1

                   cmp r0,r1

                   bne  loop

                   mov pc,lr

         LTORG

        

         END

设置一下:Assemble和Compile项都设置为ARM1176JZF-S;Linker项LinkerType选Simple,RO_BASE设为0x50000000(SDRAM);FromELF项Outputformat设为Plain Binary,输出文件名设为ledtest.bin。make一下,bin文件生成。下载到板子中去…

第一个裸跑程序完成啦~
版权声明:本文为博主原创文章,转载请注明出处。 举报

相关文章推荐

ARM汇编学习笔记

ARM汇编学习笔记     2008-06-8 07:01:05 大 中 小 标签:IT/科技     这两天参加了一个编写操作系统的项目,因为要做很多底层的东西,而且这个操作系统是嵌入式的,所以开始...

Arm学习笔记(一)

一、概述 Arm芯片具有RISC体系的一般优点,比如: 具有大量的寄存器 绝大多数操作都在寄存器中进行,通过Load/Store的体系结构在内存和寄存器间传递数据 寻址方式简单 采用固定长度的指令格式 Arm体系采用了一些特别的技术,在保证高性能的同时尽量减小芯片体积,降低芯片功耗: 在同一条数据处理指令中包含算术逻辑处理单元处理和移位处理 使用地址自动增加(减少

ARM11 MPCORE 学习笔记

ARM11 MPCORE 学习笔记 1,支持16mb supersection,1MB section,64KB large page,4KB small page分页 2,asid怎么用 ...

ARM学习笔记(八)--寻址方式

寻址方式 <ul style="margin-top: 0in; unicode-bidi: embed; direction: ltr; margin-bottom: 0in; margin-left: 0.02in;"

ARM Cortex-M3 学习笔记(1)

最近在学ARM Cortex-M3,找了本号称很经典的书“An Definitive Guide to The ARM Cortex-M3”在看。这个系列学习笔记其实就是在学习这本书的过程中做的读书笔...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)