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文件生成。下载到板子中去…

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

基于S3C6410的ARM11学习(一) 基础知识

手上有一块OK6410的板子,就想起来花点时间学习下经典的ARM系列ARM11。了解一下ARM11的开发流程,以及怎么跑系统。 ARM11和之前学习的STM32的开发是很不一样的。STM32,都是把...
  • QQ576494799
  • QQ576494799
  • 2016年02月19日 14:21
  • 1073

基于ARM11的嵌入式linux系统移植与实现--笔记二

构建嵌入式Linux系统 由于6410片内只有8k的内存,但是u-boot的代码有将近200k。为了实现功能必须外扩RAM和ROM,芯片公司为了更好的实现这个功能,在硬件上,当上电启动的时候由硬件完...
  • u013716401
  • u013716401
  • 2014年03月13日 16:31
  • 741

Linux学习笔记之——起始篇

摘要:学习笔记目录、方便以后回顾、没有什么捷径可走、不断的记录、总结、练习、coding、coding。...
  • chenghuaying
  • chenghuaying
  • 2014年03月31日 16:47
  • 4566

在计算机学习,善用“笔记软件”

为知笔记 Linux 版 2015-12-03 产品更新 提示:软件的名称由wiznote修改为WizNote,在终端命令行下需要使用WizNote来打开程序。 更新日志: 2.3.2 版本(201...
  • Lina_ACM
  • Lina_ACM
  • 2016年08月03日 10:41
  • 805

斯坦福机器学习网易公开课笔记1

之前在coursera上看了Andrew Ng的机器学习课程,那个课程比较简明,适合对机器学习有一个整体的印象,但是很多细节的内容和推导都忽略了。现在想要了解机器学习更多,所以开始看Andrew Ng...
  • zhonglj0314
  • zhonglj0314
  • 2017年02月20日 09:57
  • 532

《Java JDK8学习笔记》读书笔记(4)

第4章 认识对象 学习目标  区分基本类型与对象类型  了解对象与引用的关系  从打包器认识对象  以对象观点看待数组  认识字符串的特性...
  • mouyong
  • mouyong
  • 2016年04月18日 20:10
  • 4423

Angularjs 学习笔记(一)基础

1.简介: Angular JS (Angular.JS) 是一组用来开发Web页面的框架、模板以及数据绑定和丰富UI组件。它支持整个开发进程,提供web应用的架构,无需进行手工DOM操作。 Ang...
  • qq_25178609
  • qq_25178609
  • 2016年10月02日 16:13
  • 480

myBatis学习笔记(1)——快速入门

在项目中使用myBatis 导入jar包 在src下创建配置文件
  • u010837612
  • u010837612
  • 2015年05月12日 11:06
  • 897

Spring MVC 学习笔记(一)

(* 笔记内容均来自 尚硅谷 佟刚老师的视频,例子是在学习中照着敲的) 内容概要 • 1.SpringMVC概述 • 2.SpringMVC的HelloWorld • 3.使用@RequestMapp...
  • u011870547
  • u011870547
  • 2016年01月07日 14:50
  • 1708

操作系统学习笔记(七)

关于存储器管理
  • qq_24282081
  • qq_24282081
  • 2017年04月26日 21:23
  • 322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ARM11学习笔记(一)
举报原因:
原因补充:

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