人人范文网 工作汇报

嵌入式工作汇报(精选多篇)

发布时间:2020-04-05 07:34:46 来源:工作汇报 收藏本文 下载本文 手机版

推荐第1篇:嵌入式

嵌入式简介

1,嵌入式组成

一个嵌入式系统装置一般都由嵌入式计算机系统和执行装置组成,嵌入式计算机系统是整个嵌入式系统的核心,由硬件层、中间层、系统软件层和应用软件层组成。执行装置也称为被控对象,它可以接受嵌入式计算机系统发出的控制命令,执行所规定的操作或任务。执行装置可以很简单,如手机上的一个微小型的电机,当手机处于震动接收状态时打开;也可以很复杂,如SONY 智能机器狗,上面集成了多个微小型控制电机和多种传感器,从而可以执行各种复杂的动作和感受各种状态信息。 2,嵌入式前景

嵌入式软件开发应用领域

嵌入式系统是当前最热门、最具发展前途的IT应用领域之一。包括手机、电子字典、可视电话、数字相机、数字摄像机、U-Disk、机顶盒、高清电视、游戏机、智能玩具、交换机、路由器、数控设备或仪表、汽车电子、家电控制系统、医疗仪器、航天航空设备等都是典型的嵌入式系统。因此,通过嵌入式培训成为专业的嵌入式技术人才,其职业发展空间较大。嵌入式软件开发人才需求

目前国内嵌入式人才极度匮乏,权威部门统计,我国目前嵌入式软件人才缺口每年为40万人左右。供不应求使得嵌入式人才身价上涨,而且,越有专业经验,就业竞争力就越大。因此,IT专业人士通过培训掌握嵌入式技术,就能成为炙手可热的专业人才,其培训回报有保障。

嵌入式软件开发就业方向

由于3G持续升温,这方面的人才也保持了供不应求的势头。据悉,目前国内3G核心嵌入式人才不足万人,其中华为约5000-6000人,中兴通讯、大唐各约2000人,以区区万人的阵容去争夺据称有上千亿元的市场,3G嵌入式工程师的身价由此可见一斑。在近期的人气职位榜上,电信行业嵌入式工程师行市走高,嵌入式研发工程师、嵌入式技术支持工程师都高居前五位。

3,总结

嵌入式是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。由于嵌入式系统通常具有低功耗、体积小、集成度高等特点,因此随着消费家电的智能化和廉价微处理器的出现,嵌入式系统将在日常生活里形成更大的应用领域。嵌入式就业广泛,嵌入式人才社会需求量大。

10级电子本科2班

叶玉成

推荐第2篇:嵌入式linux1

设备的驱动程序和应用程序的区别:1应用程序以main开始,驱动程序没有main,它的一个模块初始化函数作为入口。2应用程序从头到尾执行一个任务,驱动程序完成初始化后不再运行,等待系统调用。3应用程序可以使用C函数库,驱动程序不能使用。

普通和预定义变量有什么区别:自定义变量的值由用户自行设定,而预定义变量一部分为默认值,一部分为设定值,预定义变量:AR:库文件维护程序的名称,默认值ar,as:汇编程序的名称默认值为as,cc;c编译器的名称默认值为cc。cxx:c++编译器名称

嵌入式系统:以应用为中心,以计算机为基础软件硬件剪裁,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的计算机系统。应用:手机,pad、MP

3、车载gps 机器人。特点、:1面性特定应用2系统内核小3专用性强4高实时性的系统软件。

用户系统命令:su:用户切换,useradd和pawd用户管理,ps和kill系统管理命令mount:文件系统命令。

Arm:存储格式:小端存储格式:低字节的内容保存在地地址空间高字节的内容保存在高地址空间里。大端存储格式:高字节存储在地地址中,低字节存储在高地址中。

简述嵌入式linux:1打开pc电源,cpu自动进入实模式,开始执行程序代码,并按bios中设置的启动设备进行启动。2linux进行内核引导,完成磁盘引导,读取机器系统数据等3执行init程序,init调用rc.sysinit和rc等程序,任务完成后返回init4init启动mingetty。打开终端供用用户登入系统。

Arm几种工作模式:1用户模式:应用程序执行状态2快速中断模式:用于高速数据传输货通道处理等快捷中断处理3外部中断模式:用于通用的中断处理4:管理模式:操作系统使用的保护模式(特求模式)5数据访问终止模式:用于虚拟存储及存储保护6系统模式:运行具有特权的操作系统任务7未定义模式

linux中的文件类型与windows显著区别在于linux对目录文件盒设备文件都当做文件操作系统处理文件格式都是不同的 windows操作系统内核是nt,而linux是shell;另外,windows硬盘格式是fat32或ntfs,而linux需要的文件格式是ext2或3,该操作系统还要多一个swap的交换分区

推荐第3篇:嵌入式论文

信息工程学院

课程设计报告书

专 业: 电子信息科学与技术 班 级: 0312412 学 号: 031241217 学生姓名: 肖文洲 指导教师: 刘三军

1

计算机专业嵌入式系统课程的研究与实践

【摘 要】随着电子技术的发展, 嵌入式技术成为当今信息技术发展的主流技术。嵌入式技术作为高校计算机专业的一个新方向已被许多学校采用。本文通过对嵌入式技术的分析, 提出了嵌入式系统课程体系建设的基本方法,包括专业培养计划、嵌入式系统教学实践平台建设以及嵌入式系统教学模式与教学方法创新等。 【关键词】嵌入式技术;研究与实践;计算机专业

随着电子技术和信息技术的快速发展及嵌入式硬件技术与软件技术的不断成熟,嵌入式系统的应用越来越广泛,如智能家电、手机、汽车电子、网络通信及电子娱乐产品等,随之而来的是社会对嵌入式产品开发人才的需求也越来越多。因此,许多高校都开设了嵌入式系统开发方面的系列课程。由于嵌入式系统课程涉及的知识面宽、实践性强,对实验教学的要求较高,包括实验教师、硬件配置、实验项目的设置等。因此,作为对新技术研究和探索最活跃的群体,高等院校如何接受嵌入式技术带来的挑战,尽快开设嵌入式系统的相关理论与实验课程,并逐渐形成较规范的教学体系已成为一个重要的研究课题。

一、嵌入式系统教学的特点

设置嵌入式系统课程的目的是让未来的软硬件开发人员了解和掌握必要的嵌入式系统设计方法的概念、方法和工具。同时由于嵌入式系统对其他学科领域的渗透,其他相关专业的学生也有学习该课程的需求与必要。如其他电子、自动化专业都可开设相应的选修课程,在某种程度上可以提升毕业学生的竞争力、就业率。嵌入式系统课程的教学内容应包括嵌入式系统体系结构、硬件构架、软件编程及外围设备接口和驱动等,注重培养学生的设计能力和软件开发能力;尽量反映该领域近年来最新的理论与技术,使学生了解学科的最新发展。 嵌入式系统课程的特点是涉及知识面广、综合性强、实践性强,并且学科发展快,因而学习难度大,难以形成一个简单明确的知识体系。同时该课程讲授难度很大,它要求教师不仅具备一般的计算机系统的软硬件知识,而且需要真正从事过嵌入式系统的开发实践,才能对嵌入式系统中的实时性等抽象概念和系统调试过程有感性认识。嵌入式系统教学主要有以下三个特点:(1)基础性。嵌入式系统技术涉及多个专业,如计算机工程、软件工程、工业自动控制、机电工程、精密仪器和电子工程等,嵌入式技术与各个专业相互渗透融合,将逐渐形成新的学科研究方向,因此,嵌入式系统可作为上述各专业的基础平台课,以强化专业基础知识。(2)综合性。嵌入式系统是软件和硬件设计的完美结合。它涉及电子信息、计算机、自动控制等诸多专业相关课程的内容,如语言、微机原理、单片机设计和操作系统等课程,有很强的综合性,因此,可以有效地对学生进行综合能力的培养。(3)实践性。嵌入式系统是理论与实践结合密切的课程。实验是嵌入式系统课程的重要组成部分,缺乏实验的嵌入式系统课程学习是纸上谈兵,因此,学生必须通过大量的实验和实践环节,来加深对嵌入式系统理论知识的理解。

二、适合计算机专业的嵌入式系统课程体系

嵌入式系统涉及电子、计算机、自动控制等诸多专业知识,专业性强,包括了操作系统、

2 微机原理、编程语言程序设计、计算机网络和接口设计等内容,是软件、硬件的完美结合。因此,嵌入式系统的设计原理与技术不是一门课程所能讲授的,需要建立一个课程体系。

嵌入式系统本身就是计算机系统。从广义上讲,目前计算机科学与技术专业的课程体系中所设置的许多专业基础课,比如数字逻辑、C/C++程序设计、计算机网络等,对嵌入式系统设计的学习者来说同样重要。在此,只从狭义的角度探讨嵌入式系统的课程体系设置。

由于嵌入式系统涉及的知识面广、应用层面广,所以应针对嵌入式系统设计与应用的不同层面的需求,设置不同层面的课程体系。从狭义上划分,嵌入式系统课程体系可以有以下三个不同的层面: 第一层面:针对将来只是应用嵌入式系统硬件、软件平台来进行二次开发的学生而言,应侧重培养其基于某个嵌入式系统平台上(包括硬件平台和软件平台)进行应用系统设计和开发的能力。因此,针对这一层面的学生应开设以下几门主要课程: 《嵌入式实时操作系统》:选取一个具体的操作系统比如uCLinux为例,讲授嵌入式操作系统的原理及应用,重点介绍如何进行任务划分、如何编写I/ O驱动程序等。 《嵌入式系统设计》:重点介绍嵌入式系统设计步骤、方法,重点介绍嵌入式应用软件的开发技术,以及嵌入式系统的测试技术及软件优化技术。 《嵌入式网络技术》:重点介绍基于嵌入式环境下的网络通信技术及应用,比如I2C总线技术、USB接口技术、嵌入式Web技术等,掌握相关的通信技术及接口编程。

第二层面:针对将来从事嵌入式系统平台设计及合作开发的学生而言,除需要学习上述三门课程外,还必须开设《嵌入式系统结构》课程。该课程重点介绍某个具有代表性的嵌入式CPU(如ARM系列)的系统结构、汇编指令系统、中断管理机制、常用外围接口,使学生掌握嵌入式平台设计的基础知识。前提是学生具备数字逻辑方面的相关基础知识。对于与第一个层面相同的课程,其授课中重点也不完全一样。比如,《嵌入式操作系统》课程可以嵌入式Linux为主,重点介绍进程调度、进程间通信、内存管理和I/O驱动机制等,使学生具备进行操作系统的裁剪、移植的基本能力。

第三层面:针对将来从事SOC(systemonChip)系统设计及开发的学生而言。主要课程有数字逻辑设计与应用、电子电路原理与PCB技术、EDA技术(FPGA设计及应用)、嵌入式系统结构、嵌入式操作系统等,偏重于底层的设计。

通过以上分析可以看出,第一层至第三层分别是嵌入式系统中由软到硬、由高层至底层的三个不同应用层次,对应不同的知识结构需求。第一层偏软,对底层的系统结构及接口等要求较低,是在当前比较容易实现的一个培养方向。在计算机本科专业中,软件方向比较适合开展第一个层面的嵌入式系统教学,应用方向比较适合开展第二个层面的嵌入式系统的教学。根据以上分析,可以提出在计算机本科专业开设嵌入式系统方向需要参照的课程体 系: (1)专业基础课:嵌入式系统概论、嵌入式系统原理与接口技术。 (2)专业必修课:嵌入式操作系统、嵌入式系统应用设计。

(3)专业选修课:嵌入式网络技术、嵌入式系统测试技术、嵌入式工程应用(即行业领域,如移动通信技术与应用、数字家庭网关技术等)、分布式嵌入式系统原理与设计等。

作为课程体系的一部分,实践教学是嵌入式系统教学的关键。实践教学设置的总体指导思想是:以培养创新动手能力为核心,建立“系统的多级课程实践”的实验体系,包含课程基础实验、课程设计、综合项目设计;同时,以“项目为中心”设计多层次的集中实践题目,各层次的题目难度不等,以适合不同层次的学生[4]。

(1)每门课保证至少30%以上的上机或实验学时,完成基础实验项目。 (2)至少有两门课的课程设计(约两周),如ARM汇编程序设计、操作系统移植实验、LCD/触摸屏等接口实验等等。

3 (3)至少完成一个综合课程设计(课余时间+综合实训时间共约40学时),类似于一个简单的工程项目,有设计、编程调试、性能测试等完整的步骤如手机游戏、校园导航、电子词典、嵌入式WEB服务器等。

(4)校企合作,建立实习基地,联合完成项目设计。

三、嵌入式系统课程体系在计算机专业的实践

我们在分析了企业对嵌入式人才需求的基础上,提出了“在计算机本科专业培养嵌入式系统人才”的具体实施方案,并在2007级、2008级本科生中进行了实践。

该课程定位为实验研究型。目标是通过嵌入式实验平台学习构建一个嵌入式系统的一般方法,熟悉一些常用的微处理器、存储器、外设接口并学习软硬件设计方法。掌握嵌入式操作系统,定制内核,编译下载调试,编写驱动程序和应用程序等,最后要求实现或部分实现一个具体嵌入式应用的解决方案,并在硬件平台上实现出来。

课程的主要内容包括:(1)典型嵌入式系统的基本配置、硬/软件综合设计方法和流程、应用范例。(2)硬件环境微处理器、存储器、I/O 口、外设接口和驱动、电源转换和管理、总线、硬件调试。(3)嵌入式操作系统、操作系统内核、Linux 和uCLinux、任务和任务调度、实时 OS、 GUI、API、文件系统等。(4)嵌入式网络通过和计算机网络结合, 开发基于网络接的应用。(5)软件开发过程、交叉编译、链接调试、下载、板级支持包。(6)驱动程序、设备驱动机制、按键和触摸屏驱动、网口驱动、红外、USB 驱动。

实验是嵌入式系统教学的一个比较重要的环节, 实验大纲的制定是保证课程教学大纲目标实现的一个重要环节, 制定出符合学生实际的实验大纲对计算机科学与技术专业培养目标的实现至关重要。按难易程度的不同, 实验内容分为两个层次:基本实验与综合应用实验。基本实验目的是让学生了解嵌入式软件和硬件的一般开发环境与流程, 进行基本的嵌入式程序开发。综合应用实验目的是让学生综合运用前面所学到的知识, 按照指定的题目, 自行设计开发嵌入式应用程序。基本实验包括嵌入式软件开发基础实验、人机接口实验、通信与音频接口实验、简单驱动程序实验和嵌入式操作系统移植实验等。对于综合应用实验,给出多个题目,选择其一, 学生也可以自选题目。设备选 择 了 北 京 博 创 公 司 所 开 发 的PXA270教学实验平台,由于 PXA270 性能好,实验开发板的外围设备又很丰富,使得实验选题更加灵活。

课程设计及毕业设计中对所学知识的运用与提高在理论学习结束后,学生对嵌入式系统开发的各个环节有了较深入的理解与掌握。我们的方法是在课程设计和毕业设计中深化学习。课程设计中,结合实验用开发平台,选择了如MP3模拟控制系统等在实际中真正是嵌入式大行其道的应用领域。在毕业设计中,我们布置了诸如“嵌入式智能控制器”,“嵌入式音频控制器”,“内核裁减”设计等工作,这些设计要求学生从软硬件协同设计到软硬件的测试方法等有深刻的掌握。还有组织学生参加大学生嵌入式设计竞赛等教学活动。

四、结束语

随着嵌入式应用的迅猛发展,企业对嵌入式人才需求的缺口越来越大,越来越多的高校开始加强嵌入式系统的教学和科研,培养更多的适应社会需求嵌入式系统人才。本文所设置的针对计算机本科专业的嵌入式系统课程体系,融合了企业的需求和计算机专业的特点,符合实际应用。针对两年实践中存在的问题,在以后的教学中将不断完善。

参考文献:

[1]田泽.嵌入式系统开发与应用教程[M].北京:北京航空航天大学出版社,2005.[2]符意德.嵌入式系统教学及实验内容的探讨[J].军工高

[3]贾志平.嵌入式系统原理与接口技术[M].北京:清华大学出版社,2004.[4]柳翔.嵌入式软件工程人才培养的探索与实践[J].计算机教育,2005,5.

4

5

推荐第4篇:嵌入式实验报告

《嵌入式Linux实验开发》

——实验

二、安装和备份Linux 系统

——实验

三、ADS 集成开发环境的使用 ——实验

四、在虚拟机中安装linux ——实验

五、虚拟机和主机数据通信

——实验

六、宿主机和目标机通信

姓名:吉博博

班级:软件1102

学号:1111612005

实验日期:2013年9月28日

心得体会:

今天试验收获挺丰富的,但还有很多的疑问。

第一点、其中试验二,安装和备份linux系统存在的问题最多。我基本上没有搞清楚它的操作原理,感觉糊里糊涂的。怎么给开发板安装linux系统?实验指导上面写的貌似很粗糙,看了好多遍没有明白。就像第一步中有个“把开发板设置为 Nor Flash 启动,系统更新和安装完毕后设置为Nand Flash 启动”。不知道为什么要这样做等。

再就是进入Bios 启动菜单,选择f 对Nand Flash进行分区。不是很清楚„„

还有就是下边有一个安装bootloader,从网上说的来看,这个类似于操作系统的BIOS,

总体来说,对开发板怎么安装一个系统这个问题没有滤清。

第二点就是ADS集成开发环境的使用,对于这个工具不熟悉,自己以后应多加练习。

第三点就是Linux 虚拟机与主机之间的数据通信和宿主机与目标机之间的通信不是很了解,先说说我自己认为的:首先是三个系统,PC上的XP系统,虚拟机上的linux系统和开发板上的linux系统,这三个之间进行通信。

PC的XP系统可以通过DOS界面ftp服务,SSH软件或VMware上的共享文件实现相互通信

PC的XP系统可以通过超级终端或ftp服务或Telnet与开发板上的linux系统实现相互通信

我不清楚道虚拟机上的系统是否可以直接与开发板上的系统进行通信以及怎么进行通信等

现在我只理解到这个程度,不知道以上理解是否正确。

推荐第5篇:嵌入式之路

目标:达到适应嵌入式应用软件开发、嵌入式系统开发或嵌入式驱动开发的基本素质。 采用了目前应用最广泛的软硬件开发平台(Linux和Arm)。 学习步骤如下:

1、Linux 基础 安装Linux操作系统 Linux文件系统

(windows的文件共享) Linux的基本命令及使用 Linux启动过程详解

熟悉Linux服务能够独立安装Linux操作系统 能够熟练使用Linux系统的基本命令

认识Linux系统的常用服务安装Linux操作系统 Linux基本命令实践 设置Linux环境变量

定制Linux的服务 Shell 编程基础使用vi编辑文件 使用Emacs编辑文件 使用其他编辑器

2、Shell 编程基础 Shell简介 认识后台程序

Bash编程熟悉Linux系统下的编辑环境 熟悉Linux下的各种Shell 熟练进行shell编程熟悉vi基本操作 熟悉Emacs的基本操作 比较不同shell的区别

编写一个测试服务器是否连通的shell脚本程序 编写一个查看进程是否存在的shell脚本程序 编写一个带有循环语句的shell脚本程序

3、Linux 下的 C 编程基础 linux C语言环境概述 Gcc使用方法 Gdb调试技术 Autoconf Automake Makefile 代码优化

熟悉Linux系统下的开发环境 熟悉Gcc编译器

熟悉Makefile规则编写Hello,World程序 使用 make命令编译程序 编写带有一个循环的程序 调试一个有问题的程序

4、嵌入式系统开发基础 嵌入式系统概述 交叉编译 配置TFTP服务 配置NFS服务

下载Bootloader和内核 嵌入式Linux应用软件开发流程 熟悉嵌入式系统概念以及开发流程

建立嵌入式系统开发环境制作cro_gcc工具链 编译并下载U-boot 编译并下载Linux内核 编译并下载Linux应用程序 嵌入式系统移植 Linux内核代码平台相关代码分析 ARM平台介绍平台移植的关键技术 移植Linux内核到 ARM平台 了解移植的概念

能够移植Linux内核移植Linux2.6内核到 ARM9开发板 【1 配置编译Linux内核 1.1 Linux内核源代码结构 1.2 Linux内核编译选项解析 1.3 Linux内核编译链接 2.0 Linux启动过程源代码分析

3.0 Linux内核移植平台相关代码分析】

5、嵌入式 Linux 下串口通信 串行I/O的基本概念 嵌入式Linux应用软件开发流程 Linux系统的文件和设备 与文件相关的系统调用

配置超级终端和MiniCOM 能够熟悉进行串口通信 熟悉文件I/O 编写串口通信程序 编写多串口通信程序

6、嵌入式系统中多进程程序设计 Linux系统进程概述 嵌入式系统的进程特点 进程操作 守护进程

相关的系统调用了解Linux系统中进程的概念 能够编写多进程程序编写多进程程序 编写一个守护进程程序

sleep系统调用任务管理、同步与通信 Linux任务概述 任务调度 管道 信号 共享内存

任务管理 API 了解Linux系统任务管理机制 熟悉进程间通信的几种方式

熟悉嵌入式Linux中的任务间同步与通信 编写一个简单的管道程序实现文件传输 编写一个使用共享内存的程序

