点击这里给我发消息

点击这里给我发消息

点击这里给我发消息

首页 | 教学管理 | 校园生活 | 学校制度 | 教学模式 | 招生培训 | 阳光概况 | 成功学子 | 就业导航 | 技术园地 | 王牌专业 | 函授教学
  您当前的位置:湖南阳光电子技术学校 -> 技术园地 -> 综合维修园地 -> 文章内容
如何利用ARM处理器设计出结构简单的应用程序
发布时间:2011-10-12 15:41:30  发布人:cswok
 

  ARM处理器支持位置无关的程序设计,这种程序加载到存储器的任意地址空间都可以正常运行,其设计方法在嵌入式应用系统开发中具有重要的作用。尤其在裸机状态下开发Bootloader程序及进行内核初始化设计;利用位置无关的程序设计方法还可以在具体应用中用于构建高效率动态链接库,因而了解位置无关的程序设计方法,有助于开发人员设计出结构简单、清晰的应用程序。

  应用程序必须经过编译、汇编和链接后才变成可执行文件,在链接时,要对所有目标文件进行重定位(relocatiON),建立符号引用规则,同时为变量、函数等分配运行地址。当程序执行时,系统必须把代码加载到链接时所指定的地址空间,以保证程序在执行过程中对变量、函数等符号的正确引用,使程序正常运行。在具有操作系统的系统中,重定位过程由操作系统自动完成。

  在设计Bootloader程序时,必须在裸机环境中进行,这时Bootloader映像文件的运行地址必须由程序员设定。通常情况下,将Bootloader程序下载到ROM的0x0地址进行启动,而在大多数应用系统中,为了快速启动,首先将Bootloader程序拷贝到SDRAM中再运行。一般情况下,这两者的地址并不相同,程序在SDRAM中的地址重定位过程必须由程序员完成。实际上,由于Bootloader是系统上电后要执行的第一段程序,Bootloader程序的拷贝和在这之前的所有工作都必须由其自身来完成,而这些指令都是在ROM中执行的。也就是说,这些代码即使不在链接时所指定的运行时地址空间,也可以正确执行。这就是位置无关代码,它是一段加载到任意地址空间都能正常执行的特殊代码。

  位置无关代码常用于以下场合:

  程序在运行期间动态加载到内存;

  程序在不同场合与不同程序组合后加载到内存(如共享的动态链接库);

  在运行期间不同地址相互之间的映射(如Bootloader程序)。

  虽然在用GCC编译时,使用-fPIC选项可为C语言产生位置无关代码,但这并不能修正程序设计中固有的位置相关性缺陷。特别是汇编语言代码,必须由程序员遵循一定的程序设计准则,才能保证程序的位置无关性。

  ARM程序的位置无关可执行文件PIE(PositionIndependent Executable)包括位置无关代码PIC和位置无关数据PID(PositionIndependent Data)两部分。

  PID主要针对可读写数据段(.data段),其中保存已赋初值的全局变量。为实现其位置无关性,通常使用寄存器R9作为静态基址寄存器,使其指向该可读写段的首地址,并使用相对于基址寄存器的偏移量来对该段的变量进行寻址。这种方法常用于为可重入程序的多个实例产生多个独立的数据段。在程序设计中,一般不必考虑可读写段的位置无关性,这主要是因为可读写数据主要分配在SDRAM中。

  PIC包括程序中的代码和只读数据(.text段),为保证程序能在ROM和SDRAM空间都能正确运行(如裸机状态下的Bootloader程序),必须采用位置无关代码程序设计。

  PIC遵循只读段位置无关ROPI(ReadOnly Position Independence)的ATPCS(ARMThumb Procedure Call STandard)的程序设计规范:

  程序设计规范 #e#

  (1) 程序设计规范1

  引用同一ROPI段或相对位置固定的另一ROPI段中的符号时,必须是基于PC的符号引用,即使用相对于当前PC的偏移量来实现跳转或进行常量访问。

  ① 位置无关的程序跳转。在ARM汇编程序中,使用相对跳转指令B/BL实现程序跳转。指令中所跳转的目标地址用基于当前PC的偏移量来表示,与链接时分配给地址标号的绝对地址值无关,因而代码可以在任何位置进行跳转,实现位置无关性。

  另外,还可使用ADR或ADRL伪指令将地址标号值读取到PC中实现程序跳转。这是因为ADR或ADRL等伪指令会被编译器替换为对基于PC的地址值进行操作,但这种方式所能读取的地址范围较小,并且会因地址值是否为字对齐而异。

  但在ARM程序中,使用LDR等指令直接将地址标号值读取到PC中实现程序跳转不是位置无关的。例如:  LDR PC, =main

  上面的伪指令编译后的结果为:  LDR PC, [PC, OFFSET_TO_LPOOL]

  ?   LPOOL

  DCD main

  可见,虽然LDR是把基于PC的一个存储单元LPOOL的内容加载到PC中,但该存储单元中保存的却是链接时所决定的main函数入口的绝对地址,所以main函数实际所在的段不是位置无关。

  ② 位置无关的常量访问。在应用程序中,经常要读写相关寄存器以完成必要的硬件初始化。为增强程序的可读性,利用EQU伪指令对一些常量进行赋值,但在访问过程中,必须实现位置无关性。下面以PXA270的GPIO初始化介绍位置无关的常量访问方法。

  GPIO_BASE EQU 0x40e00000; GPIO基址寄存器地址

  GPDR0 EQU 0x00c; 相对于GPIO基址寄存器的偏移量

  init_GPDR0 EQU 0xfffbfe00; 寄存器GPDR0初值

  LDR R1, =GPIO_BASE

  LDR R0, =init_GPDR0

  STR R0, [R1, #GPDR0]

  上述汇编代码段经编译后的结果为:

  LDR R1, [PC, OFFSET_TO_GPIO_BASE]

  LDR R0, [PC, OFFSET_TO_init_GPDR0]

  STR R0, [R1, #0xc]?

  GPIO_BASE

  DCD 0x40e00000

  GPDR0

  DCD 0x00c

  init_GPDR0

  DCD 0xfffbfe00

  可见,LDR伪指令实际上使用基于PC的偏移量来对符号常量GPIO_BASE和init_GPDR0进行引用,因而是位置无关的。由此可以得出如下结论:使用LDR伪指令将一个常量读取到非PC的其他通用寄存器中可实现位置无关的常量访问;但将一个地址值读取到PC中进行程序跳转时,跳转目标则是位置相关的。

  (2) 程序设计规范2

  其他被ROPI段中的代码引用的必须是绝对地址,或者是基于可读写位置无关(RWPI)段的静态基址寄存器的可写数据。

  使用绝对地址只能引用被重定位到特定位置的代码段中的符号,通过在位置无关代码中引入绝对地址,可以让程序跳转到指定位置。例如,假设Bootloader的阶段1将其自身代码拷贝到链接时所指定的SDRAM地址空间后,当要跳转到阶段2的C程序入口时,可以使用指令“LDR PC, =main”跳转到程序在SDRAM中的main函数入口地址开始执行。这是因为程序在编译链接时给main函数分派绝对地址,系统通过将main函数的绝对地址直接赋给PC实现程序跳转。如果使用相对跳转指令“B main”,那么只会跳转到启动ROM内部的main函数入口。

[] [返回上一页] [打 印] [收 藏]

 相关网站搜索:

百度中找“如何利用ARM处理器设计出结构简单的应用程序”的内容

GOOGLE中找“如何利用ARM处理器设计出结构简单的应用程序”的内容

栏目导航

· 维修资料 · 综合维修园地
· 电脑维修天地 · 电子基础知识
· 音响维修园地 · 数码产品维修园地
· 笔记本园地 · 显示器维修园地
· 液晶电视维修 · 冰箱维修园地
· 空调维修园地 · 手机维修园地
· 电视维修园地 · 电工焊工园地
· 网络工程园地

 王 牌 专 业
· 电脑维修|液晶电视维修班(朝..
· 中级电工家电维修培训班
· 电工培训|中级电工培训
· 焊工培训|中级焊工培训
· 中级电工培训 + 中级焊工培训..
· 手机维修培训|湖南手机维修培..
· 家电维修培训|全能家电维修培..
· 电脑维修培训|电脑硬件维修培..
· IT通讯维修专业|电脑手机维修..
· 电脑电器维修专业|湖南电脑电..
· 家电通讯维修专业|湖南家电手..
· 精锐电子维修专业|全能电子维..
· 液晶电视维修培训|平板电视维..
· 制冷维修培训|空调冰箱维修培..
 

热门文章

· 电脑维修培训|电脑硬..
· 入学须知
· 2011年收费标准
· 家电维修培训|全能家..
· [图文] 电动车48V充电..
· [图文] 电工培训|中级..
· [组图] 学生生活安排..
· 电脑电器维修专业|湖..
· [图文] 就业安置流程..
· 精锐电子维修专业|全..

推荐图文

首页 阳光概况 王牌专业 教学管理 就业导航 成功学子 技术园地 招生资讯 精锐师资 综合讯息
  友情链接               ;    申请友情链接
电工培训网,电工培训,电工培训学校,维修电工培训,中级电工培训,电工证书培训,低压电工培训,电工培训机构,维修电工培训班,维修电工培训学校,电工培 训考证,高级维修电工培训,短期电工培训,电子电工培训,电工特种作业培训,初级电工培训班,中级电工培训学校,中级电工培训班,专业电工培训,水电工培 训,电工培训教材,电工培训视频,电工短期培训班,电工培训资料,电工技师培训,高级电工培训, 电工学校,维修电工学校,高级电工学校,,贵州电工学校,广西 电工学校,电工学校哪里好,江西电工学校,电工技术培训学校,维修电工培训学校,电工维修培训学校,电工技师培训学校,中级电工培训学校,电工焊工培训 学校,电工职业学校,电工考证培训学校,电工焊工学校,电工技术学校,高压电工培训学校,水电工培训学校,电工中级培训学校,电工技能培训学校,低压电工 培训学校,电工专业学校,江西电工培训学校,学电工技术,电工学习班,中级电工培训学校,中级电工培训班,专业电工培训, ,高级焊工学校,湖南焊工学校,焊 工专业学校,电工焊工培训学校,电焊工考证培训学校,湖南焊工培训学校,焊接学校,高级焊工培训,焊工技术培训,焊接培训中心, 电工焊工培训,电气焊工培 训,气焊工培训,焊工培训班,焊工培训考证,高级电焊工培训,专业焊工培训,焊工培训机构,焊工培训多少钱,高压焊工培训,电焊工培训内容,特种焊工培训 , 焊工培训取证,电焊工培训机构,焊工培训,电焊工培训教学大纲,焊工培训计划,焊工培训总结,电焊工培训资料,电焊工培训方案,电焊工培训课程,初级电焊 工培训大纲,电焊工培训课件,焊工培训资料,电焊工培训教材,电焊工培训计划,电焊工培训视频_面向全国招生!主要招生区域是:北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 安庆 鞍山 安阳 安康 澳门 安顺 阿克苏 北京 包头 保定 白山 白城 本溪 滨州 保山 巴彦淖尔 百色 蚌埠 宝鸡 亳州 北海 白银 巴中 重庆 长沙 赤峰 长春 朝阳市 滁州 巢湖 池州 长治 常州 常德 沧州 崇左 承德 成都 潮州 郴州 大连 东莞 达州 丹东 大庆 大同 定西 德阳 德州 东营 鄂尔多斯 鄂州 佛山 福州 防城港 抚顺 抚州 阜阳 阜新 广州 桂林 广元 广安 固原 贵港 贵阳 赣州 哈尔滨 杭州 合肥 呼和浩特 海口 菏泽 邯郸 黄山 衡水 香港 呼伦贝尔 贺州 葫芦岛 淮北 淮南 淮安 湖州 鹤岗 黑河 河源 惠州 汉中 河池 怀化 黄冈 鹤壁 黄石 衡阳 海拉尔 济南 锦州 吉林 江门 济宁 佳木斯 鸡西 嘉兴 九江 揭阳 焦作 晋城 金华 荆门 吉安 景德镇 晋中 酒泉 嘉峪关 金昌 荆州 昆明 开封 克拉玛依 临沂 拉萨 廊坊 兰州 六安 洛阳 泸州 乐山 辽源 聊城 吕梁 龙岩 临汾 临夏 来宾 辽阳 丽水 六盘水 连云港 柳州 临沧 陇南 丽江 莱芜 娄底 漯河 凉山州 马鞍山 牡丹江 眉山 茂名 绵阳 梅州 南京 宁波 宁德 南充 南通 南宁 南昌 南平 南阳 平顶山 盘锦 莆田 萍乡 濮阳 攀枝花 普洱 平凉 齐齐哈尔 钦州 七台河 泉州 清远 衢州 秦皇岛 曲靖 庆阳 青岛 日照 荣成 上海 深圳 商丘 沈阳 内江 随州 三门峡 三明 十堰 绍兴 韶关 邵阳 石嘴山 遂宁 汕头 双鸭山 四平 松原 石家庄 苏州 绥化 宿迁 商洛 宿州 汕尾 上饶 朔州 石河子 太原 天津 唐山 泰安 台州 通化 铁岭 台湾 通辽 泰州 铜陵 铜川 天水 武汉 威海 芜湖 梧州 渭南 吴忠 乌海 乌兰察布 潍坊 温州 乌鲁木齐 无锡 武威 文山 西安 厦门 襄樊 信阳 邢台 新乡 孝感 湘潭 宣城 许昌 咸宁 徐州 忻州 新余 兴安盟 咸阳 西宁 益阳 银川 烟台 宜昌 扬州 永州 伊春 宜宾 延边 运城 玉林 盐城 阳江 雅安 阳泉 延安 义乌 云浮 玉溪 岳阳 宜春 营口 榆林 鹰潭 郑州 漳州 株洲 驻马店 张家界 中卫 舟山 肇庆 淄博 湛江 中山 自贡 资阳 镇江 珠海 张家口 周口 枣庄 张掖 遵义 昭通

全国报名电话:0731-85579057

家电维修学校 | 家电维修培训 | 电脑维修培训学校 | 湖南手机维修培训学校 | 电子技术学校 | 电子学校 | 电子维修学校 | 湖南电工焊工培训学校 | 笔记本电脑维修培训 | 显示器维修培训 | 手机维修培训 | 手机维修学校 | 电脑电器维修学校 | 电子技术学校 | 电子维修学校 | 湖南电脑培训学校 | 湖南计算机培训 | 湖南计算机维修学校 | 电脑组装与维护培训 | 网络工程师培训 | 主板维修培训 | 硬盘维修培训 | 电工培训 | 焊工培训 | 液晶电视维修培训 | 彩电维修培训 | 冰箱空调维修培训 | 制冷维修培训

友情连接 - 网站地图 关于收录
      报名电话:0731-85579057    0731-85569651    24小时值班电话:13807313137(杨老师)   咨询QQ: 361928696,  873219118 
校址:湖南省 长沙市 雨花区 车站南路 红花坡路口    网站:
http://www.cswok.com    报名信箱: 879330360@qq.com
 

高级会员:73254人
普通会员:598622人