- 1、本文档共35页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
《如何让led发光》.doc
额思路: 不按datasheet介绍,从实战出发,以例子为基础讲解概念
?
?
第一章无论学习一门语言还是一个新的平台上开始开发,从最简单的例子入手总是最容易的,比如C语言学习中的HelloWorld程序,一个简单的例子,不但可以消除接触新语言新平台的恐惧感,而且可以用最小的代价,完成一个从源程序到最终运转的实际应用。和语言学习一样,在Arm平台上的嵌入式开发,我们也遵循这个步骤,从一个打印出的HelloWorld的应用开始,进入到嵌入式开发的世界。相比一门语言的HelloWorld,Arm平台的HelloWorld要略显复杂一些。以Linux平台的C语言HelloWorld程序为例,我们只需要选用正确的编译工具,编译下面的程序,生成一个可执行文件,然后运行这个程序,就会在屏幕上打出“HelloWorld”。#include stdio.hint main(){????printf(“HelloWorld\n”);????return 0;}嵌入式平台的HelloWorld,不是在一个现成的操作系统上运行的单纯程序,因此不但要保成程序的正确性,能编译生成可执行文件,更重要的是在程序运行前,必须要做一系列的准备工作。反过来说,即使生成了可执行文件,如果没有和硬件的配置匹配的话,也是不可能在嵌入式平台上正确的运行的。
这一章的目标就是从一个C语言的HelloWorld为基础,打造一个能在嵌入式平台上运转的Helloworld开始,一步一步的扩展功能,最后目标是能将得到广泛应用的bootloader U-boot移植到我们的开发板上。第一节 嵌入平台的HelloWorld嵌入式应用程序简介由于我们是在一个没有操作系统的ARM嵌入式平台上开发,因此,和一般操作系统上的C语言程序不同,程序的执行并不是从main函数开始的。根据ARM CPU的式样,在CPU上电启动后的第一个动作就是硬件复位(Reset),当复位完成以后,CPU会发出一个复位异常(Reset Excepton),伴随着这个复位异常,CPU就会到0开始的地址去读取可执行代码。那么如果我们有办法把main函数放到0地址,是不是就可以上电以后就直接执行C语言的main函数了呢?的确,是有办法把main函数放到0开始的地址上的。但是仅有这些是不够的,根据ARM CPU的式样,ARM系统具有8种异常,如表1-1所示,分别对应8种不同的异常原因,我们刚才提到的复位异常只是其中的一种,对应这些异常,一共有8个异常向量与之相对应,也就是说当某一种异常发生的时候,CPU会自动跳转到这个向量所对应的地址上去,执行预先放到这个地址里的代码。那么显而易见,这些异常响亮必须放到某个预先规定好的地方。对于ARM CPU来说,这个地址固定在从0开始的4*8=32字节的地址上。由于每个异常向量只能占有4个字节的位置,要想放下这个异常所对应处理的全部代码是不可能的,实际上4个字节只够ARM CPU的一条机器指令,我们唯一的选择就是在这里放一条跳转指令,跳转的目的地才是真正的异常处理程序的地址。总结一下上面所提到的式样,我们发现ARM嵌入平台的入口代码必须满足下面这些要求:1. 从0开始的32个字节必须放置8种异常对应的异常处理代码2. 每个异常处理代码只有4个字节空间,因此必须放入跳转指令3. 0字节开始第一个指令对应系统的复位异常处理而C语言写出的程序,显然不可能精确到机器指令单位。对上述要求来说,唯一的选择就是用汇编语言来实现入口代码。除此之外,在调用C语言函数之前,必须设定好堆栈指针,这也必须用汇编语言来实现。对于一个只有C语言编程经验的人来说,汇编语言似乎是繁琐,晦涩的代名词,其实不然,汇编语言指令虽然不如C语言那么容易读写,但是一旦掌握了常用指令的含义和用法,就会发现汇编语言其实并不难,而且重要的是,一旦我们掌握了汇编语言,就可以写出C等其他高级语言不可能实现或者实现起来很困难的功能,比如我们现在需要的的入口代码程序。本书没有用专门的篇幅来介绍汇编语言的语法,而是结合书中例子里,对涉及到的语法进行说明。读者也可以参考一本系统讲解ARM汇编语法的书,来理解本书中的实例。第一个HelloWorld既然C语言的函数,不能作为整个系统的入口函数,那么我们可以采用任何一个函数作为HelloWorld的C语言入口函数,在这里,为了区别起见,我们把main改成arm_start,让它成为HelloWorld的C语言部分的入口函数。也就是上面汇编程序里调用的C语言入口函数。对于C语言程序来说,因该没有比打印一个”HelloWorld到屏幕上更简单的例子了,可是对嵌入式系统来说,却不是很容易的一件事情。我们知道,printf
您可能关注的文档
最近下载
- 2023-2024学年上海市长宁区高中数学人教A版选修二第四章-数列章节测试-19-含解析.pdf VIP
- 大学英语六级词汇汇总.pdf VIP
- 乡愁英文版.pptx
- 2023-2024学年江苏省南通市高中数学人教A版选修二第四章-数列章节测试-19-含解析.pdf
- 2022年黑龙江省大庆市中考道德与法治试卷(word精校版).docx
- JTT329-2010 公路桥梁预应力钢绞线用锚具、夹具和连接器.docx VIP
- 水电站大坝主体混凝土施工组织设计.doc
- 2023-2024学年北京市西城区高中数学人教A版选修二第四章-数列章节测试-9-含解析.pdf
- 20秋新疆电大一体化 社会保障学 (50627)章节测验1-24答案.pdf
- 2023年全国乙卷理科综合高考试卷(原卷+答案).pdf
文档评论(0)