【主要包括系统编程(信号/系统调用/管道/FIFO/消息队列/共享内存等),文件I/O编程(文件描述符/文件读写接口/原子操作/阻塞与非阻塞IO等,多任务和多线程编程(进程标识/ 用户标识/fork与vfork/多线程概念/线程同步等),网络编程(网络基本概念/套接口编程/网络字节次序/Client/Server结构/UDP编程);掌握Linux下Socket编程的开发流程,熟悉网络编程的调用接口函数和相关数据结构,

内容包括文件I/O编程,多线程编程,网络编程和项目文档编写】

7、嵌入式系统中多线程程序设计 线程的基础知识 多线程编程方法

线程应用中的同步问题了解线程的概念

能够编写简单的多线程程序编写一个多线程程序

8、嵌入式 Linux 网络编程 网络基础知识

嵌入式Linux中TCP/IP网络结构 socket 编程 常用 API函数 分析Ping命令的实现 基本UDP套接口编程 许可证管理 PPP协议

GPRS 了解嵌入式Linux网络体系结构 能够进行嵌入式Linux环境下的socket 编程 熟悉UDP协议、PPP协议

熟悉GPRS 使用socket 编写代理服务器 使用socket 编写路由器 编写许可证服务器 指出TCP和UDP的优缺点 编写一个web服务器

编写一个运行在 ARM平台的网络播放器

9、GUI 程序开发 GUI基础

嵌入式系统GUI类型 编译QT 进行QT开发熟悉嵌入式系统常用的GUI 能够进行QT编程使用QT编写“Hello,World”程序 调试一个加入信号/槽的实例 通过重载QWidget 类方法处理事件

10、Linux 字符设备驱动程序 设备驱动程序基础知识 Linux系统的模块 字符设备驱动分析 fs_operation结构

加载驱动程序了解设备驱动程序的概念 了解Linux字符设备驱动程序结构

能够编写字符设备驱动程序编写Skull驱动 编写键盘驱动 编写I/O驱动

分析一个看门狗驱动程序

对比Linux2.6内核与2.4内核中字符设备驱动的不同 Linux 块设备驱动程序块设备驱动程序工作原理 典型的块设备驱动程序分析

块设备的读写请求队列了解Linux块设备驱动程序结构 能够编写简单的块设备驱动程序比较字符设备与块设备的异同 编写MMC卡驱动程序 分析一个文件系统

对比Linux2.6内核与2.4内核中块设备驱动的不同

11、文件系统 虚拟文件系统 文件系统的建立 ramfs内存文件系统 proc文件系统 devfs 文件系统 MTD技术简介 MTD块设备初始化

MTD块设备的读写操作了解Linux系统的文件系统 了解嵌入式Linux的文件系统 了解MTD技术 能够编写简单的文件系统为 ARM9开发板添加 MTD支持 移植JFFS2文件系统

通过proc文件系统修改操作系统参数 分析romfs 文件系统源代码 创建一个cramfs 文件系统 嵌入式处理器体系结构及编程实践

主要介绍ARM体系结构及其基本编程知识,包括指令分类,寻址方式、指令集、存储系统、异常中断处理、汇编语言以及C\C++和汇编语言的混合编程等知识。同时结合ARM嵌入式开发板硬件设计原理和基本硬件设计流程,分析各种外设的工作原理和驱动机制,并自己动手实践完成一个ARM开发板上的编程大作业。

嵌入式Linux开发基础及高级应用

主要介绍嵌入式Linux开发应用程序的基本流程和知识,包括嵌入式Linux基本概念和开发流程、Bootloader工作原理、内核裁减配置和交叉编译、根文件系统制作、网络编程以及图形界面和数据库开发等知识。同时独立完成一个基于嵌入式Linux GUI的应用编程大作业。 嵌入式 Linux驱动理论及驱动程序开发实践

主要介绍嵌入式Linux上驱动程序开发规范,包括设备驱动程序概念、字符设备驱动程序、块设备与网络设备、网卡驱动以及常用嵌入式设备驱动开发等知识。同时独立实现两种嵌入式设备驱动程序的编写,包括驱动模块的调试和加载以及完整的项目开发文档的编写。 嵌入式Linux项目团队开发实践锻炼

主要包括设计并实现一个真实和完整的嵌入式项目的开发流程,涉及到数据采集、网络通讯、图形用户界面显示以及嵌入式数据库存储系统等多种嵌入式Linux编程技术。要求学员建立起团队开发和协同工作的企业项目开发模式的概念和流程,强化学员对编写项目概要设计文档和详细设计文档的理解,为就业前的职业技能和素质训练做好充分准备。 ??? 最重要的是:手头要有一块嵌入式板子进行实践。 ??? 图书 C语言

《C Primer Plus,5th Edition》【美】Stephen Prata著 The C programming language《C程序设计语言》 Pointers on C《C和指针》

C traps and pitfalls《C陷阱与缺陷》 Expert C Lanuage《专家C编程》

Writing Clean Code-----Microsoft Techiniques for Developing Bug-free C Programs 《编程精粹--Microsoft 编写优质无错C程序秘诀》

Programming Embedded Systems in C and C++《嵌入式系统编程》 《C语言嵌入式系统编程修炼》 《高质量C++/C编程指南》林锐 Linux基础

1、《Linux与Unix Shell 编程指南》

2、《鸟哥的 Linux 私房菜 基础学习篇(第二版)》

3、《Linux程序设计.第3版》

3、《Advanced Programming in the UNIX Environment,2nd Edition》(APUE)

4、《嵌入式Linux应用程序开发详解》 Linux内核

1、《深入理解Linux内核》(第三版)

2、《Linux内核源代码情景分析》毛德操 胡希明著 研发方向

1、《UNIX Network Programming》(UNP)

2、《TCP/IP详解》

3、《Linux内核编程》

4、《Linux设备驱动开发》(LDD) 硬件基础 计算机组成原理

1、《ARM体系结构与编程》杜春雷著 英语基础

1、《计算机与通信专业英语》 系统教程

1、《嵌入式系统――体系结构、编程与设计》

2、《嵌入式系统――采用公开源代码和StrongARM/Xscale处理器》毛德操 胡希明著

3、《Building Embedded Linux Systems》 理论基础

1、《算法导论》

2、《数据结构(C语言版)》

3、《计算机组织与体系结构?性能分析》

4、《深入理解计算机系统》【美】Randal E.Bryant David O'Hallaron著

5、《操作系统:精髓与设计原理》

6、《编译原理》

7、《数据通信与计算机网络》

8、《数据压缩原理与应用》 《unix环境高级编程》

Stevens先生的《unix环境高级编程》

如果对网络编程有兴趣的,可以学习一下Stevens先生的《UNIX网络编程》两卷 可以再看看《TCP/IP详解》三卷)。

《计算机编程艺术》对算法有兴趣得可以研究一下。 《linux设备驱动程序》《深入理解Linux内核》

Linux上的应用编程:《APUE》和《UNP》,前者锻炼基本功,后者学习网络编程。 《Linux Device Driver》--《Linux设备驱动程序》

《UNP》是《UNIX Network Programming》--《Unix网络编程》这本书的简称。作者是:W.Richard Stevens,他是unix与网络方面的专家,他写了几本书,都是unix和网络方面的经典: 第一卷是关于Unix 网络方面的API详细描述,BSD Socket网络编程接口和另外一种网络编程接口的,不过现在一般都用BSDSocket;

第二卷写的是IPC,就是interproce communication(进程间通信)。是关于Unix网络编程方面的经典。第二卷没有设计到网络的东西,主要讲进程间通讯和Posix线程。 《APUE》一卷,《AdvancedProgramming in the UNIX Environment》

中文称为《UNIX环境高级编程-(第2版)》。是一本详细描述unix类系统调用的书,unix的C编程中的经典。

(3).《TCP/IP详解》三卷,第一卷写的是TCP/IP协议,第二卷写TCP/IP协议在BSD中的C实现,第三卷写事务和HTTP协议等。

《TCP/IP祥解》一共三卷,卷一讲协议,卷二讲实现,卷三讲编程应用。 《UNIX编程艺术》--《The Art of Unix Programming》 ??? 不管做什么,学什么,一要心态好,二要态度好。

所谓心态好就是不要着急、不用担心;所谓态度好是多分享、多讨论、学出自己的心得。 学习靠自己,不要期望别人教你什么,学习要主动;

不管水平高低,不要看不起自己,也不能看不起别人,学习要心态好; 不能不思进取,也不用让自己为技术所累,给自己多一点技术之外的时间; 耐心,刻苦,尝试,失败。

学习的过程可能会是饱受挫折和孤独的。 要知道为什么学?要知道学的是什么?要知道怎么学?要知道学了如何用?最后还要知道用的时候出了问题该如何解决?

推荐第6篇:嵌入式 电子相册

信息科学与工程学院

基于STM32的电子相册系统设计

专业班级:通信工程12-2班 姓 名:覃模广

学 号:3120731231 教 师:梁贵芹

本设计是一款基于STM32F103的电子相框系统读取SD卡中的图像文件通过LCD屏幕将其显示。系统主要由SD驱动、LCD驱动和功能控制模块组成。SD驱动主要由SD接口驱动程序、FAT文件操作程序组成;LCD驱动主要由LCD屏驱动芯片的驱动程序和图片显示程序组成;功能控制模块包括了系统初始化,显示初始页面,显示方式的设置,驱动程序调用等功能,功能控制模块是系统的主模块。在介绍了文件系统与图像操作的基础上逐步说明了整个系统的实现。文件系统支持FAT16/32,图像系统支持BMP等多种文件格式。整个系统的设计以模块化为基础,易于升级。

关键词: STM32F103 电子相框系统 SD卡 LCD屏幕 FAT文件系统

嵌入式系统的特点简介

嵌入式系统具有以下几个重要特征:

①系统内核小,由于嵌入式系统一般应用于小型电子装置,系统资源相对有限,所以内核较之传统的操作系统要小得多。比如,ENEA公司的OSE分布式系统,内核只有5KB,而Windows的内核则要大得多。

②专用性强,嵌入式系统的个性化很强,其中的软件系统和硬件结合非常紧密,一般要针对硬件进行系统的移植,同时针对不同的任务,往往需要对系统进行较大的更改。另外,程序的编译下载要和系统相结合。

③嵌入式系统一般没有系统软件和应用软件的明显区分,不要求其功能的设计及实现过于复杂,这样既利于控制系统成本,也利于实现系统安全。

④高实时性的操作系统软件是嵌入式软件的基本要求,而且软件要求固化存储,以提高速度,软件代码要求高质量和高可靠性。

1 ⑤嵌入式软件开发要想走向标准化,就必须使用多任务操作系统。嵌入式系统的应用程序可以没有操作系统而直接在芯片上运行,但为了更合理的调度多任务,利用系统资源、系统函数,用户必须自行选配RTOS开发平台。

⑥执行的实时性、可靠性,并减少开发时间,保障软件质量。嵌入式系统开发需要专门的开发工具和环境。由于嵌入式系统本身不具备自主开发能力,即使完成设计后,用户通常也不能对其中的程序功能进行修改,因此必须有一套基于通用计算机的开发工具和环境才能进行开发。

任务分析--》确定方案--》重难点--》软件设计--》硬件设计调试

一 *任务分析*

基于STM32设计一个电子相册系统,系统通电后能够正常进行图片的演示并且可以通过按键控制上下张照片显示。

二 *确定方案*

基于ARM单片机STM32F103RBT6的存储程序控制,从SD卡读取图片,解码后输出到TFT-LCD上显示,同时通过按键可以控制上下张显示。

1)硬件电路原理图的绘制; 2)硬件资料的研究; 3)软件方案的选择与论证; 4)软件运行与调试;

三 *重难点*

FAT文件系统、TFT-LCD显示方法以、ARM单片机STM32F103RBT6开发版的应用和SD存储卡模块的正确使用。

2

通过查相关的资料得:

3.1 SD存储卡模块

SD卡(Secure Digital Memory Card)中文翻译为安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备,它被广泛地应用于便携式装置上,例如数码相机、个人数码助理(PDA)和多媒体东

播放器等。SD卡由日本松下、东芝及美国SanDisk公司于1999年8月共同开发研制。大小犹如一张邮票的SD记忆卡,重量只有2克,但却拥有高记忆容量、快速数据传输率、极大的移动灵活性以及很好的安全性,此外它可存多种格式数据文件,具有很强的可扩展性;用户可方便使用SD卡读卡器对其进行用户信息修改。2G金士顿SD卡实物如下图2-5所示。 SD卡一般支持两种操作模式:SD卡模式与SPI模式。

主机可以选择以上任意一种模式同SD卡通信,SD卡模式允许4线的高速数据传输。SPI模式允许简单的通过SPI接口来和SD卡通信,这种模式同SD卡模式相比就是丧失了速度。SD卡的引脚排序如下图2-6所示

图2-5 Kingston SD卡 图2-6 SD卡引脚排序图

3 SD卡要进入SPI模式很简单,就是在SD卡收到复位命令(CMD0)时,CS为有效电平(低电平)则SPI模式被启用。不过在发送CMD0之前,要发送>74个时钟,这是因为SD卡内部有个供电电压上升时间,大概为64个CLK,剩下的10个CLK用于SD卡同步,之后才能开始CMD0的操作,在卡初始化的时候,CLK时钟最大不能超过400KHZ。

3.2 LCD模块

Thin Film Transistor(薄膜场效应晶体管),是指液晶显示器上的每一液晶象素点都是由集成在其后的薄膜晶体管来驱动。从而可以做到高速度、高亮度、高对比度显示屏幕信息,TFT-LCD(薄东南大

膜晶体管液晶显示器)是多数液晶显示器的一种。TFT屏幕的优点如下:1).大面积 2).高集成度 3).功能强大 4).低成本 5).工艺灵活 6).应用领域广泛

TFT液晶显示屏亮度好、对比度高、层次感强、颜色鲜艳,其广泛应用于手机、MP4等消费品。因此,本系统选用2.8英寸TFT-LCD屏(如图2-2所示)可显26万色,分辨率320*240,控制器为ILI9320,采用16位的80并口,配合触摸屏专用芯片XPT2046,可对屏幕进行触摸操作,更显智能化和个性化。为了方便用户使用,我们存储方式采用兼容FAT的文件系统,同时该文件系统也兼容FAT32等电脑主流的 文件系统方式进行存储。

2.8英寸TFT-LCD模块

该模块的80 并口有如下一些信号线: CS:TFT-LCD片选信号。 WR:向 4 TFT-LCD写入数据。 RD:从TFT-LCD读取数据。 D[15:0]:16位双向数据线。 RST:硬复位TFT-LCD。 RS:命令/数据标志(0,读写命令;1,读写数据)。TFT-LCD模块的RST 信号线是直接接到STM32 的复位脚上,并不由软件控制,这样可以省下来一个I/O口。另外我们还需要一个背光控制线来控制TFT-LCD的背光。所以我们总共需要的I/O口数目为21个。该控制器自带显存,其显存总大小为172820(240*320*18/8),即18位模式(26万色)下的显存量。模块的16位数据线与显寸的对应关系为565方式,如下图所示

16位数据与显存对应关系图

最低5位代表蓝色,中间6位为绿色,最高5 位为红色。数值越大,表示该颜色越深。接下来介绍一下ILI9320的几个重要命令,因为ILI9320的命令很多,这里不一一介绍。

通过以上介绍,我们可以得出TFT-LCD显示需要的相关设置步骤如下:

1)设置STM32与TFT-LCD模块相连接的I/O。

这一步,先将我们与TFT-LCD模块相连的I/O口设置为输出,具体使用哪些I/O口,这里需要根据连接电路以及TFT-LCD模块的设置来确定。

2)初始化TFT-LCD模块。

通过向TFT-LCD写入一系列的设置,来启动TFT-LCD的显示。为后续显示字符和数字做准备。

3)通过函数将字符和数字显示到TFT-LCD模块上。

这里就是通过我们设计的程序,将要显示的字符送到TFT-LCD模块就可以了,这些函数将在软件设计部分向大家介绍。通过以上三步,我们就可以使用TFT-LCD模块来显示字符和数字了,并且可以显示各种颜色的背景。 3.3 液晶显示部分电路设计

液晶显示部分主要由微控制器STM32F103RBT6驱动AM240320LSTNQW-00H完成人机界面状态的显示,通过发送命令字,完成液晶模块的初始化,完成对内容的显示,显示部分的硬件电路接口图如图2所示

系统液晶接口原理图

3.4 ARM单片机STM32F103RBT6开发版简介

STM32F103RBT6使用高性能的ARM Cortex-M3 32位的RISC内核,工作频率为72 MHz,内置高速存储器(高达128 K字节的闪存和20 K字节的SRAM),丰富的增强I/O端口和连接到两条APB总线的外设。所有型号的器件都包含2个12位的ADC、3个通用16位定时器和一个PWM定时器,还包含标准和先进的通信接口:多达2个I2C和SPI、3个USART、一个USB和一个CAN.供电电压2.0~3.6 V,一系列的省电模式保证低功耗应用的要求

6 3.5 FAT文件系统

常用的文件系统有FAT12/16/32等,FAT12是最古老的文件系统,只能管理8 M左右的空间。现在基本淘汰了。FAT16则可以管理2 G的空间(通过特殊处理也能管理2 G以上的空间),而FAT32则能管理到2 TB(2 048 GB)的空间。FAT32较FAT16的优势还在于FAT32采用了更小的簇,可以更有效的保存信息,而不会造成多的浪费。

本系统设计过程中采用了FAT32文件系统,它的主要组成部分如下:

1、MBR称为主引导记录区,该区存储了分区表等信息,位于SD卡的扇区0(物理扇区),在其分区信息里面记录了DBR所在的位置,SD卡一般只会有一个分区,所以也就只要找到分区1的DBR所在位置就可以了。

2、DBR称为操作系统引导记录区,如果没有MBR,那么DBR就位于0扇区;如果有,则必须通过MBR区得到DBR所在的地址,然后读出DBR信息。在DBR区,可以知道每个扇区所占用的字节数、每个簇的扇区数、FAT表的份数、每个FAT表的扇区敷、跟目录簇号、FAT表1所在的扇区等一系列非常重要的信息。

3、FAT称为文件分配表(FAT表),一个卡上会存在2个FAT表,一个用作备份,一个使用。FAT表一般紧随DBR,另一个FAT表则紧随第一个FAT表,这样只要知道了第一个FAT表的位置及大小,那么第二个FAT表的位置也就确定了。FAT表记录了每个文件的位置和区域,是一种链式结构。

4、FDT称为文件根目录表,这个区域固定为32个扇区,假设每个扇区为512个字节。那么根目录下最多存放512个文件(假设都用短文件名存储,每个短文件名占32个字节)。文件目录表是另一个重要的部分,FAT文件系统中(仅以短文件名介绍),文件目录项在目录表下以32个字节的方式记录。

四、软件设计

由于本设计直接在ARM单片机STM32F103RBT6开发版实现,而且程序的工程是直接通过利用现有的通过修改而来的,所以在这里只是重点说明主函数程序。

7 4.1 这是主程序的流程图

4.2 主函数如下:

9 #include \"stm32f10x.h\" #include \"hardware.h\" #include \"usart.h\" #include \"ili932x.h\" #include \"fat.h\" #include \"picture.h\" #define EEPROM_WriteAddre 0 #define EEPROM_ReadAddre 0 #define TEXT_Size (Get_Size(TEXT_Buffer)-1)

#define Get_Size(a) (sizeof(a) / sizeof(*(a)))

uint8_t TEXT_Buffer[]={\"MINI-STM32 SD TEST\"}; uint8_t REXT_Buffer[TEXT_Size]; uint8_t Fill_Buffer[]={\" \"}; extern uint8_t gImage_11[];

static __IO uint32_t TimingDelay; void GPIO_Configuration(void); void NVIC_Configuration(void); void Time_Display(uint32_t TimeVar); uint8_t KEY_Scan(void); void Delay(__IO uint32_t nTime);

int main(void) //主函数 {

uint8_t i; uint8_t key; FileInfoStruct *FileInfo;

uint16_t pic_cnt=0;//当前目录下图片文件的个数 uint16_t index=0; //当前选择的文件编号 uint16_t time=0;

SystemInit(); //配置系统时钟72M(包括clock, PLL and Flash configuration) while(SysTick_Config(SystemFrequency / 1000));

//Systick 配置延时n*ms

USART_Send_Str(menu); POINT_COLOR=RED; Show_Str(60,50,\"Mini STM32开发板\",16,0); Show_Str(60,70,\"简易电子相册\",16,0); Show_Str(60,90,\"通信12-2班\",16,0);

GPIO_Configuration();

// 引脚配置

USART_Configuration(); //异步通信初始化 NVIC_Configuration(); LCD_Init();

//系统中断配置 // LCD初始化

LCD_Clear(WHITE); //清屏

SPI_Configuration(); //SPI初始化 M45PE_Init(); SD_Init();

//M45PE16初始化 //SD卡初始化

Show_Str(60,110,\"2015年7月1日\",16,0); SD_Init(); while(FAT_Init())//FAT 错误 {

Show_Str(60,130,\"文件系统错误!\",16,0); i= SD_Init(); if(i)Show_Str(60,150,\"SD卡错误!\",16,0);//SD卡初始化失败

Delay(500); LCD_Fill(60,130,240,170,WHITE);//清除显示 Delay(500); LED1=!LED1;

}

while(SysInfoGet(1))//得到图片文件夹 {

} Show_Str(60,130,\"开始显示...\",16,0); Delay(1000); Cur_Dir_Cluster=PICCLUSTER; while(1) {

Show_Str(60,130,\"图片文件夹未找到!\",16,0); Delay(500); FAT_Init(); SD_Init(); LED1=!LED1; LCD_Fill(60,130,240,170,WHITE);//清除显示 Delay(500);

pic_cnt=0;

Get_File_Info(Cur_Dir_Cluster,FileInfo,T_JPEG|T_JPG|T_BMP,&pic_cn

t);//获取当前文件夹下面的目标文件个数

if(pic_cnt==0)//没有图片文件 {

LCD_Clear(WHITE);//清屏

while(1) {

if(time%2==0)Show_Str(32,150,\"没有图片,请先COPY图片到

SD卡的PICTURE文件夹,然后后重启!\",16,0);

}

else LCD_Clear(WHITE); time++; Delay(300); }

FileInfo=&F_Info[0];//开辟暂存空间.index=1; while(1) { Get_File_Info(Cur_Dir_Cluster,FileInfo,T_JPEG|T_JPG|T_BMP,&index)

;//得到这张图片的信息

//LCD_Clear(WHITE);//清屏,加载下一幅图片的时候,一定清屏 AI_LoadPicFile(FileInfo,0,0,240,320);//显示图片

POINT_COLOR=RED; while(1)//延时3s {

key=KEY_Scan(); if(key==1)break;//下一张 else if(key==2)//上一张 {

} Delay(1); time++; if(index>1)index-=2; else index=pic_cnt-1; break;

}

}

}

} if(time%100==0)LED1=!LED1; if(time>3000) {

} time=0; break; index++; if(index>pic_cnt)index=1;//显示第一副,循环

/***************************************************************************** ** 函数名称: GPIO_Configuration ** 功能描述: 配置IO口 ** 作 者: Dream ** 日

期: 2010年12月17日

*****************************************************************************/ void GPIO_Configuration(void) {

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_GPIOB

| RCC_APB2Periph_USART1, ENABLE); // 使能端GPIO_InitTypeDef GPIO_InitStructure; 口时钟,重要!!!

/* 配置 LED

1、LED2引脚的功能 *********************/ 14 GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;

//通用推挽输 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 出模式

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 大频率为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure); PA3

//输出最

//初始化PA

2、/* 配置 KEY

1、KEY2引脚的功能 *********************/ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_1;

//上拉输入模 GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; 式

GPIO_Init(GPIOA, &GPIO_InitStructure); PA1

/* 配置 USART1 Tx (PA9) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;

//初始化PA0、GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;

漏输出模式

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; 大频率为50MHz GPIO_Init(GPIOA, &GPIO_InitStructure);

/* 配置 USART1 Rx (PA10) */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; 入模式

GPIO_Init(GPIOA, &GPIO_InitStructure);

//复用开

//输出最

//浮空输 15 //PB0 映射到通道8作为模拟输入引脚 ,ADC转换

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOB, &GPIO_InitStructure); } /***************************************************************************** ** 函数名称: KEY_Scan ** 功能描述: 按键处理函数

0,没有任何按键按下 1,KEY1按下 2,KEY2按下

** 作 者: Dream ** 日

期: 2010年12月17日

*****************************************************************************/ uint8_t KEY_Scan(void) {

} /********************************************************************static uint8_t KEY_UP=1; //按键按松开标志

if(KEY_UP&&(KEY1==0||KEY2==0)) {

Delay(10); KEY_UP=0; if(KEY1==0)return 1; else if(KEY2==0)return 2;

//去抖动

}else if(KEY1==1&&KEY2==1)KEY_UP=1; return 0;

//无按键按下

16 ********* ** 函数名称: Delay ** 功能描述: 用Systick延时 ** 作 者: Dream ** 日

期: 2010年12月17日

*****************************************************************************/ void Delay(__IO uint32_t nTime) { TimingDelay = nTime;

while(TimingDelay != 0); } /***************************************************************************** ** 函数名称: TimingDelay_Decrement ** 功能描述: Systick中断进入函数 ** 作 者: Dream ** 日

期: 2010年12月17日

*****************************************************************************/ void TimingDelay_Decrement(void) { if (TimingDelay != 0x00) { TimingDelay--; } } /********* 17 ** 函数名称: NVIC_Configuration ** 功能描述: 系统中断管理 ********/ void NVIC_Configuration(void) {

} #ifdef USE_FULL_ASSERT void aert_failed(uint8_t* file, uint32_t line) { /* User can add his own implementation to report the file name and line number, ex: printf(\"Wrong parameters value: file %s on line %d\\r\\n\", file, line) */ /* Infinite loop */ while (1) { } } #endif #ifdef VECT_TAB_RAM /* Set the Vector Table base location at 0x20000000 */ NVIC_SetVectorTable(NVIC_VectTab_RAM, 0x0); #else /* VECT_TAB_FLASH */ /* Set the Vector Table base location at 0x08000000 */ NVIC_SetVectorTable(NVIC_VectTab_FLASH, 0x0); #endif 18 4.3 程序工程如右图所示: 编译没有问题后用 Jlink下载。打开 JFlashARM软件, 选定对应的芯片, 步凑如下图

五、硬件设计调试

5.1 打开hex文件并把程序成功下载到系统板之后,系统板上的LED开始闪烁。按下板子上的RESET键,系统开始工作。系统自动按序显示图片时(3s自动显

19 示),若按下key2键,则显示上一张图片,按下key1键,则显示下一张图片。

5.2 实物图:

六、总结

由于本次短时间的设计作品,因此这个成品大都是通过修改而来, 并且其中还有很多内在的知识未能深入的理解,只是能实现要求的功能。在这代码中还存在一个漏洞,比如当要显示的中文在Flash字库中不存在那么怎么办?因此,代码存在缺陷!解决的方法:就是更新字库,检测是否有,再显示相关的提示。 这次也是第一次接触到嵌入式 STM32F103,了解尚浅,所以往后的路还很长呢!

21

推荐第7篇:嵌入式实验报告

嵌入式系统及应用课 程设计报告

姓名:陈宥祎

班级:14级计算机01班 学号:1255010116 指导老师:黄卫红

按键输入实验

一.实验简介

在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。

二.实验目的

熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。

三.实验内容

实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。

使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤

1在实验1代码的基础上,编写中断初始化代码

2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序 3编写中断服务程序

4编译代码,使用JLINK下载到实验板 5.单步调试

6记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

我们将通过MiniSTM32 板上载有的3个按钮,来控制板上的2个LED,其中KEY0控制LED0,按一次亮,再按一次,就灭。KEY1 控制LED1,效果同KEY0。KEY_2(KEY_UP),同时控制LED0 和LED1,按一次,他们的状态就翻转一次。

七.实验总结

通过本次实验,我学会了如何使用STM32 的IO 口作为输入用。TM32 的IO 口做输入使用的时候,是通过读取IDR 的内容来读取IO 口的状态的。这里需要注意的是 KEY0 和KEY1 是低电平有效的,而WK_UP 是高电平有效的,而且要确认WK_UP 按钮与DS18B20 的连接是否已经断开,要先断开,否则DS18B20 会干扰WK_UP按键!并且KEY0 和KEY1 连接在与JTAG 相关的IO 口上,所以在软件编写的时候要先禁用JTAG 功能,才能把这两个IO 口当成普通IO 口使用。

串口通信

一.实验简介

编写代码实现串口发送和接收,将通过串口发送来的数据回送回去。

二.实验目的

掌握STM32基本串口编程,进一步学习中断处理。

三.实验内容

编写主程序,初始化串口1,设置波特率为9600,无校验,数据位8位,停止位1位。 编写中断服务程序代码实现将发送过来的数据回送。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1编写串口初始化代码

2编写中断服务程序代码

3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

把代码下载到 MiniSTM32 开发板,可以看到板子上的LED0 开始闪烁,说明程序已经在跑了。接着我们打开串口调试助手,看到如下信息:

证明串口数据发送没问题。接着,我们在发送区输入上面的文字,输入完后按回车键。然后单击发送,可以得到如下结果:

七.实验总结

通过本次实验,我进一步了解了串口的使用,学会了通过串口发送和接收数据,将通过串

口发送来的数据回送回去。该实验的硬件配置不同于前两个实验,串口 1 与USB 串口默认是分开的,并没有在PCB上连接在一起,需要通过跳线帽来连接一下。这里我们把P4 的RXD 和TXD 用跳线帽与P3 的PA9 和PA10 连接起来。

外部中断

一.实验简介

STM32 的 IO 口在本章第一节有详细介绍,而外部中断在第二章也有详细的阐述。这里我们将介绍如何将这两者结合起来,实现外部中断输入。

二.实验目的

进一步掌握串口编程,进一步学习外部中断编程,提高编程能力。

三.实验内容

初始化IO口的输入,开启复用时钟,设置IO与中断的映射关系,从而开启与IO口相对应的线上中断事件,设置触发条件。配置中断分组(NVIC),并使能中断,编写中断服务函数。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1.2.3.4.编写中断服务程序代码 使用ISP下载到实验板 测试运行结果

记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

打开串口助手。

七.实验总结

首先需要将IO设置为中断输入口: 1)初始化 IO 口为输入。

2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。

3)开启与该 IO口相对的线上中断/事件,设置触发条件。

4)配置中断分组(NVIC),并使能中断。

5)编写中断服务函数。

这一节,使用的是中断来检测按键,通过 WK_UP 按键实现按一次 LED0 和 LED 1 同时翻转,按 KEY0 翻转 LED0,按 KEY1 翻转 LED1。 试验中外部中断函数不能进入的原因分析 : 1)GPIO或者AFIO的时钟没有开启。 2)GPIO和配置的中断线路不匹配。 3)中断触发方式和实际不相符合。

4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线。 5)外部中断是沿触发,有可能不能检测到沿,比如 中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续为高电平。

6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。

独立看门狗实验

一. 实验简介

独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

二.实验目的

通过编程,编写一个独立看门狗驱动程序

三.实验内容

启动 STM32 的独立看门狗,从而使能看门狗,在程序里面必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,我们本章将通过一个 LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1.2.3.4.参考教材独立看门狗部分,编写独立看门狗驱动程序。建立和配置工程 编写代码

使用ISP下载到实验板

记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

在配置看门狗后,看到LED0 不停的闪烁,如果WK_UP 按键按下,就喂狗,只要WK_UP 不停的按,看门狗就一直不会产生复位,保持LED0 的常亮,一旦超过看门狗定溢出时间(Tout)还没按,那么将会导致程序重启,这将导致LED0 熄灭一次。

七.实验总结

通过本次实验,我掌握了启动独立看门狗的步骤: 1)向 IWDG_KR 写入 0X5555。 2)向 IWDG_KR 写入 0XAAAA。 3)向 IWDG_KR 写入 0XCCCC。

通过上面 3个步骤,启动 STM32 的看门狗,从而使能看门狗,在程序里面就必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,本章通过一个LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。在配置看门狗后,LED0 将常亮,如果 WK_UP 按键按下,就喂狗,只要 WK_UP 不停的按,看门狗就一直不会产生复位,保持 LED 0 的常亮,一旦超过看门狗溢出时间(Tout)还没按,那么将会导致程序重启,这将导致 LED 0 熄灭一次。

推荐第8篇:嵌入式实验报告

北京科技大学

黄强

41050176

嵌入式实验报告

实验一 建立并编译WinCE平台

【实验目的】

掌握PB下WinCE平台的定制 【实验内容】

开始利用Platform Builder定制平台并编译 【实验流程】

1. 将OURS-PXA270-EP实验箱的电源线、串口、网线、同步线、鼠标等全部连接。

2. 由于已经安装好了BSP,我们可以直接打开Platform Builder5.0。 3. 新建Platform Builder工程,在建立向导中进行名称、路径、BSP选择、设计模板、可选项目等的设置,完成WinCE平台的建立。

北京科技大学

黄强

41050176 4. 设置编译平台的参数。

5. 构建新建里的WinCE平台的运行时映像。整个过程大约持续20分钟,构建成功后得到操作系统运行时的映像。 【实验结果】 见nk.bin 【小结】

通过这个实验,我们初步接触了PXA270EP实验箱,并通过Platform的建立,对Platform Builder有了一个初步了解,同时也对嵌入式开发的过程有了一个初步认识,掌握了PB下WinCE平台的定制。

实验二 定制增强型内核

【实验目的】

1.熟悉Platform Builder集成开发环境以及相关配置

·使用模板创建新平台 ·添加和删除组件 ·配置和运行平台

2.利用Platform Builder定制一个增强型内核,并下载到内存中。 【实验内容】

参照本实验指导书的步骤,定制一个包括Word(支持中文输入法)、图片浏览器、MediaPlayer、支持USB鼠标、键盘,并能通过USB从设备接口进行宿主机与目标版通信的内核。

北京科技大学

黄强

41050176 【实验流程】

1.打开已创建好的PB,在PB右边的Catalog中添加其他组件。这里我们所做的与实验指导书上的不同,为了更好的配合我们的实验,我们所添加的内容有: ·Third Party-BSPs-OURS PXA270-Device Drivers-OEM Devices下所有内容。 ·Platform Manager ·Third Party-BSPs-OURS PXA270-Device Drivers-USB Host-USB Host Controllers-PXA270x USB Host{OHC} ·Core OS-Windows CE devices-Core OS Services-USB Host Support-USB HID-USB HID Keyboard and Mouse ·Third Party-BSPs-OURS PXA270-Device Drivers-Input Devices-Keyboard/Mouse-OURS270 KEYPAD Driver ·Third Party-BSPs-OURS PXA270-Device Drivers-Networking-LAN devices-OURS270 LAN91C111 Driver 2.选择Build OS|Sysgn开始构建,编译的结果生成了Eboot和NK.bin映像文件。

3.在终端进行配置。打开“超级终端”进行连接端口、波特率、数据流控制等的设置,此时会弹出名为11520的超级终端的窗口。

4.打开实验箱电源,此时窗口里会出现字符,快速按空格键。

5.当完成Eboot配置后,按下D,准备下载内核的映像文件NK.bin到实验箱上。 6.再进行PB里面的目标设备的配置。 7.对映像文件进行下载。

映像文件传输完成后,Eboot会根据设置,自动烧写到内存中,完成烧写以后,WinCE会自动启动。至此,一个功能较强的内核定制成功了。 【实验结果】 略 【小结】

经过这个实验,我熟悉了Platform Builder集成开发环境以及相关配置,虽然刚开始不知道这些配置有什么用,后来在老师的讲解下才渐渐明白,这些配置是为了后续的编程做准备的。

北京科技大学

黄强

41050176

实验三 定制SDK并建立EVC下的开发环境

【实验目的】

熟悉SDK的概念,配置EVC下的开发环境 【实验内容】

生成SDK并安装,配置Embedded Visual C++的开发环境 【实验流程】

1. 在已经建立好的PB中,新建一个SDK文件。 2. 按步骤完成SDK的配置

3. 点击Build SDK 这个过程大概要3分钟,在指定目录下生成SDK文件。 4. 安装刚生成的SDK,之后即可在此模拟器上运行开发好的应用程序。 【实验结果】

北京科技大学

黄强

41050176 见SDK文件

【小结】

SDK的概念其实对我们来说还是相对陌生的,在实验的过程中由于概念不了解我们并不太清晰的知道我们在做什么,直到我们查阅并了SDK的相关概念后才有所收获。SDK实际上是一个开发工具包,我们根据自己的开发需要,针对于自己的PB定制了一个专用开发工具包来便于我们的模拟开发。经过这个实验,我们了解了更多关于软件开发的知识,接触到了许多课堂上所学不到的内容,受益匪浅。

实验五 建立宿主机与实验箱的连接

【实验目的】

学习并掌握利用SMSC91C111网口建立宿主机与实验箱的连接 【实验内容】

利用SMSC91C111网口建立宿主机与实验箱的连接 【实验设备】

1.OURS-PXA270-EP实验仪,烧录有WINCE的Flash,交叉网线,USB数据线。 2.PC操作系统,Platform Builder5.0集成开发环境。 【实验步骤】

1.在PB的菜单下,点Remote File Viewer击。

北京科技大学

黄强

41050176 2.在弹出的“Windows CE Remote File Viewer”界面中,选择“Configure Connection”按钮,进入下一个画面。

3.选好目标设备,并单击右边的“Properties”按钮。

4.在弹出的对话框“Device Properties”中如下图所示设置,单击“Transport”下拉框右边的“Configure...”按钮。

5.在弹出的对话框“Transport Configuration”中可以设置超时值、端口号、主机IP等。

6.设置完毕后,打开实验箱电源,启动WinCE平台,将宿主机与实验箱网口用交叉线连接号,点击“Text”按钮。

7.点击Text按钮后,出现所示窗口,它的意思是说,在试验箱的命令行中键入“CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000”(其中IP地址是自己宿主机的IP地址),完成此项操作后,点击OK。

8.在实验箱的CE系统中,设置IP地址与宿主机地址在同一网段内。具体操作为:在实验箱的CE系统“开始”菜单中点击运行命令,键入命:CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000,然后点击OK。如果PC机上再出现运行CEMGRC.EXE/S /T:TCPIPC.DLL /Q /D:192.168.0.21:5000的提示,重复上述步骤,便会出现如下界面,点击Export按钮(黄色按钮),可上传文件。 9.如下图所示,可浏览远程文件,并指定上传文件,选中文件后,点击“打开”按钮。

10.成功上传文件,可以在实验设备上看到上传的文件。 11.至此,利用SMSC91C111网口建立连接完毕。 【实验结果】

实验失败 【小结】

通过这次试验,我们掌握了利用SMSC91C111网口建立宿主机与实验箱的连接的方法,实验中要求IP地址与宿主机地址在同一网段,实验中解决了这个问题,让我们对网络相关的概念也加深了理解。经过多次试验,我们还是无法连通宿主机与实验箱,我认为我们的步骤没有问题,可能是设备有故障。

北京科技大学

黄强

41050176

实验六 USB Device建立宿主机与实验箱的连接

【实验目的】

学习并掌握利用USB Device建立宿主机与实验箱的连接 【实验内容】

利用USB Device建立宿主机与实验箱的连接 【实验设备】

1.OURS-PXA270-EP实验仪,烧录有WINCE的Flash,交叉网线,USB数据线。 2.PC操作系统,Platform Builder5.0集成开发环境。 【实验步骤】

北京科技大学

黄强

41050176 1.ActiveSync安装

Microsoft ActiveSync允许您使用电缆、底座或红外线在移动设备和桌面计算机之间建立合作关系。建立合作关系后,如果您的设备支持调制解调器或(以太网)卡,就可以使它们同步数据。通过ActiveSync还可以使用现有计算机连接其他资源,也可以使用ActiveSync保持两台计算机上拥有最新信息。

首先在主机端安装ActiveSync程序。该程序安装在D:\\科大目录下的ActiveSyncsetup.smi。双击该文件开始安装。

2.用USB延长线连接试验箱和PC,当PC发现新设备时安装附带的驱动,安装完成后,打开Microsoft ActiveSync窗口进行连接。

选择“否”然后点击行“下一步”按钮。

3.在“我的电脑”中添加“我的设备”,它对应于目标系统的WINCE文件系统。 注意:

如果WINCE运行以前USB线已经连接到PC机的USB插座,可能导致连接不上,此时,请将USB线拔下然后重新插入即可。 4.通讯

在上图我的电脑中双击“我的设备”将打开WINCE同步目录,可以和操作WINDOWS其他目录一样操作该目录,包括拷贝文件到该目录或见文件从该目录拷贝到PC机。

文件拷贝成功,可以成功将应用程序下载到试验箱运行,这样我们就完成了宿主机与实验箱的通讯连接。 【实验结果】

北京科技大学

黄强

41050176

【小结】

通过实验,我们掌握了利用USB Device建立宿主机与实验箱的连接的具体方法,并且连接成功,与上一个方法比较,该方法简单实用,成功率高,适合我们选用。

实验七 在实验箱的WinCE平台上的Hello World实验

【实验目的】

北京科技大学

黄强

41050176 1.熟悉EVC集成开发环境以及相关配置。 2.利用EVC编写WinCE的应用程序。 【实验内容】

参照本实验指导书的步骤,一步一步完成实验,编写、编译并运行HelloWorld程序 【实验设备】

1.OURS-PXA270—EP实验仪,交叉网线。

2.PC操作系统,Platform Builder4.2集成开发环境,eMbedded Visual C++集成开发环境。 【实验结果】

【小结】

这是我首次接触EVC集成开发环境,感觉有点陌生,但按照实验指导书一步一步做下去之后,我终于对EVC集成开发环境有了初步的了解,收获很大。

实验八 LED数码管驱动

【实验目的】

北京科技大学

黄强

41050176 1.熟悉EVC集成开发环境以及相关配置 2.利用EVC编写一个针对实际硬件的驱动程序 【实验内容】

编写一个针对硬件的驱动程序,硬件是LED 【实验设备】

PC机操作系统,Platform Builder集成开发环境,OURS—PXA270-EP实验箱。

【实验步骤】

1.使用前面实验所制作的内核 2.按照实验指导书上添加窗口及代码 3.测试与调试 【实验结果】

北京科技大学

黄强

41050176

【小结】

经过本次实验,我熟悉了EVC集成开发环境以及相关配置,在EVC中编写了一个程序,通过实验,对开发环境有了更深入地了解,为日后的课程设计打下了坚实的基础。

推荐第9篇:嵌入式总结报告

嵌入式实验报告

期末论文

学生姓名: 杨佳洁 学 号: 11570118 班 级: 11计算机2班 指导教师: 黄 静

2014年5月20日

嵌入式程序设计与应用课程主要以理论与实验结合的方式讲授,包括设备驱动,信号转换I、II,帧缓冲设备驱动和触摸屏这五部分,通过学习,我逐渐加深了对linux的理解。

在模块驱动部分,通过老师的讲解,我了解了Linux驱动程序的结构,掌握了程序驱动的结构体和操作函数这些基本知识,尤其知道了驱动程序负责将应用程序如读、写等操作正确无误的传递给相关的硬件,并使硬件能够做出正确反应的代码。驱动程序隐藏了硬件的工作细节,应用程序只需要通过一组标准化的接口实现对硬件的操作。

S3C2410X 芯片内部集成了一个8 路10 位A/ D 转换器,其中第

5、第6 通道可用于支持触摸屏接口,而AD转换器的功能是将输入的模拟信号转换成数字信号,驱动程序主要依赖于ADC控制寄存器、ADC数据寄存器等进行读写操作。而实验过程中涉及的驱动程序加载则是之前未曾接触的知识,所以在知道了编译方式分为动、静两种方式后,我掌握了如何对程序进行动态编译方式。

系统有多个显示卡时,Linux 下可支持多个帧缓冲设备,FrameBuffer是 Linux 为显示设备提供的一个接口,把显存抽象后的一种设备。课程中我主要理解了相关程序代码的分析,尤其对FB程序中内存的申请以及填充描点函数有了较为详细的理解。

在触摸屏驱动部分,理论方面我熟悉了解了触摸屏的原理,即检测触摸点被压下后的电压值来返回坐标。通过代码分析,掌握了触摸屏进行输出标定、与LED显示器配合的过程。 课程的最后一部分是AD转换,与之前的转换不同之处在于本次目的是将采集的数据呈现在html网页中。所以在实验过程中,我在掌握boa服务器的编译和配置之外还掌握了制作网页的基本结构。

当然虽然基本理解了老师讲解的理论知识但是在实验中仍然遇到了很多问题。如在文件共享时由于忽略pc机与虚拟机必须在同一网段的条件导致无法使用提供的src;修改文件中涉及的路径与实际情况不相符使程序编译出现错误。还有一些尚未解决的为题,在触摸屏实验部分“消除默认路径”部分,有时会出现“没有此进程”的错误提示,通过重启linux可避免这个错误,但是出现错误的原因不是很清楚。

8周的课程结束了,它拓展了我对嵌入式应用涉及的领域的认识,掌握了很多之前没有接触过的知识,也在老师和同学的帮助下比较顺利地完成了实验,尤其是对在linux系统及xshell下操作的基本命令有了很大的扩展和更加熟练的使用。但是老师在讲解理论知识的时候主要关注的是程序代码的解析,所以在做实验时对比较复杂的实验步骤理解的不够透彻,希望自己日后可以在不断的锻炼中逐渐理解。相信无论是理论知识还是实验中的实践经验都对我日后深入学习嵌入式有很大的帮助。

推荐第10篇:嵌入式总结

一、嵌入式系统原理与应用课程总结

这个学期我学习了《嵌入式原理与应用》这门课程,虽然这个学期马上就要结束了,对嵌入式的学习也要告一段落了,但是我觉得收获还是很大的。学期开始,我开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,很多的概念都比较模糊,真是茫然无从下手。虽然一个学期的学习时间不是很长,但是我觉得对嵌入式系统也已经有了一个大致的概念。对它的历史发展与今后展望都有了一定的了解。嵌入式技术的掌握是需要一个过程的,对嵌入式技术的全面掌握是有相当难度的。如果要真正掌握的话还是需要一步步积累才能熟练掌握的,所以我们还要自己多加学习,不断地回顾以前学到的知识,也要吸收新的概念与技术,使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的乐趣,更加清楚的认识到自己在软件开发学习上的一些不足之处,并且不断改进以提高自己。

通过这门课程的学习,我了解到了嵌入式系统是一种为特定设备服务,软硬件可裁剪的计算机系统,其英文名称是Embedded System。嵌入式系统的范围很广,特点是形式变化多样、体积小,可以灵活地适应各种设备的需求。嵌入式系统的一些例子:手机、汽车、ATM、数字电视、医疗仪器等等。嵌入式系统本身是一个相对模糊的定义,一个手持的MP3和一个PC104的微型工业控制计算机都可以认为是嵌入式系统。总体来说,嵌入式系统是“用于控制,监视或者辅助操作机器和设备的装备”。一个典型的桌面Linux系统包括3个主要的软件层---linux内核、C库和应用程序代码。内核是唯一可以完全控制硬件的层,内核驱动程序代表应用程序与硬件之间进行会话。内核之上是C库,负责把POSIX API转换为内核可以识别的形式,然后调用内核,从应用程序向内核传递参数。应用程序依靠驱动内核来完成特定的任务。嵌入式系统的发展是从电子计算机诞生以来,计算机的发展有两个方向:一个方向是体积大型化、处理能力超强的大型计算机;另一个是向体积小型化,功能多样化的方向发展。嵌入式微控制器,即传统意义上的单片机,是目前嵌入式系统的前身。一般都是8位或者16位。嵌入式微处理器,单片机的发展时间较早,处理能力很低,只能应用在一些相对简单的控制领域。嵌入式微处理器是近几年随着大规模集成电路发展同步发展起来的。与单片机相比,嵌入式微处理器的处理能力更强,主流的嵌入式微处理器都是32位的。嵌入式微处理器在一个芯片上集成了复杂的功能,有的还把常见的外部设备控制器也集成到芯片内部。未来嵌入式系统的发展方向,随着微电子技术的发展和电子制造工艺的进步,嵌入式系统硬件的体积会不断缩小,系统稳定性也在不断增强,可以把更多功能集成到一个芯片上;同时功耗方面也不断降低。随着网络的普及和IPv6技术的应用,IPv6技术主要解决了IPv4的IP地址数目紧缺的现状,越来越多的嵌入式设备也会加入到网络中。典型的嵌入式系统的组成,嵌入式系统包括硬件和软件。硬件包括了嵌入式微处理器和嵌入式微控制器以及一些外围元器件和外部设备;软件包括了嵌入式操作系统和应用软件。嵌入式系统硬件种类繁多,有许多硬件和软件的解决方案,不同嵌入式系统软硬件很难兼容,软件必须修改而硬件必须重新设计才能使用。不仅如此,我们还要对软件硬件都有所了解才可以逐渐有所领悟。软件和硬件都是学习嵌入式系统必不可少的方面。 其实我现在仍旧觉得在嵌入式系统这个博大精深的领域,我还有太多太多不懂的地方,需要学习的还有很读。嵌入式软件开发应用广泛而且前景很好,目前正处于人才紧缺的关口,嵌入式技术在未来能够得到更加广泛的应用。学好嵌入式,C语言很重要,所以感觉自己有必要在学习、积累一下这方面的知识。很多东西的学习不死一帆风顺也是比较耗时的,嵌入式也不例外,要想学好还必须下大力气,还必须坚持。这次的课程让我明确了一点:嵌入式开发对于提升我们的系统知识有很大的帮助,尤其是操作系统的知识。嵌入式系统开发对于我们的知识面要求非常的广,且要有一定的深度。,平时上完理论课很少有时间上机进行时间或者隔几天才上机练习,等到上机时一些东西可能遗忘了,比较耗费时间。在课上,有老师在前面演示我们感觉看得懂或感觉没问题,可轮到我们独立完成的时候,因为实际操作的少,跟着问题就来了。有些即使老师讲了很多遍的问题,我们不会,老师还是会走进我们给我们耐心的指导,还给我们讲一些学习的方法,一些软件开发需要注意的细节,让我们知道自己在哪方面不足,需要加强,也让我们了解到哪些需要认真的学习,那些是重点,不是没有方向的乱学一通,结果什么也学不好。经过这次的课程,我真真确确地感受到了嵌入式在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。当然,在学习的过程中并不是一帆风顺的,在这之中,因为要操作的东西很多,有时错一步,后面的结果就无法显示,而自己的水平根本检查不出来是哪里出了错。这时候,老师都会耐心的过来帮助我们一起去解决。在平时我们就需要好好的查阅书籍或者上网搜集相关资料去解决问题。

在了解了基础知识的情况下,我们还同步地进行了上机操作,当然,其中遇到很多的难题,很多东西都是第一次接触,又没有很多的指导操作,主要还是要凭借自己去摸索练习。其中的困难可想而知。然而坚持就是胜利,只要坚持做下去。通过这学期的实验课程,我感觉收获还是蛮多的。可能我对于嵌入式的知识学习的还是不太多,但是这之外的东西收获颇丰。它让我学会了如何通过自己的努力去认知一个新事物,更重要的是端正自己的学习态度,只有真正下功夫去学习,才能有收获,正所谓“一份耕耘,一份收获”。没有付出,何谈回报呢?再者,通过这学期的实验课程,我也学会了如何去分析问题,如何找出自己设计中的不足,继而去排除解决问题,这就是一个自我学习的过程。当我们通过实验去学习理论知识时,自己动手得出的结论,不仅能加深我们对嵌入式的理解,更能加深我们对此的记忆。

其实,我觉得最大的收获不仅仅是我学习到了多少知识,还有学习给我的感悟。首先是心态。一定要有一个积极的心态,独立解决问题的意识,培养扎实基础的认识。不要什么东西都感觉跟简单,很多东西可能是看似简单,就不去做了或者不屑一做,以至于性网上搜搜就可以了,这样很不好。有自己的东西有自己的付出才会有程序运行成功时的喜悦和小自豪,这样也有助于培养自己的兴趣。要时刻牢记态度决定一切。其次是兴趣,感觉学习工作中兴趣很关键,只是一个引发人积极性的问题,有了兴趣就自觉了,效率自然就高了。再次要敢于尝试和挑战。不要安于现成的程序,而且不要害怕失败,在程序调试的过程中这点尤为重要,“发现出问题然后解决问题”是一个积累经验的过程,而且很高效。最后要不懈追求。对于源代码进行不断的完善,要尽可能的实现课题所要求的功能。对于初学者或者开发较少的人来说,大量大写程序还是有必要的,但同时要注意思考,理解其实现的内在意义。还可以自己添加一些有意义的功能来实现。当看到自己编写的程序正常运行时,兴趣也会随之而来,乐此不疲,形成一个良性循环。我相信在以后的学习工作中,我也会端正自己的学习态度,一丝不苟的去对待每一件事。只有做好足够的准备,才能事半功倍!

第11篇:嵌入式系统

嵌入式系统 实验报告

闻悦 孙恩比 虞淦超 孙德一 滑冰 2010年1月5日

一.选题

我们组的实验题目是:将配制过并且用Open64编译过的linux操作系统移植到ebox中。 这个实验是编译原理实验和嵌入式系统实验的结合。我们的小组成员有三位选了董渊老师的编译原理专题训练。当时董渊老师对大实验给出了一个提议,用open64编译器编译busybox,并且和嵌入式系统实验相结合。我们组员感觉这将是一个很好的尝试。另外,在ebox平台上运行linux,网上鲜有现成的案例。我们觉得,虽然ebox运行Embedded WinCE已经可以满足很多商业上的需求,但是linux有它的许多特点是WinCE不具备的。显然最重要的就是它的开源特性,使得功能的开发变得更加灵活,虽然可能没有WinCE容易上手,但是linux可以支持更多的CPU类型,应用的场合也较多。

新的创意往往可以激发我们的干劲。实验刚一开始,我们就为这个前所未有的挑战而激动万分,跃跃欲试。我们也很想通过实验,使得我们在学习嵌入式系统新知识的同时,尝试运用编译知识和巩固以前学过的操作系统知识,以达到使知识融会贯通、学以致用的目的。

在接下来的实验报告中,我们将主要体现嵌入式实验部分的工作。

二.实验过程

嵌入式linux操作系统的三大要素是:bootloader, kernel image和根文件系统。我们也就按照这三点要素来总结我们的实验流程。

1.初选bootloader

在查阅了一些嵌入式linux的资料后,我们把bootloader的备选集定位在了lilo、grub和syslinux上面。根据我们的实验设计,我们希望首先尝试用U盘引导,之后再尝试把U盘的内容写到ebox里面引导linux。明确了需求,我们就对这些bootloader的功能和适用性进行了比较。

Lilo是Grub的前身,grub在很多功能上加强了lilo,在实验设计做好之后,我们进一步询问业内人士并且得到了一些建议:GRUB不像LILO一样使用裸扇区,而是可以从ext2或ext3文件系统中加载Linux内核。这也就是说,如果用U盘做引导,lilo可能不能用,而grub是可以的。syslinux相对于grub是一个更轻量级的引导器,一般用于光盘和U盘。原本我们认为syslinux可能比grub更适合我们的实验,但是由于网上关于grub的参考更多一些,并且我们认为grub是可以胜任预期的工作。于是我们没有实验syslinux,用grub开始了我们的初期实验之旅。

2.编译配制kernel

构建一个根文件系统首先需要的就是加载一个kernel。我们将busybox集成在内核中,这样kernel启动后,再加载initramfs,就可以直接进入带shell的linux环境中了。

kernel我们选择的是Linux2.6.31.6的最新版本。由于ebox使用的Vortex也是x86系统的,因此不需要交叉编译。在编译kernel的时候,我们指定的是自己的initramfs。我们的initramfs只是增加了一个init文件。init是一个hello.c文件,如下: hello.c:

#include #include int main(int argc,char argv[]) { printf(\"hello world, from initramfs.\\n\"); sleep(9999999); return 0; }

创建一个initramfs的源文件目录image,把hello程序拷入,并改名为init。在image下,创建一个dev/console的设备文件,否则无法输出helloworld。

mknod -m 600 dev/console c 5 1

在编译kernel时,在general setup配置目录下的initramfs sources配置项下输入image的路径名。 为我们的init程序是ELF格式的,所以内核需要支持ELF的可执行文件,否则启动这个init程序会失败。在内核的 Executable file formats配置目录下,选择 kernel support for ELF binaries,则可使内核支持ELF格式的可执行文件。

在编译kernel的时候,需要配置选项。kernel中有很多可选模块,makeallconfig是加载所有模块,这样做编译完kernel会很大。makenoconfig是最小化kernel。我们一开始使用的是makedefconfig,使用默认的配置。但是事实证明这是不可取的。在后来grub加载kernel中,出现了cmov问题。kernel无法加载,这是由于可能ebox的主机不支持kernel中的cmov指令。后来我们从网上查找了相关的资料。http://www.daodoc.com.tw/tech/os-xlinux/详细介绍了在Vortex86上的移植。我们下载了kernel,它的kernel非常小,只有2.1Mb,这个kernel是可以用的,但是缺少了硬盘驱动。我们认为可能是在配置的时候,在device一块少了写什么。我们详细试验了一下几个选项的配置:

Generic Driver Options,Block devices,SCSI device support,Serial ATA and Parallel ATA drivers,Multi-device support (RAID and LVM),Input device support,ATA/ATAPI/MFM/RLL support,经过反复的调试,但是硬盘识别的问题还是没有解决,在进入根目录后,没有找到hd0或是sda文件夹,我们也很困惑。不知道是不是将busybox集成带来的问题。

3.内核中集成Busybox——构造根文件系统

一个简单的内核运行在ebox中是没有意义的,我们进而考虑了如何利用busybox构造基于linux的嵌入式根文件系统。Busybox是一种可以提供很多标准的Unix工具的开源软件,它是专门为linux量身打造的一个轻便的软件包,对于嵌入式系统来说是十分合适的。busybox的使用也是我们此次实验与编译原理专题训练相结合的地方,编译实验要求我们利用目前还不完善的Open64编译器对Busybox源码进行编译,这部分在这里不多说。

在构建根文件系统之前,我们并没有使用busybox,而是尝试构建一个最简单的根文件系统。经过查阅资料,我们发现在编译linux内核的过程中,可以将文件系统部分直接编译到内核当中,这样在内核加载到内存中的时候,文件系统也会相应的随之加载。于是仿照一般的linux的文件系统的目录结构,我们尝试构建自己的文件目录(dev, sys, bin等)。linux内核成功加载之后,会首先运行一个根目录中的名字为init程序,于是我们写了一个打印helloworld的程序,编译之后生成名字为init的可执行文件。然后在qemu模拟器中运行,可以看到在内核加载完毕之后在屏幕上打印helloworld,初期的尝试性工作完成。

关于Busybox使用的第二个步骤是尝试将Busybox编译到内核当中,其中涉及到得问题是如何编译与安装Busybox。在安装Busybox的过程中,程序会自动在选定的安装目录中建立linux的目录结构,并且在/bin中加入了linux的命令。这里需要说明一下,Busybox的功能主要体现在/bin目录中的可执行程序,在编译Busybox的过程中,可以选择让Busybox支持什么样的linux指令,这样在编译安装结束后就会在/bin中出现相应的命令,编译好的linux内核也会支持相应的命令。安装Busybox成功之后,按照初期尝试的编译内核方法,将busybox编译到内核中去。这里需要注意一个问题,如果想在新生成的linux中使用busybox命令,就必须在系统初始化的过程中启动busybox的功能,这是就需要修改init程序。我们以shell脚本的方式写了一个init程序,该程序最后会启动/bin/sh命令(进入新的系统的shell程序)。上述工作完成之后,在qemu中进行模拟,可以发现此时的linux已经支持了常用的linux命令。

尝试busybox的第三个过程是如何将rootfs与kernel分离,之前的工作都是将构建好的文件系统直接编译到内核中,这样如果文件系统过大的话会增加内核的负担,另外,如果嵌入在内核中的文件系统就要求我们每次调试过程都要重新编译一边内核,花费比较多的时间。在这个步骤之中我们通过linux中带的cpio命令,该命令可以对指定的目录中的所有文件进行压缩,生成一个initrd文件,恰好达到我们的要求。这样,最终在qemu中模拟时不仅要选择使用的内核,也要指定相应的initrd。

4.第一次尝试

我们把编译完成的kernel image,initrd文件连同grub一起考到U盘里面,进入ebox,在MBR处选择U盘启动,运行grub,定位kernel和initrd,最后boot,但是boot失败,错误在initrd里面,系统意外中止了。随即我们更换了kernel的版本,重新设置kernel选项,尝试了无数种选项的组合,但是每次boot的时候,这个问题始终存在。

5.第二次尝试

在第一次尝试失败后,我们一度有些摸不清问题的所在,有些灰心丧气。元旦之前集体到陶老师处询问,并且也发邮件给ICOP的工作人员询问了关于kernel无法被引导的问题。看着网上众口不一的解决方案,我们也总结出了一些可能有效的办法。既然实验就是上面的几个部分组成,我们不妨试验一下换一换bootloader,或者换一换kernel。

换kernel是一件比较麻烦的事情,因为这个实验的kernel部分和编译的关系最密切。一旦换kernel,光编译就需要很久,编译部分的实验也要返工。我们大胆决定先换一个bootloader试试看,很幸运,我们成功了。

Grub4dos,一位活跃在某国际嵌入式爱好者论坛的外国朋友曾经向我们提到了这个引导工具,在我们最困难的时候,隔壁宿舍的周以苏同学也提议让我们试一试这个。它是一款主要由中国人维护的grub工具,对原始的grub做了许多改进。我们想既然外国朋友都向我们推荐我们自己的准国产工具,那我们不妨试试。

在用grub4dos替换掉了原先的grub之后,我们再次启动ebox,显示成功。

6.告别U盘

U盘引导完成之后, 我们就很容易告别U盘了。在ebox自带的WinCE里,我们把U盘里面的linux目录拷贝到ebox的硬盘根目录下。再次启动ebox,通过原始默认的MBR进入DOS,运行刚刚拷贝到硬盘根目录下linux文件夹里面的grub4dos,进入grub4dos,设置好kernel和initrd的位置,boot。linux便可以在没有U盘的情况下,直接运行在ebox上了。

7.用grub4dos做MBR

我们现在完成的linux boot过程可以简要概括为: 利用ebox原有的MBR(Master Boot Record)进入DOS,在DOS中找到ebox硬盘里面的grub4dos,利用grub4dos定位kernel和initrd,完成boot。可是在每次boot之前,都需要做一些引导设置的操作。实际grub4dos是可以省略这个二次引导的。它可以被直接装入MBR里面引导kernel和文件系统。我们尝试了这个装入。通过grub4dos提供的grub>fdisk /mbr命令。装入之后启动ebox,出现error 16并无法继续启动。由于原先的MBR已经被替换,ebox也没办法进入dos下,实验到此结束。

三.进一步工作的设想

1.用grub4dos做MBR

在一些情况下,用grub做二次引导的bootloader会更方便,而另一些情况是,把grub装入MBR内会更方便。我们上面已经提到,在实验的最后,装入MBR的过程没有成功。可能是因为误删除了一些grub的文件所致。这一步工作还可以继续尝试。 2.尝试使用syslinux作为bootloader完成实验

这只是一个尝试。因为我们在实验中并没有实测syslinux这个bootloader是否可以很好地工作。实际上grub4dos已经很好了。 3.使用支持更多linux功能的kernel

我们编译的kernel只是一个功能简单到不能再简单的kernel。一个实用的kernel必须做得更好,支持更多的功能,新添更多支持ebox的驱动。

四.实验心得体会

我们这次实验完成将配制过并且用Open64编译器编译过的linux操作系统移植到ebox中。工作大致可以分为编译部分和ebox引导部分。编译部分我们完成了用open64编译kernel以及根文件系统。ebox引导部分我们将编译好的linux操作系统移植到了ebox上。在实验中涉及到许多学科的知识,我们将编译原理、嵌入式系统乃至操作系统等课程的知识结合在一起进行实际使用,是嵌入式系统课之前所没有同学尝试过的一次创新性的实验。当然,有创新,就会有很多不确定的因素,这对我们来说是一次风险性的挑战。实验没有现成的文档可以参考,而且有关ebox上移植linux系统的资料也并不多。在我们遇到问题的时候,我们想了很多方法去解决,在一次次失败中磨练了我们,也使我们对我们的实验越来越深入,越来越了解。在一步一步克服困难的努力中,我们都学到了很多。现在我们做到了这个程度,可以说我们基本上赢了。很感谢老师提供的文档帮助我们解决了一些问题,也很感谢隔壁宿舍的张伟达同学和周以苏同学的帮助,更是有网络上很多国内外的嵌入式爱好者们耐心地解答我们用邮件咨询的种种问题。如此的参与规模,可以说这个实验是大学期间最难以忘怀的实验之一。在实验中,我们真切地体会了团队合作精神,大家一起想办法,同时在团队讨论中,我们每个人都学到了很多。我们觉得,这个实验其实是可以做为一个基础实验来给之后的同学做的。相比于基础实验中在ebox上安装WinCE,我们这个linux实验与底层更贴近。整个boot的过程都在实验的每个环节中充分地体现出来。做完实验,我们可以对MBR、bootloader以至加载kernel和文件系统的整体流程更加清晰。实验还残留着上面提到的一些问题,希望以后会有同学可以继续探索这个实验,也希望这个实验可以继续对以后同学有所帮助吧。

第12篇:嵌入式报告

引言 ...............................................................................................................................2 1.ARM概述 .................................................................................................................2 2.芯片介绍 ..................................................................................................................2

2.1............................................................................................................................2 3.显示方式选择方案与论证 ......................................................................................3 4.硬件设计 ..................................................................................................................4

4.1............................................................................................................................4 4.2 电路原理图 .....................................................................................................4 5.软件设计 ..................................................................................................................5 6.心得体会 ..................................................................................................................6 参考文献 .......................................................................................................................7

1 引言

随着信息技术和网络技术的高速发展,嵌入式产品日益广泛地渗透到各个行业和领域。嵌入式系统被定义为:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系统对功能、可靠性、成本,体积、功耗严格要求的专用计算机系统。嵌入式系统通常包括硬件和操作系统两部分,硬件是构成软件的基本运行环境。

到目前为止,ARM微处理器及技术的应用几乎已经深入到各个领域,如工业控制领域,无线通讯领域,网络应用,消费类电子产品。此外,ARM微处理器及技术还应用到许多不同的领域,并会在将来取得更加广泛的应用。

1.ARM概述

ARM(Advanced RISC Machines),既可以认为是一个公司的名字,也可以认为是对一类微处理器的通称,还可以认为是一种技术的名字。

ARM 微处理器,已遍及工业控制、消费类电子产品、通信系统、网络系统、无线系统等各类产品市场,基于ARM 技术的微处理器应已经渗入到我们生活的各个方面。

2.芯片介绍

2.1LPC2132简介

芯片概述:

LPC2131/2132/2138是基于一个支持实时仿真和嵌入式跟踪的32/16 位ARM7TDMI-STM CPU 的微控制器,并带有32kB、64kB、512 kB 的嵌入的高速Flash 存储器。128 位宽度的存储器接口和独特的加速结构使32位代码能够在最大时钟速率下运行。

2 LPC2132G功能方框图如图2-1所示

图2-1 LPC2132G功能方框图

本设计使用2块4位共阴LED数码管作为显示模块。

3.显示方式选择方案与论证

采用LED数码管动态扫描显示方法,是指一位一位地轮流点亮每位显示器(称为扫描),即每个数码管的位选被轮流选中,多个数码管公用一组段选,段选数据仅对位选选中的数码管有效。对于每一位显示器来说,每隔一段时间点亮一次。显示器的亮度既与导通电流有关,也与点亮时间和间隔时间的比例有关。通过调整电流和时间参数,当动态扫描频率加大到一定范围时可以既保证亮度,又保证显示。动态显示对IO的利用率相对教高。

3 4.硬件设计

4.1 电路设计原理

RSPI是一种高速的、全双工、同步的通信总线,且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便。SPI还是一个数据交换协议:因为SPI的数据输入和输出线独立,所以允许同时完成数据的输入和输出。不同的SPI设备的实现方式不尽相同,主要是数据改变和采集的时间不同,在时钟信号上沿或下沿采集有不同定义。

SPI总线工作的四种方式如图4-1所示,其中使用的最为广泛的是SPI0和SPI3方式(实线表示):

图4-1 SPI总线四种工作方式

SPI模块为了和外设进行数据交换,根据外设工作要求,其输出串行同步时钟极性和相位可以进行配置,时钟极性对传输协议没有重大的影响:CPOL=0时串行同步时钟的空闲状态为低电平; CPOL=1,串行同步时钟的空闲状态为高电平;

时钟相位能够配置用于选择两种不同的传输协议之一进行数据传输:CPHA=0,在串行同步时钟的第一个跳变沿(上升或下降)数据被采样; CPHA=1,在串行同步时钟的第二个跳变沿(上升或下降)数据被采样。

SPI主模块和与之通信的外设备时钟相位和极性应该一致。 4.2 电路原理图

4 P1.24-P1.31口作为数码管数据输出口,外接上拉电阻后分别连接到两个数码管的段选端上。P0.0-P1.7口作为数码管位选控制口,分别接到2个4位共阴数码管的共8个位选端上。另外,LPC2138的1-

4、

6、

8、

10、12脚接+3.3V电源。

14、

16、

18、20脚接+5V电源。

5、

7、

9、

11、

13、

15、

17、

19、37-40脚接GND。电路原理图如图4-2所示。

图4-2 总电路原理图

5.软件设计

程序流程图如图5-1所示

图5-1 程序流程图

6.心得体会

本次嵌入式系统设计有学生自主命题,开放性大,范围广但是这同时对于每一个同学来说都是一个不小的挑战。

此次设计为基于嵌入式ARM的电子秒表的设计,在设计中以LPC2132为核心的核心板来设计电子秒表。在设计中为解决问题需自己查阅资料,

6 是自己更多更深入的去了解和使用嵌入式系统来完成设计,加深了对嵌入式系统的认识,也激起了自己对嵌入式系统的兴趣。

本次设计的难点关键在于对于ARM系统人士的不足,对于嵌入式系统的不了解,以及对于各种芯片的使用方法不能灵活运用使得设计中问题不断。

参考文献

[1] 崔更申,孙安青.ARM嵌入式系统开发与实践[M].北京:中国电力出版社,2008 [2] 张绮文.ARM 嵌入式常用模块与综合系统设计实例精讲[M].北京:电子工业出版社, [3] 刘同法,肖志刚.ARM Cortex-M3内核微控制器快带入门与应用.北京:北京航空航天大学出版社,2009 [4] 三恒星科技.ARM 7易学通[M].北京:人民邮电出版社,2006 [5] Steve Furber著;田泽等译.ARM SoC体系结构[M].北京:北京航空航天大学出版社,2002 [6] 滕英岩.嵌入式系统开发基础——基于ARM位处理器和Linux操作系统[M].北京:电子工业出版社,2008 [7] http://baike.baidu.com/

第13篇:嵌入式心得

11计科4班

115031303

4鲁敏杰

嵌入式实习报告

实习内容:学习并自己动手在Ubuntu系统下制作电子相框

实验目的:Ubuntu操作系统的使用,利用C语言编写程序制作电子相框第一周学习:学习Ubuntu操作系统的简单使用

使用VMware 虚拟机搭建Ubuntu操作系统环境;作为主要由自由软件构建的操作系统,Ubuntu具有庞大的社区力量,用户可以方便地从社区获得帮助。Ubuntu的一些基本命令操作如下所示:

Ls查看系统目录下的文件

Cd进入目录 后接地址cd ..返回上级

Gedit进行编译操作 后接需要编译的文件

Cat查看文件 在编译器中查看与vi 相似

Make进行编译make clean 清理编译

Ctrl+Alt+F2 进入Ubuntu系统的控制台

Ctrl+Alt +F7退出控制台操作

ctrl + C控制台操作时终止程序运行

第二周学习:在Ubuntu中利用C语言实现图片的特效运转

电子相册的主体结构在编译器中实现编译,主要学习C语言程序的编写实现图片的特效显示 。图片特效的实现学习完毕,就开始制作电子相册,实现图片的添加。

图片的添加:图片加入文件中。在showpic.c文件中实现特效 在main.c文件中实现显示 。用C语言编写的特效有上到下、左到右、中间分屏、上下分屏、圆的扩展与缩小、四分屏等。

部分特效关键代码如下:

画点实现在屏幕中设定坐标、参数中添加了颜色

void pixel_point(struct fb_var_screeninfo fb_var,char *mem, int x, int

y, int color)//画点函数

{int *buf = (int *)((fb_var.xres*y+x)*fb_var.bits_per_pixel/8 + mem);

*buf = color;

}

利用C语言实现画圆的特效

void pixel_circle(struct fb_var_screeninfo fb_var, char *mem, int x, int

y,int len,int color)//画圆

{int i,j;

for(i=0; i

for(j=0; j

if(((j-x)*(j-x) + (i-y)*(i-y)) >(len*len))continue;

else

pixel_point(fb_var,mem,j,i,color);

}

满屏打印输出函数

voidpixel_full_screen(struct fb_var_screeninfo fb_var, char *mem,int color)//满屏

{int i,j;

for(i=0; i

for(j=0; j

pixel_point(fb_var,mem,j,i,color);

usleep(1000);

}

第三周学习:制作一个完整可运行的相册程序

编程在showpic.c函数中实现图片的特效输出;修改showpic.c添加已有特效;

编程main.c实现图片及特效的可控定向显示;完成实际操作并成功运行通过验收

学习心得:

Ubuntu操作系统与Linux操作系统相似学习起来不难,超级终端的使用就是命令行的操作,这点在以前学习的Linux操作系统中有一定的基础。最重要的感受就是特效算法的实现。这是一个学习C语言与linux的很好机会。 出现问题:

1.自下到上或者自右到左实现特效时候无法正常运行,只能出现两张图片的一半效果。

2.分屏输出出现很多重合的图片,不能按照一定的速率打印。

解决问题:

多次刷屏,当读出一半图片时候,重新读取另一半图片以及新的另一半图片。不能安装预定的方式打印图片

心得:

在为期三周的实习过程中,首先了解在VMware虚拟机上搭建的Ubuntu操作系统,加深了对Linux系统的理解和认识。其次就是学会一些基本的图片特效的实现,由于时间紧迫的缘故,不能熟练的掌握。但是实现一些基本特效还是比较容易的,对C程序又有了新的理解。总是犯一些很浅显的错误,说明还是学的不够扎实。这次实习也给了重新认识自己的机会,知道了以前学到的跟实践起来还是有很大的差别,面临工作的压力,我们这点能力是不够看的。要想找到理想的工作,同志仍需努力!

第14篇:嵌入式学习

最近很多朋友都在问,如何学习嵌入式,作为嵌入式的老鸟,我想我可以做一些唠叨,嵌入式的入门门槛稍微高一点,但是再高的城墙也是小砖头筑起来的,所以没有必要因为门槛高就觉得很困难,一步一个脚印,贵在坚持就可以了。

学习嵌入式,该学习什么基本的知识呢?

首先C语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对C语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用C语言,你说不掌握它可以吗?至于如何学习C语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,C语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。

其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。

还有应该学习下linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习MTK、塞班、Android等操作系统,Android是以后发展的趋势,现在很热门,Android也是基于linux系统封装的,所以建议先学习下linux。

还有,应该学习下单片机或者ARM或者MIPS,很多人说我没有单片机的经验,直接学ARM可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习ARM就更简单了。

最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下UBOOT的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。

至于上面说的知识如何学习呢?每个人都应该去找自己最好的方法,所谓的最好的方法就是最适合自己的方法。很多人看不进书,那就去看看视频吧。视频也应该要选择,不是随便看看,应该要有所选择,有所挑选。我也是这样一路走过来的,不过我这人比较懒,我看不进书,一看书我就想睡觉,所以这几年我都是看视频过来的,现在也算学有所成,但也不敢说是高手吧。

我在网上看到,有人把自己学习嵌入式的视频总结出来,嵌入式系列实践和视频教程,大家可以看看网址http:///viewnews-8701 我仔细看了觉得很不错,我本来也想整理下,可是奈何我自己的电脑硬盘空间才40G,没有办法,时间也是不够,心有余而力不足,我不是在帮他做广告,虽然要花钱,我觉得算不错,至少自己不用去整理和花大量的时间去找资源,当然如果网上有的下,你网速和硬盘都够的话,我建议大家自己网上下也好。想想我自己该开始学的时候,那时视频资源少之又少,我买书和买视频至少花了几千块,但是我觉得那很值,至少我现在赚回来了很多知识。

最后,希望这篇文章对热爱嵌入式,想致力于嵌入式开发的朋友有所帮助。送给大家一句简单而又朴素的话,坚持就是胜利,贵在坚持!

第15篇:嵌入式有感

学嵌入式有感

电子技术、计算机技术和网络技术的飞速发展,极大的影响了人们的日常生活,甚至改变了人们的生活模式。人们到处可以见到电子设备的存在,而几乎所有的电子设备中都包含着嵌入式系统。那么嵌入式系统即一般指非 PC 系统,有计算机功能但又不称之为计算机的设备或器材。它是以应用为中心,软硬件可裁减的,适应应用系统对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。

它的应用几乎涉及到了生活中的所有电器设备,如掌上 PDA、移动计算设备、电视机顶盒、手机上网、数字电视、多媒体、汽车、微波炉、数字相机、家庭自动化系统、电梯、空调、安全系统、自动售货机、蜂窝式电话、消费电子设备、工业自动化仪表与医疗仪器等。而大部分的嵌入式系统并不需要操作系统,首先是因为没有必要,例如洗衣机和微波炉等等,它们的功能有限。这样的系统只需要一道控制程序管好几个按键、指示灯和数码管就可以了。其次是因为条件不允许。它们采用4位或8位的微处理器,有的内存少得不到1KB,根本没有操作系统生存的空间。即使要完成一些比较复杂的任务,也只能依靠程序员的技巧去精雕细琢,以弥补硬件条件的不足。 随着微电子技术的不断创新和发展,大规模集成电路的集成度和工艺水平不断提高,集成电路工业已经生产了大量低成本、高可靠性和高精度的微电子结构模块,推动了一个全新的技术领域和产业的发展。

嵌入式硬件设计采用了“CPU+PLD+模拟器件”的模式,是指嵌入式系统以中央处理单元(CPU)为基础和中心,外加可编程逻辑器件(PLD)和模拟器件构成(特别小型的嵌入式设计 除外)。CPU主要包括嵌

入式微处理器(MPU)和嵌入式微控制器(MCU),PLD主要包括PAL、

EPLD、CPLD、FPGA等。这种设计模式可以大大简化嵌入式系统的软硬件,嵌入式系统总体设计的难度得以降低,而系统总体设计的水平却得到提高。

这种结构是由目前集成电路的发展水平和技术现状决定的。集成电路技术的发展促成 了这种设计模式的出现,微处理器技术和器件可编程技术给嵌入式系统设计人员带来了巨大的方便,它提供了用软件来改变和实现硬件的功能,适合硬件解决的问题由硬件解决,适合软件解决的问题由软件完成。集成电路技术的发展为这种设计模式的出现提供了全方位支持,计算机硬件平台性能的大幅度提高,高性能的EDA综合开发工具(平台)得到长足发展,为复杂的嵌入式系统设计者提供了不同用途和不同级别集编辑、布局、布线、编译、综合、模拟、测试、验证和器件编程等一体化的集成开发环境。集成电路技术的技术现状决定设计模式不能抛开模拟器件,现阶段模数混合的集成电路很难设计生产,模数和数模转换器等模拟电路还只能采用传统的设计方法。

而嵌入式的核心是嵌入式微处理器。嵌入式微处理器一般具备 四个特点: (1) 对实时和多任务有很强的支持能力,能完成多任务并且有较短的中断响应时间,从而使内部的代码和实时操作系统的执行时间减少到最低限度; (2) 具有功能很强的存储区保护功能,这是由于嵌入式系统的软件结构已模块化,而为了避免在软件模块之间出现错误的交叉作用,需要设计强大的存储区保护功能,同时也有利于软件诊断; (3) 可扩展的处理器结构,以能迅速地扩展出满足应用的高性能的嵌入式微处理器; (4) 嵌

入式微处理器的功耗必须很低,尤其是用于便携式的无线及移动的计算和通信设备中靠电池供电的嵌入式系统更是如此,功耗只能为 m W 甚至μ W 级。

我们知道嵌入式操作系统是一种支持嵌入式系统应用的操作系统软件,它是嵌入式系统 ( 包括硬、软件系统 ) 极为重要的组成部分,通常包括与硬件相关的底层驱动软件、系统内核、设备驱动接口、通信协议、图形界面、标准化浏览器等 Browser 。嵌入式操作系统具有通用操作系统的基本特点,如能够有效管理越来越复杂的系统资源;能够把硬件虚拟化,使得开发人员从繁忙的驱动程序移植和维护中解脱出来;能够提供库函数、驱动程序、工具集以及应用程序 。与通用操作系统相比较,嵌入式操作系统在系统实时高效性、硬件的相关依赖性、软件固态化以及应用的专用性等方面具有较为突出的特点。

一般情况下,嵌入式操作系统可以分为两类,一类是面向控制、通信等领域的实时操作系统,如 WindRiver 公司的 VxWorks、ISI 的 pSOS、QNX 系统软件公司的 QNX、ATI 的 Nucleus 等;另一类是面向消费电子产品的非实时操作系统,这类产品包括个人数字助理 (PDA)、移动电话、机顶盒、电子书、WebPhone等。

对于非实时操作系统我们了解到早期的嵌入式系统中都没有操作系统的概念,程序员编写嵌入式程序通常直接面对裸机及裸设备。在这种情况下,通常把嵌入式程序分成两部分,即前台程序和后台程序。前台程序通过中段来处理事件,其结构一般为无限循环;后台程序则掌管整个嵌入式系统软、硬件资源的分配、管理以及任务的调度,是一个系统管理调度程序。这就是通常所说的前后台系统。一般情况下,后台程序也叫任务级程序,前台程序也叫事件处理级程序。在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的发生,不再做任何工作就退出中断,经过后台程序的调度,转由前台程序完成事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续和其他中断。

实际上,前后台系统的实时性比预计的要差。这是因为前后台系统认为所有的任务具有相同的优先级别,即是平等的,而且任务的执行又是通过 FIFO 队列排队,因而对那些实时性要求高的任务不可能立刻得到处理。另外,由于前台程序是一个无限循环的结构,一旦在这个循环体中正在处理的任务崩溃,使得整个任务队列中的其他任务得不到机会被处理,从而造成整个系统的崩溃。由于这类系统结构简单,几乎不需要 RAM/ROM 的额外开销,因而在简单的嵌入式应用被广泛使用。

而对于实时系统是指能在确定的时间内执行其功能并对外部的异步事件做出响应的计算机系统。其操作的正确性不仅依赖于逻辑设计的正确程度,而且与这些操作进行的时间有关。“在确定的时间内”是该定义的核心。也就是说,实时系统是对响应时间有严格要求的。

实时系统对逻辑和时序的要求非常严格,如果逻辑和时序出现偏差将会引起严重后果。实时系统有两种类型:软实时系统和硬实时系统。软实时系统仅要求事件响应是实时的,并不要求限定某一任务必须在多长时间内完成;而在硬实时系统中,不仅要求任务响应要实时,而且要求在规定的时间内完成事件的处理。通常大多数实时系统是两者的结合。实时应用软件的设计一般比非实时应用软件的设计困难。实时系统的技术关键是如何保证系统的实时性。

实时多任务操作系统是指具有实时性、能支持实时控制系统工作的操作系统。其首要任务是调度

一切可利用的资源完成实时控制任务,其次才着眼于提高计算机系统的使用效率,重要特点是要满足对时间的限制和要求。实时操作系统具有如下功能:任务管理 ( 多任务和基于优先级的任务调度 )、任务间同步和通信 ( 信号量和邮箱等 )、存储器优化管理 ( 含 ROM 的管理 )、实时时钟服务、中断管理服务。实时操作系统具有如下特点:规模小,中断被屏蔽的时间很短,中断处理时间短,任务切换很快。

实时操作系统可分为可抢占型和不可抢占型两类。对于基于优先级的系统而言,可抢占型实时操作系统是指内核可以抢占正在运行任务的 CPU 使用权并将使用权交给进入就绪态的优先级更高的任务,是内核抢了 CPU 让别的任务运行。不可抢占型实时操作系统使用某种算法并决定让某个任务运行后,就把 CPU 的控制权完全交给了该任务,直到它主动将 CPU 控制权还回来。中断由中断服务程序来处理,可以激活一个休眠态的任务,使之进入就绪态;而这个进入就绪态的任务还不能运行,一直要等到当前运行的任务主动交出 CPU 的控制权。使用这种实时操作系统的实时性比不使用实时操作系统的系统性能好,其实时性取决于最长任务的执行时间。不可抢占型实时操作系统的缺点也恰恰是这一点,如果最长任务的执行时间不能确定,系统的实时性就不能确定。

可抢占型实时操作系统的实时性好,优先级高的任务只要具备了运行的条件,或者说进入了就绪态,就可以立即运行。也就是说,除了优先级最高的任务,其他任务在运行过程中都可能随时被比它优先级高的任务中断,让后者运行。通过这种方式的任务调度保证了系统的实时性,但是,如果任务之间抢占 CPU 控制权处理不好,会产生系统崩溃、死机等严重后果。

嵌入式实时操作系统在目前的嵌入式应用中用得越来越广泛,尤其在功能复杂、系统庞大的应用中显得愈来愈重要。

首先,嵌入式实时操作系统提高了系统的可靠性。在控制系统中,出于安全方面的考虑,要求系统起码不能崩溃,而且还要有自愈能力。不仅要求在硬件设计方面提高系统的可靠性和抗干扰性,而且也应在软件设计方面提高系统的抗干扰性,尽可能地减少安全漏洞和不可靠的隐患。长期以来的前后台系统软件设计在遇到强干扰时,使得运行的程序产生异常、出错、跑飞,甚至死循环,造成了系统的崩溃。而实时操作系统管理的系统,这种干扰可能只是引起若干进程中的一个被破坏,可以通过系统运行的系统监控进程对其进行修复。通常情况下,这个系统监视进程用来监视各进程运行状况,遇到异常情况时采取一些利于系统稳定可靠的措施,如把有问题的任务清除掉。

其次,提高了开发效率,缩短了开发周期。在嵌入式实时操作系统环境下,开发一个复杂的应用程序,通常可以按照软件工程中的解耦原则将整个程序分解为多个任务模块。每个任务模块的调试、修改几乎不影响其他模块。商业软件一般都提供了良好的多任务调试环境。 再次,嵌入式实时操作系统充分发挥了 32 位 CPU 的多任务潜力。 32 位 CPU 比 8、16 位 CPU 快,另外它本来是为运行多用户、多任务操作系统而设计的,特别适于运行多任务实时系统。 32 位 CPU 采用利于提高系统可靠性和稳定性的设计,使其更容易做到不崩溃。例如, CPU 运行状态分为系统态和用户态。将系统堆栈和用户堆栈分开,以及实时地给出 CPU 的运行状态等,允许用户在系统设计中从硬件和软件两方面对实时内核的运行实施保护。如果还是采用以前的前后台方式,则无法发挥 32 位 CPU 的优势。

从某种意义上说,没有操作系统的计算机 ( 裸机 ) 是没有用的。在嵌入式应用中,只有把 CPU 嵌入到系统中,同时又把操作系统嵌入进去,才是真正的计算机嵌入式应用。

当然嵌入式实时性操作系统也有其缺点,在嵌入式实时操作系统环境下开发实时应用程序使程序的设计和扩展变得容易,不需要大的改动就可以增加新的功能。通过将应用程序分割成若干独立的任务模块,使应用程序的设计过程大为简化;而且对实时性要求苛刻的事件都得到了快速、可靠的处理。通过有效的系统服务,嵌入式实时操作系统使得系统资源得到更好的利用。但是,使用嵌入式实时操作系统还需要其额外的 ROM/RAM 开销。

通过对嵌入式系统的认识,我们也了解到了很多其有关的知识,有机构估计,全世界嵌入式系统产品潜在的市场将超过1万亿美元。随着技术的发展,业内对嵌入式系统的定义也越来越清晰。它是微处理器、大规模集成电路、软件技术和各种具体的行业应用技术相结合的结果,其中各种软件技术占了嵌入式系统80%的工作量。嵌入式系统不同于一般PC 机上的应用系统,即使是针对不同的具体应用而设计的嵌入式系统之间的差别也很大。嵌入式系统一般功能单

一、简单,且在兼容性方面要求不高,但是在大小、成本方面限制较多。可以说,嵌入式系统是不可垄断、需要不断创新的技术。

第16篇:嵌入式实验报告

实验一 ARM汇编语言程序设计

一、实验目的

1.了解IAR Embedded Workbench 集成开发环境 2.掌握ARM汇编指令程序的设计及调试

二、实验设备

1.PC操作系统WIN98或WIN2000或WINXP,ADSI.2集成开发环境,仿真驱动程序

三、实验内容

1.熟悉IAR Embedded Workbench 集成开发环境

2.理解下列程序,新建工程,加入下面的程序,并观察实验结果,解释程序实现的功能

分析:该程序实现的功能是程序功能:Y = A*B+C*D+E*F 程序代码:

AREA Examl, CODE,READONLY ;定义一个代码段 ENTRY

;程序入口

MOV R0,#0;设置R0寄存器的值为0 MOV R8,#0;设置R8寄存器的值为0 ADR R2,N;将R2寄存器的值设为数据域N的地址 LDR R1,[R2];将以R2的值为地址的数据读入R1 MOV R2,#0;设置R2的值为0 ADR R3,C; 将R3寄存器的值设为数据域C的地址 ADR R5,X; 将R5寄存器的值设为数据域X的地址 LOOP LDR R4,[R3,R8];将R3+R8的数据读入R4 LDR R6,[R5,R8];将R5+R8的数据读入R6 MUL R9,R4,R6;R9 = R4*R6 ADD R2,R2,R9;R2 = R2+R9 ADD R8,R8,#4;R8 = R8+4 ADD R0,R0,#1;R0 = R0+1 CMP R0,R1;比较R0和R1的值 BLT LOOP;R0

执行结果如下:

3.实现1+2+3+4+····+100,求的值,并保存在地址0x90018的地址里面

程序代码:

MOV R0,#100;设置R0寄存器的值为100 LDR R2,=0X90018;设置R2寄存器指向地址0x90018 MOV R1,#0;设置R1的值为0 MOV R3,#0;设置R3的值为0 LOOP ADD R3,R3,R0;R3 = R3+R0 SUB R0,R0,#1;R0 = R0-1 CMP R0,R1;将R0和R1的值比较

BNE LOOP;不相等的话继续执行循环

STR R3,[R2];将R3的值装入到R2指向的地址块中。 END 程序执行结果:程序执行完在0x90018内存入的数据是0x13ba即5050

实验二 ARM汇编语言程序设计

一、实验目的

1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程;2.掌握ARM汇编指令中的堆栈指令的操作,以及存储器的装载指令操作。

二、实验设备 1.PC操作系统WIN98或WIN2000或WINXP, ADS1.2.集成开发环境,仿真器驱动程序。

三、实验内容

1.理解下列程序,新建工程,加入下面的程序,并观察实验结果

程序代码:

x EQU 15;定义常量x=15 y EQU 61;定义常量y=61 stack_top EQU 0X1000;定义堆栈栈顶地址为0x1000 ENTRY;程序入口处

MOV sp,#stack_top;将堆栈指针指向栈顶 MOV r0,#x;将x的值放入r0 STR r0,[sp];将r0的值压入堆栈 MOV r0,#y;将y的值放入r0 LDR r1,[sp];将x的值放入r1 ADD r0,r0,r1;r0 = r0+r1 STR r0,[sp];将r0的值装入堆栈 Stop; B stop; 程序结果为:r1 = x+y = 0x6D

2.编写程序循环R4~R11进行累加8次赋值,R4~R11初始值是1~8,每次操作后把R4~R11的内容放到SP栈中,SP初始设置为0x800,最后把R4~R11用LDMFD指令清空为0

程序代码如下: X EQU 1;定义常量x = 1 stack_top EQU 0X800;定义栈顶地址 ENTRY; MOV SP,#stack_top;将栈顶地址指向0x800 MOV R4,#1;设置R4 = 1 MOV R5,#2;设置R5 = 2 MOV R6,#3;设置R6 = 3 MOV R7,#4;设置R7 = 4 MOV R8,#5;设置R8 = 5 MOV R9,#6;设置R9 = 6 MOV R10,#7;设置R10 = 7 MOV R11,#8;设置R11 = 8 LOOP ADD R4,R4,#x; R4累加1 ADD R5,R5,#x; R5累加1 ADD R6,R6,#x; R6累加1 ADD R7,R7,#x; R7累加1 ADD R8,R8,#x; R8累加1 ADD R9,R9,#x; R9累加1 ADD R10,R10,#x; R10累加1 ADD R11,R11,#x; R11累加1 STMIA SP!,{R4-R11};将R4-R11的值压入堆栈

CMP R4,#9;比较R4和9的大小

BLT LOOP;R4

LDMFD SP!,{R4-R11};将R4-R11清零 END; 实验结果:主要实现将数据2-9,3-10,4-11……9-16压入堆栈(初始地址是0x800处开始),最后将R4-R11全部清零。

3.更改实验中1中的X,Y的值,观察期结果 程序代码:

x EQU 20 y EQU 120 stack_top EQU 0X1000 ENTRY MOV sp,#stack_top MOV r0,#x STR r0,[sp] MOV r0,#y LDR r1,[sp] ADD r0,r0,r1 STR r0,[sp] Stop B Stop END 程序结果为:r0 = x+y = 140 = 0X8C

实验三 ARM汇编语言程序设计

一、实验目的

1.了解ARM汇编语言的基本框架,学会使用ARM的汇编语言编程

2.掌握ARM汇编的存储器加载/存储指令,及if条件、循环、循环及循环的汇编实现

二、实验设备

1.PC操作系统WIN98或WIN2000或WINXP,ADS1.2集成开发环境,仿真器驱动程序

三、实验内容

1.理解下列程序,新建工程,加入下面的程序,并观察实验结果 程序代码:

Num EQU 20;定义常量Num = 20 START; LDR r0,=src;将src数据块的开始地址存入r0中 LDR r1,=dst; 将dst数据块的开始地址存入r1中 MOV r2,#Num;设置r2的值为20 MOV sp,#0x400;堆栈指针sp指向0x400 blockcopy; MOVS r3,r2,LSR #3;将r2左移3位移入r3并且影响标志位 BEQ copywords;结果为0的话跳转到copywords STMFD SP!,{r4-r11};将r4-r11的值入栈 octcopy; LDMIA r0!,{r4-r11};将src的前8个字数据存入让r4-r11 STMIA r1!,{r4-r11};将r4-r11中的数据放入dst数据块中 SUBS r3,r3,#1;r3 = r3-1 BNE octcopy;结果不为0跳转到octcopy LDMFD SP!,{R4-R11};恢复原来的r4-r11 copywords; ANDS r2,r2,#7; r2 = r2&7 BEQ stop;结果为0跳转到stop wordcopy; LDR r3,[r0],#4;将r0指向的字数据放入r3中,r0 = r0+4 STR r3,[r1],#4;将r3中的数据存入到dst数据块中,r1 = r1+4 SUBS r2,r2,#1;r2 = r2 -1 BNE wordcopy;不为0跳转到wordcopy处 stop; B stop; src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4; dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0; END; 程序结果:将src的数据全部存入到dst中

2.新建工程,并自行编写程序,分别使用LDR,STR,LDMIA,STMIA操作,实现对某段连续存储单元写入数据,并观察结果 程序代码:

MOV R4,#1;设置r4 = 1; MOV R5,#2; 设置r5 = 1; MOV R6,#3;设置r4 = 1;

LDR R0,=dst;R0保存dst的首地址

STR R4,[R0];将r4的值装入r0执行的内存中

STR R5,[R0,#4]; 将r5的值装入r0+4执行的内存中 STR R6,[R0,#8]; 将r6的值装入r0+8执行的内存中 LDR R7,=src; R0保存src的首地址

LDMIA R7,{R8-R10};将r7执行的地址的数据读入r8=r10 LDR R3,=N;r3保存N的首地址

STMIA R3!,{R8-R10};将r8-r10装入r3指向的内存 N DCD 0,0,0 src DCD 1,2,3 dst DCD 0,0,0 END 程序结果:熟悉使用LDMIA,STMIA和LDR,STR指令

3.使用ARM汇编指令实现if条件执行,使用ARM汇编指令实现for条件执行,

使用ARM汇编指令实现while条件执行,使用ARM汇编指令实现do…while条件执行。 程序代码:

实现if条件: MOV R0,#1 MOV R1,#2 CMP R0,R1 BGT LOOP1 BLT LOOP2 LOOP1 MOV R3,R0 LOOP2 MOV R3,R1 END 程序结果:

实现for和while条件:

MOV R1,#1 MOV R3,#0 MOV R2,#101; LOOP ADD R3,R1,R3 ADD R1,R1,#1 CMP R1,R2 BLT LOOP END 程序结果:

实现do…while条件:

MOV R0,#1 MOV R1,#100 MOV R3,#0 LOOP CMP R0,R1 BGT STOP ADD R3,R0,R3 ADD R0,R0,#1 B LOOP STOP END 程序结果:

实验四 基于ARM的C语言程序设计

一、实验目的

1.了解ARM C语言的基本框架,学会使用ARM的C语言编程。 2.掌握C语言和汇编语言编程的相互调用。

二、实验设备

1.EL-ARM-830教学实验箱,PentiumII以上的PC机,仿真器电缆。

三、ARM C语言简介与使用规则

1.ARM使用C语言编程是大势所趋

在应用系统的程序设计中,若所有的编程任务均由汇编语言来完成,其工作量巨大,并且不宜移植。由于ARM的程序执行速度较高,存储器的存储速度和存储量也很高,因此,C语言的特点充分发挥,使得应用程序的开发时间大为缩短,代码的移植十分方便,程序的重复使用率提高,程序架构清晰易懂,管理较为容易等等。因此,C语言的在ARM编程中具有重要地位。

2.ARM C语言程序的基本规则

在ARM程序的开发中,需要大量读写硬件寄存器,并且尽量缩短程序的执行时间的代码一般使用汇编语言来编写,比如ARM的启动代码,ARM的操作系统的移植代码等,除此之外,绝大多数代码可以使用C语言来完成。

C语言使用的是标准的C语言,ARM的开发环境实际上就是嵌入了一个C语言的集成开发环境,只不过这个开发环境和ARM的硬件紧密相关。

在使用C语言时,要用到和汇编语言的混合编程。当汇编代码较为简洁,则可使用直接内嵌汇编的方法,否则,使用将汇编文件以文件的形式加入项目当中,通过ATPCS的规定与C程序相互调用与访问。

ATPCS,就是ARM、Thumb的过程调用标准(ARM/Thumb Procedure Call Standard),它规定了一些子程序间调用的基本规则。如寄存器的使用规则,堆栈的使用规则,参数的传递规则等。

在C程序和ARM的汇编程序之间相互调用必须遵守ATPCS。而使用ADS的C语言编译器编译的C语言子程序满足用户指定的ATPCS的规则。但是,对于汇编语言来说,完全要依赖用户保证各个子程序遵循ATPCS的规则。具体来说,汇编语言的子程序应满足下面3个条件:

● 在子程序编写时,必须遵守相应的ATPCS规则; ● 堆栈的使用要遵守相应的ATPCS规则; ● 在汇编编译器中使用-atpcs选项。 基本的ATPCS规定,请详见相关技术文档。

汇编程序调用C程序

汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。 在汇编程序中使用IMPORT伪指令声明将要调用的C程序函数。 在调用C程序时,要正确设置入口参数,然后使用BL调用。

C程序调用汇编程序

汇编程序的设置要遵循ATPCS规则,保证程序调用时参数正确传递。

在汇编程序中使用EXPORT伪指令声明本子程序,使其他程序可以调用此子程序。 在C语言中使用extern关键字声明外部函数(声明要调用的汇编子程序)。

在C语言的环境内开发应用程序,一般需要一个汇编的启动程序,从汇编的启动程序,跳到C语言下的主程序,然后,执行C程序,在C环境下读写硬件的寄存器,一般是通过宏调用,在每个项目文件的Startup44b0/INC目录下都有一个44b.h的头文件,那里面定义了所有关于44B0的硬件寄存器的宏,对宏的读写,就能操作44B0的硬件。

具体的编程规则同标准C语言。

四、实验内容

1、理解下列程序,新建工程,加入下面的程序,并观察实验结果。程序代码:

/*实现5个数的相加*/ int sum5(int a,int b,int c,int d,int e){ return (a+b+c+d+e); } ;汇编语言

IMPORT sum5;声明调用c函数 CALLSUMS STMFD SP!,{LR};将LR寄存器入栈 MOV R0,#1;r0 = 1 ADD R1,R0,R0;r1 = 2 ADD R2,R1,R0;r2 = 3 ADD R3,R1,R2;r3 = 5 STR R3,[SP,#-4]!;将r3的值入栈当做第五个参数 ADD R3,R1,R1;R3 = R3+R1=4 BL sum5;调用sum5 ADD SP,SP,#4;sp = sp+4 LDMFD SP,{PC} 程序结果:实现了i+2i+3i+4i+5i的汇编语言调用c语言

2、用汇编语言实现1到100累加的函数,用C言语编写主程序,在主程序中调用所编写的汇编函数 程序代码:

NAME asmfile PUBLIC sum5 SECTION .intvec : CODE (2) CODE32 sum5 ENTRY MOV R1,#1 MOV R2,#0 sum6 ADD R2,R1,R2 ADD R1,R1,#1 CMP R1,R0 BLE sum6 MOV PC,LR END

#include extern void sum5(int x); int main(void){ const int n = 100; sum5(n); return(0); } 程序结果:

总结

本次实验主要是通过对ARM的各种指令进行操作,通过对这些指令的应用,让我们学会了如何使用汇编来进行编程,掌握汇编编程和C语言编程的技巧,并且能够熟练的使用汇编语言,深刻理解ARM的工作。并且培养了我们写代码的能力以及对代码的阅读能力和修改能力。为我们在以后的学习和生活中更实用ARM,利用汇编进行编程奠定了一定的基础!

第17篇:嵌入式心得体会

篇一:嵌入式心得体会

这学期才接触嵌入式系统感觉还称不上入门,我通过学习知道了嵌入式的发展前景很大,各个领域都用到了嵌入式,学好嵌入式不愁没饭吃。

广义上讲,凡是带有微处理器的专用软硬件系统都是嵌入式系统。如各类单片机和dsp系统。从狭义上讲,那些使用嵌入式微处理器构成独立系统,具有自己操作系统,具有特定功能,用于特定场合的专用软硬件系统称为嵌入式系统。嵌入式系统由嵌入式硬件与嵌入式软件组成; 嵌入式硬件以芯片、模板、组件、控制器形式埋藏于设备内部。

理解“嵌入”的概念 主要从三个方面上来理解。

1、从硬件上,将基于cpu的处围器件,整合到cpu芯片内部,比如早期基于x86体系结构下的计算机,cpu只是有运算器和累加器的功能,一切芯片要造外部桥路来扩展实现,象串口之类的都是靠外部的16c550/2的串口控制器芯片实现,而目前的这种串口控制器芯片早已集成到cpu内部,还有pc机有显卡,而多数嵌入式处理器都带有lcd控制器,但其种意义上就相当于显卡。比较高端的arm类intel xscale架构下的ixp网络处理器cpu内部集成pci控制器(可配成支持4个pci从设备或配成自身为cpi从设备);还集成3个npe网络处理器引擎,其中两个对应于两个mac地址,可用于网关交换用,而另外一个npe网络处理器引擎支持dsl,只要外面再加个phy芯片即可以实现dsl上网功能。ixp系列最高主频可以达到1.8g,支持2g内存,1g×10或10g×1的以太网口或febre channel的光通道。ixp系列应该是目标基于arm体系统结构下由intel进行整合后成xscale内核的最高的处理器了。

2、从软件上前,就是在定制操作系统内核里将应用一并选入,编译后将内核下载到rom中。而在定制操作系统内核时所选择的应用程序组件就是完成了软件的“嵌入”,比如wince在内核定制时,会有相应选择,其中就是wordpad,pdf,mediaplay等等选择,如果我们选择了,在ce启动后,就可以在界面中找到这些东西,如果是以前pc上将的windows操作系统,多半的东西都需要我们得新再装。

3、把软件内核或应用文件系统等东西烧到嵌入式系统硬件平台中的rom中就实现了一个真正的“嵌入”。

嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层

1、硬件层,是整个嵌入式系统的根本,如果现在单片机及接口这块很熟悉,并且能用c和汇编语言来编程的话,从嵌入式系统的硬件层走起来相对容易,硬件层也是驱动层的基础,一个优秀的驱动工程师是要能够看懂硬件的电路图和自行完成cpld的逻辑设计的,同时还要对操作系统内核及其调度性相当的熟悉的。但硬件平台是基础,增值还要靠软件。 硬件层比较适合于,电子、通信、自动化、机电一体、信息工程类专业的人来搞,需要掌握的专业基础知识有,单片机原理及接口技术、微机原理及接口技术、c语言。

2、驱动层,这部分比较难,驱动工程师不仅要能看懂电路图还要能对操作系统内核十分的精通,以便其所写的驱动程序在系统调用时,不会独占操作系统时间片,而导至其它任务不能动行,不懂操作系统内核架构和实时调度性,没有良好的驱动编写风格,按大多数书上所说添加的驱动的方式,很多人都能做到,但可能连个初级的驱动工程师的水平都达不到,这样所写的驱动在应用调用时就如同windows下我们打开一个程序运行后,再打开一个程序时,要不就是中断以前的程序,要不就是等上一会才能运行后来打开的程序。想做个好的驱动人员没有

三、四年功底,操作系统内核不研究上几编,不是太容易成功的,但其工资在嵌入式系统四层中可是最高的。

驱动层比较适合于电子、通信、自动化、机电一体、信息工程类专业尤其是计算机偏体系结构类专业的人来搞,除硬件层所具备的基础学科外,还要对数据结构与算法、操作系统原理、编译原理都要十分精通了解。

3、操作系统层,对于操作系统层目前可能只能说是简单的移植,而很少有人来自已写操

作系统,或者写出缺胳膊少腿的操作系统来,这部分工作大都由驱动工程师来完成。操作系统是负责系统任务的调试、磁盘和文件的管理,而嵌入式系统的实时性十分重要。据说,xp操作系统是微软投入300人用两年时间才搞定的,总时工时是600人年,中科院软件所自己的女娲hopen操作系统估计也得花遇几百人年才能搞定。因此这部分工作相对来讲没有太大意义。

4、应用层,相对来讲较为容易的,如果会在windows下如何进行编程接口函数调用,到操作系统下只是编译和开发环境有相应的变化而已。如果涉及java方面的编程也是如此的。嵌入式系统中涉及算法的由专业算法的人来处理的,不必归结到嵌入式系统范畴内。但如果涉及嵌入式系统下面嵌入式数据库、基于嵌入式系统的网络编程和基于某此应用层面的协议应用开发(比如基于sip、h.

323、astrisk)方面又较为复杂,并且有难度了。

通过网上查询我发现目前国内外这方面的人都很稀缺。一方面,是因为这一领域入门门槛较高,不仅要懂较底层软件(例如操作系统级、驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须懂得硬件的工作原理,所以非专业it人员很难切入这一领域;另一方面,是因为这一领域较新,目前发展太快,很多软硬件技术出现时间不长或正在出现(如arm处理器、嵌入式操作系统等),掌握这些新技术的人当然很少。嵌入式人才稀缺,身价自然就高,越有经验价格就越高。其实嵌入式人才稀少,根本原因可能是大多数人无条件接触,这需要相应的嵌入式开发板和软件,另外需要有经验的人进行指导开发流程。我们软件系的人学习嵌入式,显然应偏重于嵌入式软件,特别是嵌入式操作系统方面。对于搞嵌入式软件的人,最重要的技术显然是掌握主流嵌入式微处理器的结构与原理,必须掌握一个嵌入式操作系统,必须熟悉嵌入式软件开发流程并至少做过一个嵌入式软件项目。

然而我们都没有做过一个嵌入式软件项目,甚至连嵌入式的开发流程我也不清楚,我只了解了使用简单工具做一个简单的实验。只有去专研才能在嵌入式的领域站住脚,只有知道的比别人多才会更有竞争力。通过网上了解,我查询了嵌入式的入门和所需要的知识,其中c语言尤为重要,不管是做嵌入式软件还是硬件开发的人员,对c语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用c语言。其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的;知道了c语言和操作系统之后,再来看看嵌入式系统,我们主要学的是arm,用的是arm7, 深入理解arm不是件容易的事,只有在知道arm相关知识之后才能称得上嵌入式已经入门了。 与嵌入式有关的知识我也学了不少就是不能够综合在一起运用,组成原理,数据结构,操作系统,c++,这3门与嵌入式密切相关的学科都系统的学了一遍,但由于长时间没用到都有点忘记了,从网上得知嵌入式的学习与这些书有很大关系之后,我把嵌入式与以前学过的知识结合起来发现嵌入式的实验中很多都是共通的,我对嵌入式有了初步的理解。

我以为学习嵌入式应该分为2个部分:软件和硬件。关于硬件方面我接触到了数字电路教材和模拟电路方面的知识,但由于没有嵌入式cpu很难亲自动手来实现嵌入式的相关理论;嵌入式入门则需要不断地实验与分析,我只在实验课时做几个与所给的程序相关的小程序来实现一下;而软件方面则学过c语言,里面通常的语法曾今熟悉过;我通过下列方法来适应c语言在嵌入式中应用:首先重新翻看了下c的教材,看了些常见的语法,接着在编译器的角度来看待c,编译原理我刚学过,其中将高级语言与低级语言的翻译感觉在嵌入式中用到了很多;最后冲硬件的角度来看待c。嵌入式的核心包括嵌入式操作系统,嵌入式软件开发平台及工具以及嵌入式应用软件。这些决定怎样才能开发一个好的嵌入式系统。 下面谈谈我了解的嵌入式的相关知识与应用:

首先,嵌入式系统是以应用为中心,以计算机技术为基础,且软硬件可裁减,适应应

用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式有如下几个突出的有点1.系统内核小,2专用性强,3系统精简4高实时性os5嵌入式系统的应用程序可以没有操作系统直接在芯片上运行,6嵌入式系统需要开发工具和环境。

嵌入式系统是近几年才风靡起来的,但是这个概念并非新近才出现。从20世纪七十年代单片机(最早的单片机是intel公司的 8048,出现在1976年)的出现到今天各式各样的嵌入式微处理器,微控制器的大规模应用,嵌入式系统已经有了近30年的发展历史。经过30年的发展,嵌入式技术已经日趋成熟,在中国嵌入式机一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统以及用户的应用程序等四个部分组成,用于实现对其他设备的控制、监视或管理等功能。

其次,嵌入式系统无疑是当前最热门最有发展前途的it应用领域之一。嵌入式系统用在一些特定专用设备上,通常这些设备的硬件资源(如处理器、存储器等)非常有限,并且对成本很敏感,有时对实时响应要求很高等。特别是随着消费家电的智能化,嵌入式更显重要。 嵌入式系统是软硬结合的学科,通常有两类人会去专研嵌入式:一类是学电子工程、通信工程等偏硬件专业的,另一类是学软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。我是软件专业的学习嵌入式,越是智能设备越是复杂系统,软件越起关键作用,而且这是目前的趋势。嵌入式应用在很多方面,具体的可以分为工业控制,交通管理,信息家电,家庭智能管理系统,pos网络及电子商务,环境工程与自然,机器人,机电产品方面应用等方面。其中目前在服务领域,如远程点菜器等已经体现了嵌入式系统的优势。例外还有很多地方用到了嵌入式系统,最近飞利浦和arm共同推出32位risc嵌入式控制器,适用于工业控制,采用最先进的0.18微米cmos嵌入式闪存处理技术,操作电压可以低至1.2伏,它还能降低25%到30%的制造成本,在工业领域中对最终用户而言是一套极具成本效益的解决方案。

那么该如何学好嵌入式我觉得应该从以下几点入手:

首先c语言,这个是毋庸置疑的,不管是做嵌入式软件还是硬件开发的人员,对c语言的掌握这个是必需的,特别是对于以后致力于嵌入式软件开发的人,现在绝大部分都是用c语言,你说不掌握它可以吗?至于如何学习c语言,我想这些基础的知识每个人都有自己的方法,关键要去学习,看书也好,网上找些视频看也好。很多人会问,c语言要学到怎么样,我觉得这没有标准的答案。我想至少你在明白了一些基础的概念后,就该写代码了,动手才是最重要的,当你动手了,遇到问题了,再反过来学习,反过来查查课本,那时的收获就不是你死看书能得到的。

其次,应该对操作系统有所了解,这对你对硬件和软件的理解,绝对有很大的帮助。应该把系统的管理理解一下,比如进程、线程,系统如何来分配资源的,系统如何来管理硬件的,当然,不是看书就能把这些理解透,如果不是一时能理解,没关系,多看看,结合以后的项目经验,会有更好的理解的。

还有应该学习下linux或者wince下的编程,这些对以后做应用的编程很有帮助,当然,如果做手机的话,那可以学习mtk、塞班、android等操作系统,android是以后发展的趋势,现在很热门,android也是基于linux系统封装的,所以建议先学习下linux。

还有,应该学习下单片机或者arm或者mips,很多人说我没有单片机的经验,直接学arm可以吗?我觉得那完全没有问题的,当然如果你学习过单片机,那最好不过了,以后学习arm就更简单了。

最后如果你把以上的知识都有所了解后,就该去阅读阅读一些优秀的代码,比如结合arm芯片手册学习去学习下uboot的源代码,了解下最小的系统开发,那对你整个嵌入式开发的非常有帮助的,可以的话,还可以学习下linux的源代码,当然如果你直接阅读2.6的代码,我想你会很痛苦的,可以先看看linux 代码早期的版本,比如0.12 的代码等等,麻雀虽

小,五脏俱全,如果你全看完了,那我想你就是一名很成功的嵌入式工程师。

以上就是我在本学期学习嵌入式后的心得及感想。 篇二:学习嵌入式的心得

嵌入式学习[转贴] 怎样做才能快速的嵌入式了? 其实,做工程是没有捷径可走的

先说做硬件: 把你的数字电路教材和模拟电路的教材读熟,暂时先把重点放在数字电路上面,接着把微机原理和接口技术读熟悉了,最好能用汇编写几个简单的程序上机调试一下,这是很重要的。

完成上面的工作大概需要半年,不管你有多么的聪明,除非你以前这个基础就打的不错,否则,还是老老实实花上至少半年的时间!还是那句话,没有捷径可走,如果你相信那些什么“21天学通xx”什么的,那么我告诉你,放弃做工程吧!再说,你这么容易就学会了,别人也能的,你确定能拿到高薪吗?

下一步,就是选择一个dsp(或其它的嵌入式cpu)平台作为你的目标平台,先熟悉它的架构和与外围电路的接口,然后学习她的指令集,也要写一些小程序去跑一下。这个时候,你应该去买一个开发板了,一般的厂家附带会给你一些demo程序,看懂它,理解它,修改它,在你的板子上跑一跑。 完成上面两步,说明你已经入了这个行业的门了,下一步,想成为高手的话,就是自己去设计一些项目了,这个阶段所花的时间每个人都是不同的,要看你的造化(主要是前面的基础是否牢固)了。

再说说软件:

在嵌入式行业,你想做软件开发的话,没别的,那就深入理解c语言,尤其是c的指针,如果你以前学过c,但是没有意识到c相比其它的高级语言的优点的话(不是听别人说的,你自己的体会),你可以按下面步骤来理解c:

1、重新翻一遍c的教材,记住一些常用的c语法,但不要死抠语法;

2、从编译器的角度来理解c;

从编译原理的角度来理解你工作中使用的高级语言,如果你做到这一点,至少有两个好处: 第一个好处是避免一大堆低水平重复出现的编译错误。一名优秀的coder平均在一个工作日中应该完成200行以上的源码,其编译错误应该控制在5个以下,要知道这200行源码不是一次完成的,所以大多数情况下你都要追求一次编译通过;

第二个好处是可以提高源码的可读性和效率。规范地编写你的代码使你自己的逻辑清晰,因为你明白多加几个括号和空行、多换行对齐、多注释,编译器是会自动识别的,不影响程序执行的效率,反过来,控制好递归调用和循环内的if语句才是提高程序效率的关键,要全力避免递归,但要深刻理解递归,能通过自己建立堆栈来把递归程序转换成非递归程序,要求还是较高的哦!

3、从硬件的角度来理解c。

完成上面3步,你就是c的高手了,接下来应该去看看软件工程方面的书了,这个我还不太懂,不敢妄言。

另外说说教材的选择:学一门东西,选好你的教材,只要一本就可以了。坚决防止这种情况的出现:去图书馆借很多本书,像抢劫似的,而只是每一本都翻翻,就又还给图书馆了的!注意上面我把汇编语言放在硬件学习的板块里面,是由于汇编跟硬件的关系太紧密了,以至于是先学汇编还是先学习硬件电路和cpu架构成了要分清到底是“先有鸡还是先有蛋”的千年哲学难题了。

嵌入式操作系统一览

其实,嵌入式系统并不是一个新生的事物,从八十年代起,国际上就有一些it组织、公司,开始进行商用嵌入式系统和专用操作系统的研发。这其中涌现了一些著名的嵌入式系统: windows ce microsoft windows ce是从整体上为有限资源的平台设计的多线程、完整优先权、多任务的操作系统。它的模块化设计允许它对于从掌上电脑到专用的工业控制器的用户电子设备进行定制。操作系统的基本内核需要至少200k的rom。

vxworks vxworks是目前嵌入式系统领域中使用最广泛、市场占有率最高的系统。它支持多种处理器,如x8

6、i960、sun sparc、motorola mc68xxx、mips rx000、power pc等等。大多数的vxworks api是专有的。采用gnu的编译和调试器。

psos isi公司已经被winriver公司兼并,现在psos属于windriver公司的产品。这个系统是一个模块化、高性能的实时操作系统,专为嵌入式微处理器设计,提供一个完全多任务环境,在定制的或是商业化的硬件上提供高性能和高可靠性。可以让开发者根据操作系统的功能和内存需求定制成每一个应用所需的系统。开发者可以利用它来实现从简单的单个独立设备到复杂的、网络化的多处理器系统。

qnx qnx是一个实时的、可扩充的操作系统,它部分遵循posix相关标准,如:posix.1b实时扩展。它提供了一个很小的微内核以及一些可选的配合进程。其内核仅提供4种服务:进程调度、进程间通信、底层网络通信和中断处理,其进程在独立的地址空间运行。所有其它os服务,都实现为协作的用户进程,因此qnx内核非常小巧(qnx4.x大约为12kb)而且运行速度极快。这个灵活的结构可以使用户根据实际的需求,将系统配置成微小的嵌入式操作系统或是包括几百个处理器的超级虚拟机操作系统。

palm os os-9 microwave的os-9是为微处理器的关键实时任务而设计的操作系统,广泛应用于高科技产品中,包括消费电子产品、工业自动化、无线通讯产品、医疗仪器、数字电视/多媒体设备。它提供了很好的安全性和容错性。与其他的嵌入式系统相比,它的灵活性和可升级性非常突出。 lynxos lynx real-time systems的lynxos是一个分布式、嵌入式、可规模扩展的实时操作系统,它遵循posix.1a、posix.1b和posix.1c标准。lynxos支持线程概念,提供256个全局用户线程优先级;提供一些传统的、非实时系统的服务特征;包括基于调用需求的虚拟内存,一个基于motif的用户图形界面,与工业标准兼容的网络系统以及应用开发工具。

目前,世面上有很多商业性嵌入式系统都在努力地为自己争取着嵌入式市场的份额。但是,这些专用操作系统均属于商业化产品,价格昂贵;而且,由于它们各自的源代码不公开,使得每个系统上的应用软件与其它系统都无法兼容。并且,由于这种封闭性还导致了商业嵌入式系统在对各种设备的支持

方面存在很大的问题,使得对它们的软件移植变得很困难。在嵌入式这个it产业的新的关键领域,linux操作系统适时地出现在了国家和国内各嵌入式厂商面前,由于linux自身诸多优势,吸引了许多开发商的目光,成为嵌入式操作系统的新宠。它的出现无疑为国家发展嵌入式操作系统事业提供了一个极有吸引力的机会。

前言

这个题目很大,给人一种感觉我好像很成功,其实不然。实际上自己水平不高,甚至很低,但是做过了一些曲折的学习道路,同时把自己真实的学习历程表达出来,希望对后来者有借鉴的意义,甚幸! 工作三年、几成废人!

我2000年毕业于华中地区的一个理工科大学,专业是机械电子,我当时已经签了一家内陆某个省级机关工作,家里八辈是农民,并且很偏远,能够进入这样的地方是祖坟有风水。但在毕业前夕有个进入it的机会,我本想进去的,家里人极力反对,阻力可想而知。同时要交4000元的违约金,对我来说是天文数字。大学里的费用很多是借的,几乎将近一半的费用是在大学勤工俭学挣的,为了省钱,高中一个学期回家一次,大学一年回去一次。并且我个人也有特殊的人生背景(悲景更确切),这里不多说了,写十篇也写不完,同时偏离主题。这样我就参加了工作。一张报纸一杯茶的日子,几乎下班后有种很空虚和恐慌的感觉。在工作中虽然是与自己专业有点关系,但是很少。专业几乎荒废。我自己也思考,如果再不出去,自己将会成废人,只好让国家养了。两年后决定出去,但是几成废人,谁要呢,只好到学校去镀金。这是中国教育和社会的悲哀!

至于专业就改为计算机方面,听说好找工作,我说实话不是很对计算机特别感兴趣,生存第一需要。不要笑我,哈哈!

考研成绩出来,超过了国家线几十分。那个方向要两个,我第三,但是那年非碘,不面试就按分数来排,自然我落选了。其实给我面试机会也不一定要我,哈哈,自己几斤几两很清楚。

最后调剂到另外一个学校,交钱,咬咬牙,交吧!现在仍然债台高筑!

进入学校前夕

为什么要把这段列出,看后就知道了。

单位有网络,经常上网查些英语资料,在那里唯独英语没有丢很多。于是我就在网上查资料,学什么好呢,最后确定学嵌入式把,听说跟硬件相对比较紧密!而我在大学里多少学习了数字电路,单片机等,所以多少也有所利用,不会真的一无所知。当然在这之前也自学过数据结构,计算机组成原理等。

c 语言在大学就学了。哈哈这就是我的家底。

我知道自己的基础差,于是我就拿操作系统,数据库、数据结构、c++来看,机关有这个好处,空余时间多,于是平常就看书,很痛苦,没有人请教。

另外就上网到论坛上去,我就到各个专业的技术论坛,其实是电子论坛和嵌入式论坛。我几乎没有发帖,几乎把几个大型的出名的论坛的帖子翻遍了,虽然有很多重复的,我才知道嵌入式是个什么东东。这些帖子对我以后的学习产生了极大的影响。

最关键两点:

1、嵌入式是什么?

2、嵌入式需要哪些知识?

知道了这两点,好办!我就开始规划学习路线。计算机的基本理论不能丢,于是重点看组成原理,数据机构,操作系统、c++。同时论坛上了解到,实时操作系统ucos是一个很好的嵌入式操作系统,对初学者很好。于是我就买了一本书,但是代码在电脑里调不通,网上也有很多相同的问题,我就看书,分析代码,一遍不行就两遍,三遍,这样才看了入了门,才知道什么是进程。原来看操作系统书时,根本就不知道进程是个什么东西。

在这段时间掌握的东西不多,但是,对我以后的影响很大,我想起了大学时一个同学跟我说过了一句话:大学里最重要的不是学到了什么,最重要的是学会怎么学!大概是这个意思。

进入我的避难所

对我来讲,再次进入大学不再是大学,而是避难所。希望这次进入给我喘气和养精蓄锐的机会和时间。我是这样认为和实践的。

在学校我有三件事:上课,上图书馆,上网。

对于上课,学校开了很多课程,非常好,很多是名人名师讲解,于是很多同学都想学,都去听。我也考虑过,最后放弃。我是这样认为的,时间是有限的,什么都想学,什么都学不成。于是我把我自己学的课进行了分化,一般的课程通过就行,重要的一定好好学。我希望不要什么争论学习课程多和少的问题,这仅仅是我的看法。所以我的成绩应该是很差的。分数低。好在后来的单位没有要我的成绩单,否则就惨了。

我个人感觉是上图书馆的效率比在寝室里高多了,这是我的经验。

有人会问,您下了那么多资料,怎么看的完和消化的了呢?

我是这样对待这个问题的:

1、网上资料比较零散,不系统,但是如果把差不多的东西收集起来看就相对完整了,(嵌入式的图书就是这两年特别多,特别是2004年,简直是向外涌!2003年想买本嵌入式,特别是嵌入式linux的不多。

2、对于像我这种入门的来说,很多看不懂,没关系,反复看,我个人对学习方法的一个总结是:重复是最好的老师!

3、即使有的用不上,也可以收集以后用的上时查阅。

但是我并非什么都要,目前我的技术路线是嵌入式linux,所以像wince之类基本上不

收集。

总之,我在学校里我充分利用时间来学习,我看到一些同学整天的挂在网上打游戏,发

些无关痛痒的帖子,浪费时间呀!我真的很痛心!

学习嵌入式

在这里我把它单独列出,文章有点紊乱,但是内容希望有益。

1、学习linux 根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,从实验室到课程安排都是关于嵌入式linux方面,天时地利!这里我把学习linux的经验和教训说说。

可以这样说,在论坛里说道学习linux差不多就学习linux内核。于是我电脑里安装了linux就开始看linux内核方面的书了。我记得来学校以前就买到一本陈莉君的讲linux内核的第一版,现在有第二版了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。

看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第

一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:

1、自己的基础差,这是最关键的。

2、内核本身很难。

3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。

学习linux总结,这里声明一下,我指的嵌入式主要是偏向软件的嵌入式。学习嵌入式的重点和难点关键在操作系统,如果没有掌握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。声明:一孔之见!不可深究!

在学习linux内核过程中犯了一个极其严重路线错误:对linux几乎不懂就开始学习内核。我个人推荐一个学习路线是:使用linux—〉linxu系统编程开发---〉驱动开发和分析linux内核。而我差不多相反,实际上你不会使用linux也可以学习内核,但是如果你懂了这些东西学习更有效率。

关于要不要学习内核的问题,我的回答如下:不一定。如果你是喜欢钻研的那你进入内核会满足你的欲望。同时对你以后的嵌入式系统的开发有很好的影响。如果你想从事嵌入式linux系统开发,最好对内核有所了解。如果仅仅是做应用开发没有必要。我打个比喻:c、c++、java等语言是武林中的某个武林派别的话,如什么拳法,什么刀法等,那么linux 内核应该是一个人的内功的反应。 怎么开始学linux内核:最好有三件宝物:《深入理解linux内核》《情景分析》和源代码。

先看《深》,那主要讲原理,好像市场上有本讲原理性并且更浅,《linux内核设计与实现》听说不错。如果没有学习操作系统的,像我这样的,最好先看看操作系统原理的书。看了几遍后,就看情景分析,最好对着《深》看。两本交叉看,《深》是纲,《情》是目。最后深入代码。

2、学习嵌入式linux 学习嵌入式,我认为两个重点,cpu和操作系统,目前市场是比较流行arm,所以推荐大家学习arm。操作系统很多,我个人对开始学习的人,特别不是计算机专业的,推荐学习ucos。那是开源的,同时很小。学习很好。为什么选linux,我不想讲太多,网上这方面的太多,但是我在工作中发现,做linux的技术路线很难,在windows几乎不会有的问题,在linux开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!相对来说开发周期长,难度大。现在资料也逐渐丰富起来,难度也降低了些!

至于怎么学习,这是他的特色地方,必须有块开发板,我是同学里最早买学习板的,虽然化钱,我认为值。对我实习和工作产生了很大的影响。

如果没有开发板,那是纸上谈兵。有人说,那要1000-2000亚,的确是,兄弟,看长远的,对您的职业和发展那点钱不算什么!有的人说我站着说话不腰痛,好吧,钱这东西对我影响很大,我在大学里扫厕所,扫的不错,奖5元/月。兄弟你有过吗?我认为教育投资是效益最有保障的!我实习拿3k,很多同学拿1-2k,当然比我高的也有。虽然我现在没有毕业,但一家公司就签了。从事目前流行的高档的消费电子的研发。对于我两年前一无所知的我,应该有质的变化,我感谢学校收了我这个废品。当然我也非常的努力。说这么多并不是要炫耀我什么,实际上根本不值得炫耀,虽然现在工作环境和待遇比较满意,但是,我发现我很差,特别是代码能力,我希望平常大家少玩游戏,多编程。编程才是硬道理!

3、学习板和培训

你可以不接受培训,但是不能不买开发板。如果你想学习嵌入式一定要买块学习板,最好买块arm9的,贵些也值。可以跑高级操作系统。这个不要什么品牌公司的,一般不会出什么问题,市场上的板子一般是三星的2410,基本上是抄的。如果是做产品那要注意些。一般的公司一般要2000,加lcd要3000甚至更多。我接触到有的板只要1200,加lcd也就2000,差别比较大,我认为学习都够啦。

对于培训,如果有条件最好参加,主要是嵌入式相对别的不同,自己摸索很费时,如果有高手指点非常的好,进步快。特别是认识做这些的朋友。我接受过培训,认识个朋友。在以后的工作中帮我很多,在这里谢谢他!我记得哈佛的一个mba的学生这样说,大意是:在哈佛学到什么不重要,最重要的是这些未来各大公司的高级管理人员是我的同学!真是有远见!

目前市场是培训比较贵,一个星期两三千,真正算起来也要,那些讲师待遇绝对不会低。但是有个致命的问题是连续上课,一连几天,效果不佳。我希望社会上多出些1000元左右,并且时间长些,如一个月,一周一到两次课。如果没人做,我来做,哈哈!

没有想到,一下写了这么多,其实还想写的,比如在中科院的一位老兄是怎样学习linux内核和看书的,真的很感动。他的为人我很钦佩。也想介绍毛德操的《嵌入式系统》那本书,对学习arm linux 篇三:学习嵌入式心得体会microsoft word 文档

10计本班 黄田丽 05111001021 学习嵌入式心得体会

首先,我们学习的课本是嵌入式系统应用教程。我学习的体会是这样的: 开始时,由于是刚刚入门,对老师书的好多东西是好奇的,好多名词也是新鲜的,不过不太懂什么意思。但是慢慢的,了解的深入让我有了更深的感触和体会。

在嵌入式的学习过程中,让我了解了什么是嵌入式系统。它就是以应用为中心,以计算机技术为基础,软硬件可定制,适用于不同应用场合,对功能、可靠性、成本、体积、功耗有严格要求的计算机系统。他一般由嵌入式微处理器、外围硬件设备、嵌入式操作系统、用户应用程序四个部分组成,用于实现对其他设备的控制、监视或管理功能。嵌入式系统已经应用于科学研究、工业控制、军事技术、交通通信、医疗卫生、消费娱乐等领域,人们日常使用的手机、pda、汽车、智能家电、gps等均是嵌入式系统的典型代表。

一开始我们就学习嵌入式的系统的基础部分,那很简单,就是一些定义或是介绍之类的。在进入第二章时,就开始学习了嵌入式开发过程中的主要操作系统——linux,在接下来的课程中,我发现嵌入式的学习过程还是蛮有趣的。在对linux的学习中,我们对它有了一点点的了解,接着就是学习一虚拟机的方式安装linux。对我来说有趣的就是安装的过程了,首先我们跟着老师的脚步走,学会了怎么安装,在自己动手进行对它的安装,这个过程是简单而有趣的。这样的开始让我对它充满了兴趣,也对以后的学习充满了信心。

其次就是安装好了之后,老师就更深一步的教我们应用了。在这是老师首先交给我们的是一些简单的命令应用,linux具有很丰富的命令,绝大多数命令具

有大量的参数。在学习命令的过程中,只要你认真的看着老师操作还有认真听着他讲,你就会发现有些命令的操作还是很简单的,不过在操作的过程中,我也有遇到有些困难,会出现你按照书上学习的例子,将命令输入终端时会出现你不想要的结果,也就是错误的结果。这是问问旁边的同学或是懂的同学就可以解决了。在对于这部分的学习中,让我知道了命令对于嵌入式的重要性。它是linux的重要内容,linux中所有的功能都是通过命令执行。在实际应用中,为了减少系统开销,经常不使用图形界面,此时,对系统的所有操作都需要以命令方式来执行。在嵌入式系统开发过程中,由于目标机的性能和配置比较低,因此,一般情况下目标机仅具有命令窗口而没有图形界面,对目标机的所有操作都通过命令来实现。

还有的那就是进一步学习与嵌入式系统开发相关的linux的服务,他们的启动、设置等的操作和应用。而在学习之中,我们主要介绍的是嵌入式系统中开发工程使用的tftp、telent和nfs服务。第一个实现的事上机位与下机位之间文件的传输、无磁盘网络的设备的启动等功能;第二个实现的事远程登录功能;第三个实现的是网络文件系统功能。

从以上的内容之中,并不难感受到我们的学习过程是由浅入深的,这对于我们的学习也有了较好的帮助。

当然,我们学习的不仅仅是这么几个内容,其中还有相关的实验内容。在我们基础的学习的过程之中,我有了这么一点的感受,总的来说就是概念加专业名词还有介绍加实验。不过你绝对不能小看那些概念和介绍,它对我们有着很重要的指导作用哦!实验那就更不用说了,它提高我们的动手能力,在实验的过程中还能让你更加理解书中的理念,这就是我学习嵌入式的感受。 篇四:嵌入式课程设计心得体会

嵌入式课程设计心得体会

本学期为期一周的嵌入式课程设计在不知不觉中结束了,虽说这次课程设计时间不是很长,但是感觉自己收获颇丰,不仅学习到了一些新知识,回顾了以前的一些快要遗忘的知识点,而且使自己的学习目标更加明确,学习方法更加完善,也体会到软件开发的趣味,更加清楚地认识到了自己在软件开发及学习上的一些不足之处。下面就来详细写一下我关于此次课程设计的心得体会:

一周的课程设计,一周的实训,在计算机这个博大深奥的领域我感觉自己还有好多东西要学,还有好多的东西不懂(这也再次坚定了我考研深造的决心)!嵌入式软件开发应用广泛而且前景很好,目前正处于人才紧缺的关口,嵌入式技术在未来能够得到更加广泛的应用。学好嵌入式,c语言很重要,所以感觉自己有必要在学习、积累一下这方面的知识。很多东西的学习不死一帆风顺也是比较

耗时的,嵌入式也不例外,要想学好还必须下大力气,还必须坚持。这次的课程设计让我明确了一点:嵌入式开发对于提升我们的系统知识有很大的帮助,尤其是操作系统的知识。嵌入式系统开发对于我们的知识面要求非常的广,且要有一定的深度。这次的课程设计因为是一个有针对性的训练,所以记的会非常牢固。跟平时上课不太一样,平时上完理论课很少有时间上机进行时间或者隔几天才上机练习,等到上机时一些东西可能遗忘了,比较耗费时间。在课上,有老师在前面演示我们感觉看得懂或感觉没问题,可轮到我们独立完成的时候,因为实际操作的少,跟中问题就来了!我很感谢学校特别是学院老师有实训这样的安排,把我们这一学期学的东西系统的集中的进行训练,让我们深刻明确的体验了一下软件开发的流程!还要感谢给我们实训的楚老师,感觉楚老师能力很强,也很有耐心,即使老师讲了很多遍的问题,我们不会,老师还是会走进我们给我们耐心的指导,还给我们讲一些学习计算机的方法,一些软件开发需要注意的细节,让我们知道自己在哪方面不足,需要加强,也让我们了解到哪些需要认真的学习,那些是重点,不是没有方向的乱学一通,什么也学不好!经过这次的实训,我真真确确的感受到了计算机在我们生活中工作中的运用,这些软件、程序能让我们提高工作的效率,更直观更便捷的切入主题。当然,在学习的过程中并不是一帆风顺的,在这之中,因为要操作的东西很多,有时错一步,后面的结果就无法显示,而自己的计算机水平还有待提高,根本检查不出来是哪里出了错!这时候,老师都会耐心的过来帮助我!在平时我们就需要好好的查阅书籍或者上网搜集相关资料去解决问题。

此次实训最大的收获不是我学习到了多少知识而是这几天实训给我的感悟:首先是心态。一定要有一个积极的心态,独立解决问题的意识,培养扎实基础的认识。不要什么东西都感觉跟简单(很多东西可能是看似简单)就不去做了或者不屑一做,以至于性网上搜搜就可以了,这样很不好。有自己的东西有自己的付出才会有程序运行成功时的喜悦和小自豪,这样也有助于培养自己的兴趣。要时刻牢记态度决定一切。其次是兴趣,感觉学习工作中兴趣很关键,只是一个引发人积极性的问题,有了兴趣就自觉了,效率自然就高了。再次要敢于尝试和挑战。不要安于现成的程序,而且不要害怕失败,在程序调试的过程中这点尤为重要,“发现出问题然后解决问题”是一个积累经验的过程,而且很高效。最后要不懈追求。对于源代码进行不断的完善,要尽可能的实现课题所要求的功能。对于初学者或者开发较少的人来说,大量大写程序还是有必要的,但同时要注意思考,理解其实现的内在意义。还可以自己添加一些有意义的功能来实现。当看到自己编写的程序正常运行时,兴趣也会随之而来,乐此不疲,形成一个良性循环。

短短一周的课程设计很快结束了,我发现我对计算机这个专业、对嵌入式技术、对linux都有了新的认识。通过这次的实训,我了解到,要真真正正的掌握计算机程序还不是一件简单容易的事儿,但真正掌握后,它带给我们的将是无穷的便捷与科技,我喜欢高端便捷的生活。我希望我能做计算机这个万能机器人的主人而不是奴隶,我会努力加油的!感谢学校,感谢老师给我的帮助,让我的思想、技能又上了一个台阶!感谢!加油! 篇五:暑期嵌入式培训实践心得体会

暑期嵌入式培训实践心得体会

大二下学期,大学里的同学都面临着一次选择,考研或者就业,培训机构纷纷到学校来招生,很多人都犹豫了,也包括我。因为要花一部分费用,而且自己还没毕业,考虑到父母的经济能力,在反复和家里商量后,因为就业形势严峻,而自己又不想考研,我意识到了这是自己走向社会一个关键的转折点,也可能是人生的转折点,所以我选择参加了培训。

刚出来的时候对这些行业我们也不是很了解,以前甚至都不知道嵌入式是什么,通过老师的介绍和自己在网上看到的一些资料,发现嵌入式软件开发的前景很好,目前嵌入式软件工程师也是紧缺人才,通信工程从事这方面也有专业优势,自己大学里学习的知识都可以在以后的工作中得到应用,于是我们选择了来港湾做嵌入式软件工程师的培训。这里有非常浓厚的学习氛围。这里能够感受到社会上工作的压力,来这里学习的同学不全是大学刚毕业或者是还没有毕业的大学生,有的是在工作几年之后又回来学习的,可能他们也感觉社会在快速发展,自己也应该多学点有用的知识,以便更好地立足社会。从他们身上我能感觉到压力,能感觉到自己的不足,让我感觉自己学习不再只是为了一场考试,而是今后工作和生活的实力与能力。

嵌入式技术的掌握是需要一个过程的。实事求是的说,嵌入式技术的全面掌握是有相当难度的。可以轻轻松松学会嵌入式技术的说法是夸大其词了。这个就像学英语一样,学英语无论怎样学,不管是“疯狂学”还是用新理念来学,真正掌握的话还是需要一步步积累才能熟练掌握。要想在几天内学会嵌入式,成为这方面的高手。这些想法本身是不太现实的。

现在我需要主意的是:

第一:把心踏实下来,做好打硬仗的准备。 第二:注意学习方法。尽量不要走弯路,争取一鼓作气入门。一旦入门了以后呢就好办了。嵌入式技术的掌握,本身呢就比较难,要是再走些弯路,时间上会浪费,甚至会影响学习的信心。 第三:不能影响我平时的课程。不能拿了芝麻,丢了西瓜。

根据我在论坛的了解,我选择学习嵌入式linux,刚好我们学校也重视嵌入式linux,有一些专业课也是相关的。

暑假的时间十分宝贵。当培训没有开始时,我电脑就里安装了linux就开始看linux内核方面的书了。我就开始看那本说,大家说linux内核情景分析不错,我就买了上下册,后来又买了 《深入理解linux内核》,最后也买了毛德操的《嵌入式系统》也是分析linux内核代码的,主要讲arm相关的。

看内核期间是个非常痛苦的过程,看情景分析有种在森林中找出路,其间我组织了一些同学学习内核,几乎没有几个能坚持下来的。我认为我是坚持下来了。情景分析在看第

一、第二遍是几乎没有摸到门道,我分析有三个方面的原因:

1、自己的基础差,这是最要害的。

2、内核本身很难。

3、没有交流和高人指点。到了第三遍时我才摸到门,才差不多知道个linux的大概脉络,很多细节也是稀里糊涂。

学习linux总结,学习嵌入式的重点和难点要害在操作系统,假如没有把握操作系统,我认为很难把握一个嵌入式系统。即使在做嵌入式开发中,作应有层的开发几乎可以不知道操作系统也可以开发,我认为那是浮在表面的。很难深入和提高自己的层次。学习嵌入式,两个重点,cpu和操作系统,目前比较流行arm,所以学习arm.操作系统很多,但是我在实践中发现,做linux的技术路线很难,在windows几乎不会有的问题,在linux开发中几乎遍地陷阱。一掉进去划很长时间出来,一旦解决自己又长进了!

在刚开始接触的时候,我也是抱着本书,自己摸索,可是越看越迷茫,连很多书里的名词都不知道是什么意思 ,去网上查也没有得到答案。可是在培训的时候我得到了很好的指点,在这里,由于老师都是十分有经验的项目经理,他们懂得如何去学习,从哪里开始入手,这对于我这样的背景知识比较薄弱又接触时间比较短的人来说实在是太有帮助了。

学习嵌入式,c 很重要,以前在学校的时候,c学得并不扎实,一开始老师带着我们把c 从头过了一遍,才感觉到自己确实基础不行,于是又认真的把c 过了一遍,在暑假的这些日子里,学习一直很紧张,进度很快,不过老师们很负责,我们遇到的问题都会认真得给解决,学习过程中我接触到了很多新鲜的知识和技术,确实开了不少眼界,了解了嵌入式开发的基本流程,学习过程中,可能是第一次接触到这些以前根本没见过的知识,一开始学很吃力,好多东西都听不懂,更别说把它们联系起来,所以一开始一直很苦恼。

嵌入式学习,是比较耗时的,前期需要很多知识做铺垫,有很多人在这个过程中走了不少弯路,于是开始失去耐心、失去信心,以至最终放弃学习。所以我想有必要强调一下问题,在刚开始的时候,自己什么都不懂,可是学习的愿望很强烈,每次上课都希望上完课就能如何如何,可是下来发现自己好像离自己原本的目标还很远,于是心里着急,自己跑到网上搜了很多资料,每天乱看,可是并没有很大的帮助。我想说的是,学习嵌入式一定要有耐心和毅力,不能急躁,按照课程的安排自己多做一些总结和练习,等到知识慢慢的积累下来就会有一种豁然开朗的感觉。

虽然课程还没有完,可是在这段时间的学习中,我按照老师的指导在完善的课程体系下进行系统的学习,已经掌握了u-boot、kernel以及linux移植的基本框架,(我想在今后的学习中一定会对这些知识更加熟悉以至精通!)这对于2个月前什么都不懂的我来说已经是很大的提高了!用得是arm9的板子,这也是市场上现在比较新的,比较流行的板子,很多公司在实际的产品开发中就用的是arm9。在课堂上,老师的讲解和我们的练习相结合,理论联系实际。老师除了讲解知识外,还结合了大量的实际案例和操作,这对于我对问题的理解和知识的记忆有很大帮助。开学后我还需要继续参加培训学习。一个暑假有意义的培训实践,我相信在我以后的求职,工作中,这个暑假给与我的,不仅仅只是个好工作,还有各种学习热情,方法。

第18篇:嵌入式实验报告

目录

实验一 跑马灯实验 .........................................................................1 实验二 按键输入实验 .....................................................................3 实验三 串口实验 .............................................................................5 实验四 外部中断实验 .....................................................................8 实验五 独立看门狗实验 ................................................................11 实验七 定时器中断实验 ................................................................13 实验十三 ADC实验 ........................................................................15 实验十五 DMA实验 ........................................................................17 实验十六 I2C实验 ........................................................................21 实验十七 SPI实验 ........................................................................24 实验二十一 红外遥控实验 ............................................................27 实验二十二 DS18B20实验 .............................................................30

实验一 跑马灯实验

一.实验简介

我的第一个实验,跑马灯实验。

二.实验目的

掌握STM32开发环境,掌握从无到有的构建工程。

三.实验内容

熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。通过ISP下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤

1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件

4.建立工程目录,复制库文件 5.建立和配置工程 6.编写代码 7.编译代码

8.使用ISP下载到实验板 9.测试运行结果

10.使用JLINK下载到实验板 11.单步调试

12.记录实验过程,撰写实验报告

1

六.实验结果及测试

源代码:

两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。

七.实验总结

通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。作为 STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。

2

实验二 按键输入实验

一.实验简介

在实验一的基础上,使用按键控制流水灯速度,及使用按键控制流水灯流水方向。

二.实验目的

熟练使用库函数操作GPIO,掌握中断配置和中断服务程序编写方法,掌握通过全局变量在中断服务程序和主程序间通信的方法。

三.实验内容

实现初始化GPIO,并配置中断,在中断服务程序中通过修改全局变量,达到控制流水灯速度及方向。

使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤

1在实验1代码的基础上,编写中断初始化代码

2在主程序中声明全局变量,用于和中断服务程序通信,编写完成主程序 3编写中断服务程序

4编译代码,使用JLINK下载到实验板 5.单步调试

6记录实验过程,撰写实验报告

六.实验结果及测试

3

源代码:

我们将通过MiniSTM32 板上载有的3个按钮,来控制板上的2个LED,其中KEY0控制LED0,按一次亮,再按一次,就灭。KEY1 控制LED1,效果同KEY0。KEY_2(KEY_UP),同时控制LED0 和LED1,按一次,他们的状态就翻转一次。

七.实验总结

通过本次实验,我学会了如何使用STM32 的IO 口作为输入用。TM32 的IO 口做输入使用的时候,是通过读取IDR 的内容来读取IO 口的状态的。这里需要注意的是 KEY0 和KEY1 是低电平有效的,而WK_UP 是高电平有效的,而且要确认WK_UP 按钮与DS18B20 的连接是否已经断开,要先断开,否则DS18B20 会干扰WK_UP按键!并且KEY0 和KEY1 连接在与JTAG 相关的IO 口上,所以在软件编写的时候要先禁用JTAG 功能,才能把这两个IO 口当成普通IO 口使用。

4

实验三 串口实验

一.实验简介

编写代码实现串口发送和接收,将通过串口发送来的数据回送回去。

二.实验目的

掌握STM32基本串口编程,进一步学习中断处理。

三.实验内容

编写主程序,初始化串口1,设置波特率为9600,无校验,数据位8位,停止位1位。 编写中断服务程序代码实现将发送过来的数据回送。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1编写串口初始化代码

2编写中断服务程序代码

3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告

六.实验结果及测试

5

源代码:

把代码下载到 MiniSTM32 开发板,可以看到板子上的LED0 开始闪烁,说明程序已经在跑了。接着我们打开串口调试助手,看到如下信息:

证明串口数据发送没问题。接着,我们在发送区输入上面的文字,输入完后按回车键。然后单击发送,可以得到如下结果:

6

七.实验总结

通过本次实验,我进一步了解了串口的使用,学会了通过串口发送和接收数据,将通过串口发送来的数据回送回去。该实验的硬件配置不同于前两个实验,串口 1 与USB 串口默认是分开的,并没有在PCB上连接在一起,需要通过跳线帽来连接一下。这里我们把P4 的RXD 和TXD 用跳线帽与P3 的PA9 和PA10 连接起来。

7

实验四 外部中断实验

一.实验简介

STM32 的 IO 口在本章第一节有详细介绍,而外部中断在第二章也有详细的阐述。这里我们将介绍如何将这两者结合起来,实现外部中断输入。

二.实验目的

进一步掌握串口编程,进一步学习外部中断编程,提高编程能力。

三.实验内容

初始化IO口的输入,开启复用时钟,设置IO与中断的映射关系,从而开启与IO口相对应的线上中断事件,设置触发条件。配置中断分组(NVIC),并使能中断,编写中断服务函数。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK、示波器。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1.2.3.4.编写中断服务程序代码 使用ISP下载到实验板 测试运行结果

记录实验过程,撰写实验报告

六.实验结果及测试

8

源代码:

打开串口助手。

七.实验总结

首先需要将IO设置为中断输入口: 1)初始化 IO 口为输入。

2)开启 IO 口复用时钟,设置 IO 口与中断线的映射关系。

3)开启与该 IO口相对的线上中断/事件,设置触发条件。

4)配置中断分组(NVIC),并使能中断。

5)编写中断服务函数。

这一节,使用的是中断来检测按键,通过 WK_UP 按键实现按一次 LED0 和 LED 1 同时翻转,按 KEY0 翻转 LED0,按 KEY1 翻转 LED1。

9

试验中外部中断函数不能进入的原因分析 : 1)GPIO或者AFIO的时钟没有开启。 2)GPIO和配置的中断线路不匹配。 3)中断触发方式和实际不相符合。

4)中断处理函数用库函数时,写错,经常可能出现数字和字母之间没有下划线。 5)外部中断是沿触发,有可能不能检测到沿,比如 中断线是低电平(浮空输入),触发是下降沿触发,可能会出现一直是低电平,高电平的时候是一样的情况,电平持续为高电平。

6)没有用软件中断来触发外部中断,调用函数EXTI_GenerateSWInterrupt;,因为软件中断先于边沿中断处理。

10

实验五 独立看门狗实验

一. 实验简介

独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效。窗口看门狗由从APB1时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常的过迟或过早的操作。

二.实验目的

通过编程,编写一个独立看门狗驱动程序

三.实验内容

启动 STM32 的独立看门狗,从而使能看门狗,在程序里面必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,我们本章将通过一个 LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1.2.3.4.参考教材独立看门狗部分,编写独立看门狗驱动程序。建立和配置工程 编写代码

使用ISP下载到实验板

记录实验过程,撰写实验报告

六.实验结果及测试

11

源代码:

在配置看门狗后,看到LED0 不停的闪烁,如果WK_UP 按键按下,就喂狗,只要WK_UP 不停的按,看门狗就一直不会产生复位,保持LED0 的常亮,一旦超过看门狗定溢出时间(Tout)还没按,那么将会导致程序重启,这将导致LED0 熄灭一次。

七.实验总结

通过本次实验,我掌握了启动独立看门狗的步骤: 1)向 IWDG_KR 写入 0X5555。 2)向 IWDG_KR 写入 0XAAAA。 3)向 IWDG_KR 写入 0XCCCC。

通过上面 3个步骤,启动 STM32 的看门狗,从而使能看门狗,在程序里面就必须间隔一定时间喂狗,否则将导致程序复位。利用这一点,本章通过一个LED 灯来指示程序是否重启,来验证 STM32 的独立看门狗。在配置看门狗后,LED0 将常亮,如果 WK_UP 按键按下,就喂狗,只要 WK_UP 不停的按,看门狗就一直不会产生复位,保持 LED 0 的常亮,一旦超过看门狗溢出时间(Tout)还没按,那么将会导致程序重启,这将导致 LED 0 熄灭一次。

12

实验七 定时器中断实验

一. 实验简介

STM32 的定时器是一个通过可编程预分频器(PSC)驱动的 16 位自动装载计数器(CNT)构成。STM32 的通用定时器可以被用于:测量输入信号的脉冲长度(输入捕获)或者产生输出波形(输出比较和 PWM)等。使用定时器预分频器和 RCC 时钟控制器预分频器,脉冲长度和波形周期可以在几微秒到几毫秒间调整。STM32 的每个通用定时器都是完全独立的,没有互相共享的任何资源。

二.实验目的

熟练掌握定时器中断,学会对定时器中断的编程操作。

三.实验内容

使用定时器产生中断,然后在中断服务函数里面翻转 LED1 上的电平,来指示定时器中断的产生,修改中断时间。

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1.参考教材定时器中断部分,编写定时器中断的驱动程序。2.编写主程序

3.编译代码,使用JLINK或ISP下载到实验板 4.记录实验过程,撰写实验报告

六.实验结果及测试

13

源代码:

七.实验总结

通过本次实验,认识到时间中断来控制LED灯的闪烁,同时也可以将时间中断应用到控制其他的程序块。

以TIME3为例产生中断的步骤为 1)TIM3 时钟使能。

2)设置 TIM3_ARR 和 TIM3_PSC 的值。

3)设置 TIM3_DIER 允许更新中断。

4)允许 TIM3 工作。

5)TIM3 中断分组设置。 6)编写中断服务函数。

在中断产生后,通过状态寄存器的值来判断此次产生的中断属于什么类型。然后执行相关的操作,我们这里使用的是更新(溢出)中断,所以在状态寄存器 SR 的最低位。在处理完中断之后应该向 TIM3_SR 的最低位写 0,来清除该中断标志。

14

实验十三 ADC实验

一.实验简介

通过DAC将STM32系统的数字量转换为模拟量。使用ADC将模拟量转换为数字量。

二.实验目的

掌握DAC和ADC编程。

三.实验内容

编写代码实现简单的DAC单次发送

编写代码实现ADC采集DAC发送的数据,并发送到串口

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1编写主程序

2编译代码,使用JLINK或ISP下载到实验板,使用串口调试助手观察数据 3记录实验过程,撰写实验报告

六.实验结果及测试

源代码:

七.实验总结

本节将利用 STM32的 ADC1 通道 0 来采样外部电压值,并在串口调试助手中显示出来。步骤如下:

1)开启 PA 口时钟,设置 PA0 为模拟输入。

2)使能 ADC1 时钟,并设置分频因子。

3)设置 ADC1 的工作模式。

4)设置 ADC1 规则序列的相关信息。

5)开启 AD 转换器,并校准。

6)读取 ADC 值。

在上面的校准完成之后,ADC 就算准备好了。接下来我们要做的就是设置规则序列 0 里面的通道,然后启动 ADC 转换。在转换结束后,读取 ADC1_DR 里面的值。

通过以上几个步骤的设置,可以正常的使用 STM32 的 ADC1 来执行 AD 转换操作。

通过本次实验的学习,我们了解了STM32 ADC的使用,但这仅仅是STM32强大的ADC 功能的一小点应用。STM32 的ADC 在很多地方都可以用到,其ADC 的DMA 功能是很不错的,

16

实验十五 DMA实验

一. 实验简介

直接存储器存取(DMA)用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU干预,数据可以通过DMA快速地移动,这就节省了CPU的资源来做其他操作。

二.实验目的

熟练掌握DMA编程,学会对EPC02的读写操作,学习双缓冲兵乓操作,理解互斥资源。提高编程能力。

三.实验内容

利用外部按键KEY0 来控制DMA 的传送,每按一次KEY0,DMA 就传送一次数据

到USART1,然后在串口调试助手观察进度等信息。LED0 还是用来做为程序运行的指示灯。

这里我们使用到的硬件资源如下: 1)按键KEY0。 2)指示灯LED0。

3)使用串口调试助手观察数据

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、网络调试助手。

五.实验步骤

1编写主程序

2编译代码,使用JLINK或ISP下载到实验板,使用串口调试助手观察数据 3记录实验过程,撰写实验报告

六.实验结果及测试

17

源代码:

18

伴随 LED0 的不停闪烁,提示程序在运行。我们打开串口调试助手,然后按KEY0,可以看到串口显示如下内容:

七.实验总结

本节利用 STM32 的 DMA 来实现串口数据传送,DMA通道的配置需要: 1)设置外设地址。

2)设置存储器地址。

19

3)设置传输数据量。

4)设置通道 4 的配置信息。

5)使能 DMA1 通道 4,启动传输。

通过以上 5 步设置,我们就可以启动一次 USART1 的 DMA 传输了。

DMA控制器对DMA请求判别优先级及屏蔽,向总线裁决逻辑提出总线请求。当CPU执行完当前总线周期即可释放总线控制权。此时,总线裁决逻辑输出总线应答,表示DMA已经响应,通过DMA控制器通知I/O接口开始DMA传输。

DMA控制器获得总线控制权后,CPU即刻挂起或只执行内部操作,由DMA控制器输出读写命令,直接控制RAM与I/O接口进行DMA传输。

在DMA控制器的控制下,在存储器和外部设备之间直接进行数据传送,在传送过中不需要中央处理器的参与。开始时需提供要传送的数据的起始位置和数据长度。

当完成规定的成批数据传送后,DMA控制器即释放总线控制权,并向I/O接口发出结束信号。当I/O接口收到结束信号后,一方面停 止I/O设备的工作,另一方面向CPU提出中断请求,使CPU从不介入的状态解脱,并执行一段检查本次DMA传输操作正确性的代码。最后,带着本次操作结果及状态继续执行原来的程序。

由此可见,DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场的过程,通过硬件为RAM与I/O设备开辟一条直接传送数据的通路,使CPU的效率大为提高。

20

实验十六 I2C实验

一.实验简介

编程实现对使用I2C接口的EPC02芯片进行写和读操作。

二.实验目的

熟练掌握I2C编程,学会对EPC02的读写操作。

三.实验内容

编写I2C驱动程序,使用驱动程序初始化EPC02,判断设备正确性。

写256个0x5A到EPC02,读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1参考教材I2C部分,编写I2C驱动程序。 2编写主程序

3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告

六.实验结果及测试

21

伴随 LED0 的不停闪烁,提示程序在运行。我们先按下KEY0,可以看到如下所示的内容,证明数据已经被写入到24C02了。

接着我们按KEY2,可以看我们刚刚写入的数据被显示出来了,如下图所示:

22

源代码:

七.实验总结

IIC是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。在 CPU 与被控 IC 之间、IC 与 IC 之间进行双向传送,高速 IIC 总线一般可达 400kbps 以上。

IIC总线在传送数据过程中共有三种类型信号,它们分别是:开始信号、结束信号和应答信号。这些信号中,起始信号是必需的,结束信号和应答信号,都可以不要。 程序在开机的时候会检测 24C02 是否存在,如果不存在则会在TFTLCD 模块上显示错误信息,同时LED0 慢闪。大家可以通过跳线帽把PC11 和PC12 短接就可以看到报错了。 通过本次实验,我掌握了如何使用IIC写入与读出数据,学习了编写I2C驱动程序,使用驱动程序初始化EPC02,判断设备正确性,以及如何在助手上显示。

23

实验十七 SPI实验

一.实验简介

编程实现对SPI接口的W25Q64进行读写操作。

二.实验目的

熟练掌握SPI编程,学会对的W25Q64读写操作。

三.实验内容

1.2.3.4.5.编写SPI驱动程序 初始化SPI接口

读取SPIFLASH的ID,如果正确继续,否则报错

向SPIFALSH地址0x12AB00开始写一串字符,再读出比较判断是否与写入的一致 向SPIFALSH地址0x12AB00开始写连续256个字节的0x5A,然后读出并发送给串口,通过串口调试助手判别是否读到的都是0x5A.四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。

软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件、串口调试助手。

五.实验步骤

1参考SPI及SPI FLASH部分,编写SPI及SPI FLASH驱动程序(可参考书上代码)。 2编写主程序

3编译代码,使用JLINK或ISP下载到实验板 4记录实验过程,撰写实验报告

六.实验结果及测试

24

源代码:

伴随 LED0 的不停闪烁,提示程序在运行。我们先按下KEY0,可以看到如图13.17.4.2 所示的内容,证明数据已经被写入到W25X16了。

25

接着我们按KEY2,可以看我们刚刚写入的数据被显示出来了,如下图所示:

七.实验总结

SPI 接口主要应用在

EEPROM,FLASH,实时时钟,AD 转换器,还有数字信号处理器和数字信号解码器之间。SPI,是一种高速的,全双工,同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为 PCB 的布局上节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议,STM32 也有 SPI 接口。

SPI 的设置步骤:

1)配置相关引脚的复用功能,使能 SPI时钟。

2)设置 SPI 工作模式。

3)使能 SPI。

程序在开机的时候会检测 W25X16 是否存在,如果不存在则会在TFTLCD 模块上显示错误信息,同时LED0 慢闪。大家可以通过跳线帽把PA5 和PA6 短接就可以看到报错了。 通过本实验,我掌握了编写SPI程序写入和读取FLASH的方法,掌握了对学会对的W25Q64读写操作。对STM32开发板有了进一步的了解。

26

实验二十一 红外遥控实验

一. 实验简介

编程实现通过在 ALIENTEK MiniSTM32 开发板上实现红外遥控器的控制。

二.实验目的

掌握编程实现红外遥控控制开发板的方法。

三.实验内容

1.编写红外遥控驱动程序 2.编写红外遥控程序代码 3.使用红外遥控控制开发板

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤

4.编写红外遥控驱动程序 5.编写红外遥控程序代码

6.编译代码,使用JLINK或ISP下载到实验板 7.记录实验过程,撰写实验报告

六.实验结果及测试

27

源代码:

使用串口调试助手观察数据

28

七.实验总结

红外遥控是一种无线、非接触控制技术,具有抗干扰能力强,信息传输可靠,功耗低,成本低,易实现等显著优点,被诸多电子设备特别是家用电器广泛采用,并越来越多的应用到计算机系统中。

通过本节实验,我学习到了如何编程使用红外遥控控制,在本程序中只是简单地输出一个数值,在以后的应用中可以实现更强大的功能,比如用红外远程输入控制开发板进行一些操作。对STM32有了进一步的认识。

29

实验二十二 DS18B20实验

一. 实验简介

一. 在ALIENTEK MiniSTM32 开发板上,通过 DS18B20 来读取环境温度值。

二.实验目的

巩固SPI编程。掌握使用感应器获取环境温度的方法。

三.实验内容

1.复位脉冲和应答脉冲

2.写时序

3.读时序

四.实验设备

硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。

五.实验步骤

1.2.3.4.参考教材DS18B20编程部分,编写DS18B20驱动程序 编写主程序

编译代码,使用JLINK或ISP下载到实验板 记录实验过程,撰写实验报告

六.实验结果及测试

30

源代码:

使用串口调试助手观察数据:

七.实验总结

DS18B20 是由 DALLAS 半导体公司推出的一种的“一线总线”接口的温度传感器。与传统的热敏电阻等测温元件相比,它是一种新型的体积小、适用电压宽、与微处理器接口简单的数字化温度传感器。

通过本次实验,我认识到STM32的强大,在开发板上可以添加其他感应器从而实现更强大的功能。添加了DS18B20后的开发板可以感应外界的温度,通过公式计算显示出来。

31

第19篇:嵌入式学习心得

LPC2136是ARM7架构,是32位地址总线和数据总线,可以寻址的范围为2的32次方

=4GB(0x00000000~0xFFFFFFFF)

我们的程序在哪里运行?

还记得我们在做“跑马灯”和“蜂鸣器”两个实验,用ads1.2中建立工程文件的时候有设置三个地址:

RO Base :0x40000000

RW Base :0x40001000

Image entry point :0x40000000

开始没有讲为什么,通过上面的系统存储器映射图解不知大家是否有所悟。LPC2136内部自带32KB RAM和256KB FLASH。

32KB RAM分布在整个CPU存储器空间的0x40000000~0x40007FFF;

256KB FLASH分布在整个CPU存储器空间的0x00000000~0x0003 FFFF;

RO Base是告诉编译系统把编译生成的目标码放在0x40000000起始的位置,也就是代码段存放在0x40000000开始的位置。

RW Base告诉编译系统把各种变量(常量放在RO开始的位置),堆栈放在0x40001000起始的位置。

Image entry point:是告诉编译系统程序入口点在0x40000000,即程序从这个地址开始执行。(此部分在附录二中细说)

Flash与RAM的区别

通过以上所说,好像FLASH在这里没什么用,如果你的RO地址定位在RAM中,那么FLASH确实没有用。但FLASH是必须的功能部件。

Flash的作用也许要从其与RAM的区别说起:

区别一:RAM是易失性存储器,Flash是非易失性存储器。通俗的说,存储在RAM中的数据掉电后数据丢失;而存储在FLASH中的数据掉电后任然保持。(必须通过工具或特殊命令来擦除)

区别二:RAM是可读写存储器,Flash只读存储器。(也许有人要问,Flash难道不能写吗?Flash可以写,但不能象RAM一样做简单赋值操作,必须通过Flash写命令写,而且写入数据的最小单位为512字节,即一个扇区)

区别三:RAM访问速度快,而Flash访问速度慢的多。

区别四:RAM价格昂贵,Flash便宜。

FLASH有何用途

我们一般在调试程序的时候为了提高开发进度,都把程序放在RAM中调试,在RAM中调试有一个缺陷就是每次上电必须下载程序到板子上,当产品的各个模块调试OK,产品就要实现脱机功能,即把程序烧写到FLASH中,这样就不需要每次上电加载程序。我们手中拿的手机,在开发阶段都是在RAM(SDRAM)中调试的,开发完成,要发布的时候就把程序烧到FLASH,这样我们开机有能运行FLASH的程序。

第20篇:嵌入式心得体会

对于电焊,虽然一点都不陌生,但亲手操作的机会却只有几次,因此我很庆幸能够有这样的焊接机会,进行这样的实践。

焊接看似容易,实则需要长时间练习才能掌握。刚开始的时候,手一直在抖,尤其这次焊的还是贴片电容、电阻,原器件比以前焊的小好多,用镊子的手一抖就夹不住了,拿着烙铁的手抖得都不容易将器件焊上,焊出来的焊点也特别难看,在不断尝试,不断挑战自我的过程中,我的手不抖了,也基本能掌握锡的用量了,当焊点终于不再“丑不忍睹”的时候,对焊接也没有当初的恐惧了。对自己的动手能力也有了信心。

在焊接的过程中我学到了许多以前我不知道的东西,比如,以前我只知道有电烙铁,但不知道它还有好多种类,有单用式、两用式、调温式、恒温式、直热式、感应式、内热式和外热式。松香可以将多余的锡弄下来,用酒精可以把板擦的干净些。通过视频和查找资料,知道了在焊不同的器件时用的电烙铁的头不同,比如在焊引脚时要用尖头,焊CPU时要用刀口,为防止锡将焊引脚的小孔堵住,用松香把纸条粘在小孔上,把小孔盖住,把CPU的引脚对齐,用锡先涂满两边,固定好芯片,在焊另外两边,然后用尖头的电烙铁沾着松香将多余的锡弄下来。

本次课程设计的是信号发生器,信号发生器在EDA课程,数字信号处理课程中都曾涉及,所以还是较为熟悉的,在设计之前查阅了一些相关书籍,也从网上查找了一些相关资料,程序代码中运用到了C语言,将程序加入到嵌入式结构框架中,进行定义变量,端口,设定所用的GPIO参数等等。

在焊接的过程中我不仅学到了知识,而且让我深深地体会到一个团队中各成员合作的重要性,要善于团队合作,在进行团队合作的时候,还要耐心听取每个成员的意见,每个人都有长处和短处,只有在包容别人的同时我们才可以取长补短,不断完善和不断进步,交到更多的朋友,学到更多的知识。同时还让我明白:做任何事都要一心一意,严谨认真,反复琢磨,不能畏惧,要有信心和勇气,一定要做好充分的准备。不能盲目去做,要坚持,还要学会反思跟总结,我们不是为了完成任务而完成,这还是一个学习跟提高的过程。

在大学里学的不是知识,而是一种叫做自学的能力。在这个知识爆炸的时代,知识更新太快,靠原有的一点知识肯定不行。以后的工作中肯定会用到一些新的知识对一些电子机器进行开发设计,我们只能在自己以前的基础上努力自学尽快掌握知识。必须在工作中勤于动手慢慢琢磨,不断学习,不断积累。遇到不懂的地方,自己先想方设法解决,实在不行可以虚心请教他人,而没有自学能力的人迟早要被企业和社会所淘汰。

嵌入式工作汇报
《嵌入式工作汇报.doc》
将本文的Word文档下载到电脑,方便编辑。
推荐度:
点击下载文档
相关专题
点击下载本文文档