A. 《嵌入式系统设计师教程》pdf下载在线阅读全文,求百度网盘云资源
《嵌入式系统设计师教程》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1nYcyZL7GANb0Res-E1QtIg
B. ARM9嵌入式系统设计基础教程的第5章 嵌入式系统输入/输出设备接口
5.1 通用输入/输出接口
5.1.1 通用输入/输出接口原理与结构
5.1.2 S3C2410A输入/输出接口编程实例
5.2 A/D转换专器接口
5.2.1 A/D转换的方法和原属理
5.2.2 S3C2410A的A/D转换器
5.2.3 S3C2410A A/D接口编程实例
5.3 D/A转换器接口
5.3.1 D/A转换器的工作原理
5.3.2 S3C2410A与D/A转换器的接口电路
5.4 键盘与LED数码管接口
5.4.1 键盘与LED数码管接口基本原理与结构
5.4.2 用I/O口实现键盘接口
5.4.3 采用专用芯片实现键盘及LED接口
5.5 LCD显示接口
5.5.1 LCD显示接口原理与结构
5.5.2 S3C2410A的LCD控制器
5.5.3 S3C2410A LCD显示的编程实例
5.6 触摸屏接口
5.6.1 触摸屏工作原理与结构
5.6.2 采用专用芯片的触摸屏控制接口
5.6.3 S3C2410A的触摸屏接口电路
思考题与习题
C. 《arm9嵌入式系统设计基础教程》(第二版)-黄智伟、邓月明、王彦的PDF版
有课件要不 版权http://pan..com/share/link?uk=4096628124&shareid=266174
D. 《ARM体系结构与编程第二版》pdf下载在线阅读全文,求百度网盘云资源
《ARM体系结构与编程第二版》网络网盘pdf最新全集下载:
链接:https://pan..com/s/1yYDq8g7FV6eBT-m-8-tRGg
E. 急要周立功主编<ARM嵌入式系统基础教程>课后习题答案
第一章
思考与练习
1、举出3个书本中未提到的嵌入式系统的例子。
答:红绿灯控制,数字空调,机顶盒
2、什么叫嵌入式系统
嵌入式系统:以应用为中心、以计算机技术为基础、软件硬件可裁剪、适应应用系
统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。
3、什么叫嵌入式处理器?嵌入式处理器分为哪几类?
嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。
嵌入式微处理器(Embedded Microprocessor Unit, EMPU)
嵌入式微控制器(Microcontroller Unit, MCU)
嵌入式DSP 处理器(Embedded Digital Signal Processor, EDSP)
嵌入式片上系统(System On Chip)
4、什么是嵌入式操作系统?为何要使用嵌入式操作系统?
是一段在嵌入式系统启动后首先执行的背景程序,首先,嵌入式实时操作系统提高了系统的可靠性。其次,提高了开发效率,缩短了开发周期。再次,嵌入式实时操作系统充分发挥了 32 位 CPU 的多任务潜力。
第二章
1、嵌入式系统项目开发的生命周期分哪几个阶段?各自的具体任务是什么?
项目的生命周期一般分为识别需求、提出解决方案、执行项目和结束项目4 个阶段。
识别需求阶段的主要任务是确认需求,分析投资收益比,研究项目的可行性,分析厂商所应具备的条件。
提出解决方案阶段由各厂商向客户提交标书、介绍解决方案。
执行项目阶段细化目标,制定工作计划,协调人力和其他资源;定期监控进展,
分析项目偏差,采取必要措施以实现目标。
结束项目阶段主要包括移交工作成果,帮助客户实现商务目标;系统交接给维护人员;结清各种款项。
2、为何要进行风险分析?嵌入式项目主要有哪些方面的风险?
在一个项目中,有许多的因素会影响到项目进行,因此在项目进行的初期,在客户和开发团队都还未投入大量资源之前,风险的评估可以用来预估项目进行可能会遭遇的难题。
需求风险;时间风险;资金风险;项目管理风险
3、何谓系统规范?制定系统规范的目的是什么?
规格制定阶段的目的在于将客户的需求,由模糊的描述,转换成有意义的量化数据。
4、何谓系统规划?为何要做系统规划
系统规划就是拟定一个开发进程,使项目在合理的进程范围中逐渐建构完成。其目地是让客户可以进一步地掌握系统开发的进程,并确定检查点,以让双方确定项目是否如预期中的进度完成。
5、为什么在项目结束前需要进行项目讨论?
项目的讨论一个项目进行的反馈机制。通过这一个程序,项目团队的经验才可以被记录
下来,也就是说,这是一个撰写项目历史的过程。
第三章
1、ARM7TDMI中的T、D、M、I的含义是什么?
64 位乘法指令(带M 后缀的)、支持片上调试(带D 后缀的)、高密度 16 位的Thumb
指令机扩展(带T 后缀的)和EmbededICE 观察点硬件(带I 后缀的)
2、ARM7TDMI采用几级流水线?使用何种存储器编址方式?
三级流水线(取指 译码 执行);使用了冯·诺依曼(Von Neumann )结构,指令和数据共用一条32 位总线。
3、ARM处理器模式和ARM处理器状态有何区别?
处理器模式指的是处理器在执行程序时在不同时刻所处的不同状态,处理器状态指的是处理器当前所执行的指令集。
4、分别列举ARM的处理器模式和状态。
状态:
ARM 状态 32 位,这种状态下执行的是字方式的ARM 指令
Thumb 状态 16 位,这种状态下执行半字方式的 Thumb 指令
模式:
用户模式、快中断模式、中断模式、管理模式、 中止模式、未定义模式和系统模式。
5、PC和LR分别使用哪个寄存器?
PC使用R15寄存器,LR使用R14寄存器
6、R13寄存器的通用功能是什么?
堆栈
第四章
1、基础知识
(1)ARM7TDMI(-S)有几种寻址方式?LOR R1,[R0,#0x08]属于哪种寻址方式?
1. 寄存器寻址;2. 立即寻址;3. 寄存器移位寻址;4. 寄存器间接寻址;5. 基址寻址;6. 多寄存器寻址;7. 堆栈寻址;8. 块拷贝寻址;9. 相对寻址;LOR R1,[R0,#0x08]属于基址寻址。
(2)ARM指令的条件码有多少个?默认条件码是什么?
16条, 默认条件码是AL。
(3)ARM指令中第二个操作数有哪几种形式?举例5个8位图立即数。
(1) 立即数;(2) 寄存器;(3) 寄存器及移位常数;
0x3FC(0xFF<<2)、0、0xF0000000(0xF0<<24)、200(0xC8)、0xF0000001(0x1F<<28)。
(4)LDR/STR指令的偏移形式有哪4种?LDRB和LDRSB有何区别?
(1) 零偏移;(2) 前索引偏移;(3) 程序相对偏移;(4) 后索引偏移。LDRB就是读出指定地址的数据并存入指定寄存器,LDRSB读出指定地址的数据,并高24位用符号位扩展,再存入指定寄存器。
(5)请指出MOV指令与LDR加载指令的区别及用途。
MOV 将 8 位图(pattern)立即数或寄存器(operand2)传送到目标寄存器(Rd),可用于移位 运算等操作。读取指定地址上的存储器单元内容,执行条件AL.
(6)CMP指令的操作是什么?写一个程序,判断R1的值是否大于0x30,是则将R1减去0x30。
CMP 指令将寄存器Rn 的值减去operand2 的值,根据操作的结果更新CPSR 中的相应条 件标志位,以便后面的指令根据相应的条件标志来判断是否执行。
CMP R1,0x30
SUBHI R1,R1,0x30
(7)调用子程序是用B还是用BL指令?请写出返回子程序的指令?
BL 指令用于子程序调用。
MOV PC, R14
(8)请指出LDR伪指令的用法。指令格式与LDR加载指令的区别是什么?
LDR 伪指令用于加载 32 位的立即数或一个地址值到指定寄存器。第二个数为地址表达式。
(9)ARM状态与Thumb状态的切换指令是什么?请举例说明。
BX指令,
(10)Thumb状态与ARM状态的寄存器有区别吗?Thumb指令对哪些寄存器的访问受到一定限制?
Thumb状态下不能更新CPSR 中的ALU 状态标志。,Thumb指令对R8~R15寄存器访问受限。
(11)Thumb指令集的堆栈入栈、出栈指令是哪两条?
PUSH POP
(12)Thumb指令集的BL指令转换范围为何能达到±4MB?其指令编码是怎样的?
Thumb 采用两条16 位指令组合成22 位半字偏移(符号扩展为32 位),使指令转移范围为±4MB。
2 有符号和无符号加法
下面给出A 和B 的值,您可先手动计算A+B,并预测N、Z、V 和 C 标志位的值。然后修改程序清单4.1 中R0、R1 的值,将这两个值装载到这两个寄存器中(使用LDR 伪指令,
如LDR R0,=0x FFFF0000),使其执行两个寄存器的加法操作。调试程序,每执行一次加法 操作就将标志位的状态记录下来,并将所得结果与您预先计算得出的结果相比较。如果两个 操作数看作是有符号数,如何解释所得标志位的状态?同样,如果这两个操作数看作是无符数,所得标志位又当如何理解?
0xFFFF000F 0x7FFFFFFF 67654321 (A)
+ 0x0000FFF1 + 0x02345678 + 23110000 (B)
结果: ( ) ( ) ( )
3 数据访问
把下面的 C 代码转换成汇编代码。数组 a 和b 分别存放在以 0x4000 和 0x5000 为起始 地址的存储区内,类型为long(即32 位)。把编写的汇编语言进行编译连接,并进行调试。
for (i=0; i<8; i++)
{ a[i] = b[7-i];
}
第五章
1、基础知识:
(1)LPC2114可使用的外部晶振频率范围是多少(使用/不使用PLL功能时)?
晶振频率范围:1~30 MHz,若使用PLL 或ISP 功能为:10~25MHz。
(2)描述一下LPC2210的PO.14、P1.20、P1.26、BOOT1和BOOT0引脚在芯片复位时分别有什么作用?并简单说明LPC2000系列ARM7微控制器的复位处理流程。
P0.14 的低电平强制片内引导装载程序复位后控制器件的操作,即进入ISP 状态。
P1.20 的低电平使 P1.25~P1.16 复位后用作跟踪端口。
P1.26 的低电平使 P1.31~P1.26 复位后用作一个调试端口。
当RESET 为低时,BOOT0 与BOOT1 一同控制引导和内部操作。引脚的内部上拉确保了引脚未连接时呈现高电平。
外部复位输入:当该引脚为低电平时,器件复位,I/O口和外围功能进入默认状态,处理器从地址0 开始执行程序。复位信号是具有迟滞作用的TTL 电平。
(3)LPC2000系列ARM7微控制器对向量表有何要求(向量表中的保留字)?
向量表所有数据32 位累加和为零(0x00000000~0x0000001C 的8 个字的机器码累加),才能脱机运行用户程序,这是LPC2114/2124/2212/2214 的特性。
(4)如何启动LPC2000系列ARM7微控制器的ISP功能?相关电路应该如何设计?
(5)LPC2000系列ARM7微控制器片内Flash是多位宽度的接口?它是通过哪个功能模块来提高Flash的访问速度?
128位, 通过存储器加速模块(MAM)来提高Flash的访问速度
(6)若LPC2210的BANK0存储块使用32位总线,访问BANK0时,地址线A1、A0是否有效?EMC模块中的BLSO~BLS4具有什么功能?
无效,( 如果存储器组配置成 16 位宽,则不需要 A0;8 位宽的存储器组需要使用 A0 。);字节定位选择信号。
(7)LPC2000系列ARM7微控制器具有引脚功能复用特性,那么如何设置某个引脚为指定功能?
通过引脚功能选择寄存器的设定来设置某个引脚为指定功能
(8)设置引脚为GPIO功能时,如何控制某个引脚单独输入/输出?当前要知道某个引脚当前的输出状态时,是读取IOPIN寄存器还是读取IOSET寄存器?
GPIO方向寄存器,IOPIN。
(9)P0.2和P0.3口是I2C接口,当设置它们为GPIO时,是否需要外接上拉电阻才能输出高电平?
(10)使用SPI主模式时,SSEL引脚是否可以作为GPIO?若不能,SSEL引脚应如何处理?
不能用作GPIO,SSEL应设这高电平,处于末激活状态。
(11)LPC2114具有几个UART是符合什么标准?哪一个UART可用作ISP通信?哪一个UART具有MODEM接口?
UART0,UART1;UART0用于ISP通信,UART1具有MODEM接口。
(12)LPC2114具有几个32位定时器?PWM定时器是否可以作通用定时器使用?
两个32位定时器,PWM定时器不能用作通用定时器使用
(13)LPC2000系列ARM7微控制器具有哪两种低耗模式?如何降低系统的功耗?
2 个低功耗模式:空闲和掉电;
2、计算PLL设置值:
假设有一个基于LPC2114的系统,所使用的晶振为11.0592MHZ石英晶振。请计算出最大的系统时钟(ccls)频率为多少MHZ?此时PLL的M值和P值各为多少?请列出计算公式,并编写设置PLL的程序段。
3、存储器重影射:
(1)LPC2210具有( 4 )种存影射模式。
①3 ②5 ③1 ④4
(2)当程序已固化到片内Flash,向量表保存在0x00000000起始处,则MAP〔1:0〕的值应该为( 2 )。
①00 ②01 ③10 ④11
(3)LPC2000系列APM7微控制器ccq重影射的目标起始地址为( ),共有( )个字。
①0x00000000,8 ②0x40000000,8
③0x00000000,16 ④0x7FFFE000,8
4、外部中断唤醒掉电设计:
以下代码是初始化外部中断0,用它来唤醒掉电的LPC2114,请填空。
PINSEL0=0x00000000;
PINSELI = (PINSEL1&0XFFFFFFFC)|0X01; //设置I/O连接,PO.16设置为EINTO
EXTMODE =0X00; //设置EINT0为电平触发模式
EXTPOLAR=0X00; //设置EINT0为低电平触发
EXTWAKE =0X01; //允许外部中断0唤醒掉电的CPU
EXTINT=0x0F; //清除外部中断标识
第四章
程序清单4.1寄存器相加
;文件名:TESTI.S
;功能:实现两个寄存器相加
;说明:使用ARMulate软件仿真调试
AREA Examplel,CODE,READONLY ;声明代码段Examplel
ENTRY ;标识程序入口
CODE32 ;声明32位ARM指令
START MOV R0,#0 ;设置参数
MOV R1,#10
LOOP BL ADD_SUB ;调用子程序ADD_SUB
B LOOP ;跳转到LOOP
ADD_SUB
ADDS R0,R0,R1 ;R0=R0+R1
MOV PC,LR ;子程序返回
END ;文件结束
程序清单4.2 读取SMI立即数
T_bit EQU 0X20
SWI_Handler
STMFD SP!,{R0_R3,R12,LR} ;现场保护
MRS R0,SPSR ;读取SPSR
STMED SP!,{R0} ;保存SPSR
TST R0,#T_bit ;测试T标志位
LDRNEH R0,[LR,#_2] ;若是Thumb指令,读取指令码(16位)
BICNE R0,R0,,#0xFF00 ;取得Thumb指令的8位立即数
LDREQ R0,[LR,#_4] ;若是ARM指令,读取指令码(32位)
BICEQ R0,R0,#0Xff000000 ;取得ARM指令的24位立即数
……
LDMFD SP!,{ R0_R3,R12,PC} ;SWI异常中断返回
程序清单4.3使用IRQ中断
ENABLE_IRQ
MRS R0,CPSR
BIC R0,R0,#0x80
MSR CPSR_C,R0
MOV PC,LR
程序清单4.4禁能IRQ中断
DISABLE_IRQ
MRS R0 CPSR
ORR R0,R0,#0x80
MSR CPSR_C,R0
MOV PC,LR
程序清单4.5堆栈指令初始化
INTSTACK
WOV R0,LR ;保存返回地址
;设置管理模式堆栈
MSR CPSR_C,#0xD3
LDR SP,stacksvc
;设置中断模式堆栈
MSR CPSR_C,#0xD2
LDR SP,Stacklrq
……
程序清单4.6小范围地址的加载
……
ADR R0,DISP_TAB ;加载转换表地址
LDRB R1,[R0,R2] ;使用R2作为参数,进行查表
……
DISP_TAB
DCB 0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90
程序清单4.7中等范围地址的加载
……
ADR LR,RETURNI
ADRL R1,Thumb_sub+1
BX R1
RETURNI
……
CODE 16
Thumb_sub
MOV R1,#10
……
程序清单4.8加载32位立即数
……
LDR R0,=IOPIN ;加载GPIO的寄存器IOPIN的地址
LDR R1,[R0] ;读取IOPIN寄存器的值
……
LDR R0,=IOSET
LDR R1,=0x00500500
STR R1,[R0] ;IOSET=0x00500500
……
程序清单4.9软件延时
……
DELAYI
NOP
NOP
NOP
SUBS R1,R1,#1
BNE DELAYI
……
程序清单4.10 ARM到Thumb的状态切换
;文件名:TEST8.S
;功能:使用BX指令切换处理器状态
;说明:使用ARMulate软件仿真调试
AREA Example8,CODE,READONLY
ENTRY
CODE32
ARM_CODE ADR R0,THUMB_CODE+1
BX R0 ;跳转并切换处理器状态
CODE16
THUMB_CODE
MOV R0,#10 ;R0=10
MOV R1,#20 ;R1=20
ADD R0,R1 ;R0=R0+R1
B
END
F. 《嵌入式系统设计与实践》pdf下载在线阅读,求百度网盘云资源
《嵌入式系统设计与实践》(Elecia White)电子书网盘下载免费在线阅读
资源链接:
链接:https://pan..com/s/1EEyot-j4Kbu3xpzd2swvYw
书名:嵌入式系统设计与实践
作者:Elecia White
豆瓣评分:8.0
出版社:机械工业出版社
出版年份:2013-6
页数:282
内容简介:
对嵌入式系统的开发感兴趣吗?由于嵌入式系统对效率有很高的要求,所以需要遵循严格的设计原则。怀特专著的《嵌入式系统设计与实践》简单易读,结合传统的软件设计模式和嵌入式程序设计领域中新颖、独特的设计模式,帮助你建立良好的程序设计实践技巧,学习如何针对处理器而非操作系统建立系统架构,以及处理硬件难题与制造需求的特殊技能。本书作者是嵌入式系统专家,创建过各种嵌入式系统,从城市道路监控系统到DNA扫描仪再到儿童玩具。
《嵌入式系统设计与实践》主要内容:
·深入分析嵌入式系统的架构设计步骤和架构设计模式。
·介绍嵌入式系统中独有的设计模式,如环形缓冲区、中断和定时器、硬件调试、PID控制、系统优化等。
·如何优化系统以降低成本并提高性能。
·如何在资源有限的环境中建立健壮的软件架构。
·探讨了扫描仪、电机以及其他I/0设备。
·介绍事半功倍的方案:降低内存消耗、代码空间占用、处理器周期以及功耗。 ·学习如何在处理器中直接更新嵌入式程序代码。
·掌握如何在小型处理器上实现复杂的数学计算。
·提供了招聘嵌入式工程师的面试题,以及回答这些面试题的独到思路。
G. ARM9嵌入式系统设计基础教程的第8章 嵌入式系统软件及操作系统基础
8.1 嵌入式软件基础
8.1.1 嵌入式软件的特点
8.1.2 嵌入式软件的分类
8.1.3 嵌入式软件的体系结构
8.1.4 嵌入式系统的设备驱动层
8.1.5 嵌入式中间件
8.2 嵌入式操作系统基础
8.2.1 嵌入式操作系统的功能
8.2.2 嵌入式操作系统的分类
8.2.3 常见的嵌入式操作系统简介
8.3 嵌入式系统的任务管理
8.3.1 单道程序设计和多道程序设计
8.3.2 进程、线程和任务243 8.3.3 任务的实现
8.3.4 任务的调度
8.3.5 实时系统调度
8.4 嵌入式系统的存储管理
8.4.1 嵌入式存储管理方式的特点
8.4.2 存储管理的实模式与保护模式
8.4.3 分区存储管理
8.4.4 地址映射
8.4.5 页式存储管理
8.4.6 虚拟页式存储管理
8.5 I/O设备管理
8.5.1 I/O编址
8.5.2 I/O设备的控制方式
8.5.3 I/O软件
思考题与习题
H. 求视频——ARM嵌入式系统基础教程
嵌入式视频教程,欢迎登陆网址:http://www.itxxlm.com/portal.php?mod=view&aid=7含价值3000元的USB驱动教程和价值15000元2013年嵌入式视频教程。 关于如何学习嵌入式,我刚才看到一篇很不错的文章,是一个专科生介绍自己如何自学嵌入式,并找到嵌入式的工作,里面介绍了他的学习方法和学习过程,希望对你有帮助。 先做个自我介绍,我07年考上一所很烂专科民办的学校,学的是生物专业,具体的学校名称我就不说出来献丑了。09年我就辍学了,我在那样的学校,一年学费要1万多,但是根本没有人学习,我实在看不到希望,我就退学了。 退学后我也迷茫,大专都没有毕业,我真的不知道我能干什么,我在纠结着我能做什么。所以辍学后我一段时间,我想去找工作,因为我比较沉默寡言,不是很会说话,我不适合去应聘做业务。我想应聘做技术的,可是处处碰壁。 一次偶然的机会,我才听到嵌入式这个行业。那天我去新华书店,在计算机分类那边想找本书学习。后来有个女孩子走过来,问我是不是读计算机的,有没有兴趣学习嵌入式,然后给我介绍了一下嵌入式现在的火热情况,告诉我学嵌入式多么的有前景,给我了一份传单,嵌入式培训的广告。听了她的介绍,我心里痒痒的,确实我很想去学会一门自己的技术,靠自己的双手吃饭。 回家后,我就上网查了下嵌入式,确实是当今比较热门的行业,也是比较好找工作的,工资也是相对比较高。我就下决心想学嵌入式了。于是我去找嵌入式培训的相关信息,说真的,我也很迷茫,我不知道培训是否真的能像他们宣传的那样好,所以我就想了解一段时间再做打算。 后来,我在网络知道看到一篇让我很鼓舞的文章《如何学习嵌入式》,是一个嵌入式高手介绍没有基础的朋友怎么自学入门学嵌入式,文章写的很好,包含了如何学习,该怎么学习。他提到一个方法就是看视频,因为看书实在太枯燥和费解的,很多我们也看不懂。这点我真的很认同,我自己看书往往看不了几页。 我在想,为什么别人都能自学成才,我也可以的!我要相信自己,所以我就想自学,如果实在学不会我再去培训。 主意一定,我就去搜索嵌入式的视频,虽然零星找到一些嵌入式的视频,但是都不系统,我是想找一个能够告诉我该怎么学的视频,一套从入门到精通的视频,一个比较完整的资料,最好能有老师教,不懂可以请教的。 后来我又找到一份很好的视频,是在IT学习联盟推出的一份视频《零基础嵌入式就业班》,网址:http://www.itxxlm.com/portal.php?mod=view&aid=7。里面的教程还不错,很完整,可以让我从基础的开始学起。视频比较便宜。 下面介绍下我的学习流程,希望对和我一样完全没有基础的朋友有所帮助。 收到他们寄过来的光盘后,我就开始学习了,由于我没有什么基础,我就从最简单的C语言视频教程学起,话说简单,其实我还是很多不懂的,我只好请教他们,他们还是很热心的,都帮我解决了。C语言我差不多学了一个礼拜,接下来我就学了linux的基本命令,我在他们提供linux虚拟机上都有做练习,敲linux的基本命令,写简单的C语言代码,差不多也就三个礼拜。我每天都在不停的写一些简单的代码,这样一月后我基本掌握了C和linux的基本操作。 接下来我就去学习了人家的视频的培训教程,是整套的,和去参加培训没有多大的区别,这一看就是两个月,学习了ARM的基本原理,学习嵌入式系统的概念,也掌握了嵌入式的环境的一些搭建,对linux也有更深层次的理解了,明白了嵌入式应用到底是怎么做的,但是驱动我只是有一点点的了解,这个相对难一点,我想以后再慢慢啃。 这两个月,除了吃饭睡觉,我几乎都在学习。因为我知道几乎没有基础,比别人差劲,我只能坚持努力着,我不能放弃,我必要要靠自己来养活自己,必须学好这门技术,然后我就把不懂的问题总结记下来,这样慢慢积累了一段时间,我发现自己真的有点入门了。 最后的一个月,我就去看关于实践部分的内容,了解嵌入式项目具体的开发流程,需要什么样的知识,我就开始准备这方面的知识,也就是学习这方面的视频,同时他们建议我去找了找一些嵌入式面试的题目,为自己以后找工作做准备。我就到网上找了很多嵌入式的题目,把他们理解的记下来,这样差不多准备了20天左右 我觉得自己差不多入门了,会做一些简单的东西了。我就想去找工作看看,于是我就到51job疯狂的投简历,因为我学历的问题,专科没有毕业,说真的,大公司没有人会要我,所以我投的都是民营的小公司,我希望自己的努力有所回报。没有想过几天过后,就有面试了,但是第一次面试我失败了,虽然我自认为笔试很好,因为我之前做了准备,但是他们的要求比较严格,需要有一年的项目经验,所以我没有被选中。 后来陆续面试了几家公司,终于功夫不负有心人。我终于面试上的,是在闵行的一家民营的企业,公司规模比较小,我的职务是嵌入式linux应用开发,做安防产品的应用的。我想我也比较幸运,经理很看重我的努力,就决定录用我,开的工资是3500一个月,虽然我知道在上海3500只能过温饱的生活,但是我想我足够了。我至少不用每天都要靠父母养,我自己也能养活自己的。我想只要我继续努力,我工资一定会翻倍的。 把本文写出来,希望能让和我一样的没有基础的朋友有信心,其实我们没有必要自卑,我们不比别人笨,只要我们肯努力,我们一样会成功。
I. arm嵌入式系统基础教程第二版课后答案
刚开始接触嵌入式,只觉得铺天盖地的资料让我眼花缭乱,自从接触到这本书,感觉终于摸到路了。
这本书写的很好,对于一个还没入门的人来说。 原因如下:
首先,作者把最最基本的东西告诉你;其次,作者善于把复杂的东西用简单、直观的方式表现出来;再次,书中的内容是作者多年的实践经验得来,而不是把别的资料搬过来;最后,作者以实践为主要学习手段。
还有,作者的开发板也太贵了……
我会自己写完书中的例题答案,欢迎批评和建议,只求和大家共同进步,诚惶诚恐,再拜再拜……
第1章 嵌入式系统概述
(1)举出3个本书中未提到的嵌入式系统的例子。
答:键盘、鼠标、扫描仪。
(2)什么叫嵌入式系统?
答:嵌入到对象体系中的专用计算机应用系统。
(3)什么叫嵌入式处理器?嵌入式处理器分为哪几类?
答:嵌入式处理器是为完成特殊的应用而设计的特殊目的的处理器。分为3类:1.注重尺寸、能耗和价格;2.关注性能;3.关注全部4个需求——性能、尺寸、能耗和价格。
(4)什么是嵌入式操作系统?为何要使用嵌入式操作系统?
答:嵌入式操作系统是操作系统的一种类型,是在传统操作系统的基础上加入符合嵌入式系统要求的元素发展而来的。原因:1.提高了系统的可靠性;2.提高了开发效率,缩短了开发周期。3.充分发挥了32位CPU的多任务潜力。
第2章 ARM7体系结构
1.基础知识
(1)ARM7TDMI中的T、D、M、I的含义是什么?
答:T:高密度16位Thumb指令集扩展;D:支持片上调试;M:64位乘法指令;I:Embedded ICE硬件仿真功能模块。
(2)ARM7TDMI采用几级流水线?使用何种存储器编址方式?
答:3级;冯·诺依曼结构。
(3)ARM处理器模式和ARM处理器状态有何区别?
答:ARM处理器模式体现在不同寄存器的使用上;ARM处理器状态体现在不同指令的使用上。
(4)分别列举ARM的处理器模式和状态?
答:ARM的处理器模式:用户模式、系统模式、管理模式、中止模式、未定义模式、中断模式、快速模式;ARM的处理器状态:ARM状态、Thumb状态。
(5)PC和LR分别使用哪个寄存器?
答:PC:R15;LR:R14。
(6)R13寄存器的通用功能是什么?
答:堆栈指针SP。
(7)CPSR寄存器中哪些位用来定义处理器状态?
答:位31~28:N、Z、C、V,条件代码标志位;27~8:保留位;7~0:I、F、T、M4~0,控制标志位。
(8)描述一下如何禁止IRQ和FIQ的中断。
答:当控制位I置位时,IRQ中断被禁止,否则允许IRQ中断使能;当控制位F置位时,FIQ中断被禁止,否则允许FIQ中断使能。
2.存储器格式
答:无论是大端格式还是小端格式,R2的值与R1一致;地址0x4000单元的字节:大端:0x12、小端:0x78。
3.处理器异常
请描述一下ARM7TDMI产生异常的条件是什么?各种异常会使处理器进入哪种模式?进入异常时内核有何操作?各种异常的返回指令又是什么?
答:
【异常】 【模式】 【返回指令】
复位 管理 无
未定义指令 未定义 MOVS PC,R14
软件中断 管理 MOVS PC,R14
预取指中止 中止 SUBS PC,R14,#4
数据中止 中止 SUBS PC,R14,#8
IRQ 中断 SUBS PC,R14,#4
FIQ 快速中断 SUBS PC,R14,#4
进入异常时,内核自动做:PC→LR、CPSR→相应异常模式下的SPSR、设置CPSR为相应的异常模式、相应异常处理程序的中断入口向量地址→PC。
第3章 ARM7TDMI(-S)指令系统
1.基础知识
(1)ARM7TDMI(-S)有几种寻址方式?“LDR R1,[R0,#0x08]”属于哪种寻址方式?
答:有8种寻址方式:1.寄存器寻址 2.立即寻址 3.寄存器移位寻址 4.寄存器间接寻址 5.基址寻址 6.多寄存器寻址 7.堆栈寻址 8.相对寻址;“LDR R1,[R0,#0x08]”属于基址寻址。
(2)ARM指令的条件码有多少个?默认条件码是什么?
答:16个;AL。
(3)ARM指令中的第2个操作数有哪几种形式?列举5个8位图立即数。
答:1.常数表达式(8位图) 2.寄存器方式 3.寄存器移位方式;0x3FC、0、0xF0000000、200、0xF0000001。
(4)LDR/STR指令的偏移形式有哪4种?LDRB指令和LDRSB指令有何区别?
答:1.零偏移 2.前索引偏移 3.程序相对偏移 4.后索引偏移;LDRB:加载无符号字节数据,LDRSB加载有符号字节数据
(5)请指出MOV指令与LDR加载指令的区别及用途?
答:MOV指令的源操作数是常数或(带偏移量的)寄存器,用于寄存器之间的数据传送;LDR指令的源操作数是地址,用于存储器到寄存器的数据传送。
(6)CMP指令是如何执行的?写一程序,判断R1的值是否大于0x30,是则将R1减去0x30。
答:CMP指令将Rn-operand2,根据结果更新CPSR中的相应条件标志位。
CMP R1,0x30
SUBHI R1,0x30
(7)调用子程序是用B指令还是用BL指令?请写出返回子程序的指令。
答:用BL;MOV PC,R14。
(8)请指出LDR伪指令的用法。指令格式与LDR加载指令的区别是什么?
答:用法:LDR{cond} Rd,=立即数/标号+立即数;LDR伪指令的源操作数是代表一个常数,LDR加载指令的源操作数代表一个地址。
(9)ARM状态与Thumb状态的切换指令是什么?请举例说明。
答:BX;
;从ARM状态切换到Thumb状态
CODE32
LDR R0,=Lable+1
BX R0
CODE16
Lable MOV R1,#12
;从Thumb状态切换到ARM状态
CODE16
LDR R0,=Lable
BX R0
CODE32
Lable MOV R1,#10
(10)Thumb状态与ARM状态的寄存器有区别吗?Thumb指令对哪些寄存器的访问受到一定限制?
答:有区别;R8~R15。
(11)Thumb指令集的堆栈入栈、出栈指令是哪两条?
答:PUSH、POP。
(12)Thumb指令集的BL指令转移范围为何能达到±4MB?其指令编码是怎样的?
答:BL指令事实上是两条指令,其编码为:11110{地址偏移高11位}、11111{地址偏移低11位},地址编码22位,再左移一位(半字对齐),23位地址寻址8MB,即±4MB。
2.有符号和无符号加法
答:
(1)
0xFFFF000F (A)
+0x0000FFF1 (B)
——————
(0x00000000)
NZCV=0110
如果两个操作数是有符号数,A是负数,B是正数,和是0,没有溢出,所以V=0。
如果两个操作数是无符号数,和是0,有进位,所以C=1。
(2)
0x7FFFFFFF (A)
+0x02345678 (B)
——————
(0x82345677)
NZCV=1001
如果两个操作数是有符号数,A是正数,B是正数,和是负数,有溢出,所以V=1。
如果两个操作数是无符号数,没有进位,所以C=0。
(3)
67654321 (A)
+ 23110000 (B)
——————
(0x0568F421)
NZCV=0000
如果两个操作数是有符号数,A是正数,B是正数,和是正数,没有溢出,所以V=0。
如果两个操作数是无符号数,没有进位,所以C=0。
J. 想学习 嵌入式ARM开发 请各位高手推荐个学习步骤!
1、抓住51开发ARM
这几个月来我一直都爬在51的问题,自己都有一点笑自己了,用了4个月的时间,来巩固51的原理和程序,还好我自己算是走过来了,自己笨,身边的高才生又看不上51的原理,他们都比较“牛”,说51过时了,你问那个做什么???我比较郁闷!过时吗?我有一点怀疑?
他们不愿意说有他们自己的理由,没有人强求,靠自己好了。
我自己个人的观点:51是一个基础,而且还很重要,这是再我看了ARM之后感觉到的。它可以加速你的ARM学习速度,真得!不相信你试一试好了。
凡是要求一个速度、效率,不要做一些无用功,抓紧身边的每一个一分钟,人是活的,东西(知识、书)是死得,想要做的事情因此就简单了。
2、我在网上看到了一篇很不错的ARM文章,粘贴过来,为了和像我一样在很少有人帮助的情况下,自学ARM 的难兄难弟们。
“ARM 怎么入门”。我不是高手,仍然是菜鸟。
但是回想起自己当时的迷茫,特意写了这篇东西,当作给和我一样的兄弟姐妹的帮助吧。问这个问题的人多半不是已经工作的工程师,而是和我一样是学生,所以这篇笔记就把看家当成我一样的菜鸟,高手勿怪。
首先声明:本人还没有找工作,事实上处于研究生刚毕业,还没开始找工作的空闲时间,44B0只是兴趣所在,打发时间。
所有看法完全是自己的感受,不代表任何他人。错了的观点各位帮我纠正。再次补充:很多朋友看了上面的话就问我为什么研究生毕业了还不找工作:)说是打发时间,其实是因为研究生的时候带了一个项目,申请提前毕业以后项目还有块尾巴,答应导师把项目做完再走:)就这么简单。男人总点负点责,呵呵
以下问题常被问到,我就想到哪说到哪吧。
一 首先说说ARM的发展 可以用一片大好来形容,翻开各个公司的网站,招聘里面嵌入式占据了大半工程师职位。
广义的嵌入式无非几种:传统的什么 51、AVR、PIC称做嵌入式微控制器;ARM是嵌入式微处理器;DSP;FPGA。
客观的讲,工作需求量上DSP的需求比ARM 要多,而ARM和FPGA差不多。
DSP因为数字处理与通信领域的空前发展而火暴,小到MP3 射象头,大到我们军品里的控制器,应用面很广。
FPGA的兄弟一般做ANSIC(特殊芯片设计,好象是这么翻译的)。而ARM单纯说来并不比一个单片机强多少,但是它的独特就在于不断下降的价格和提升的性能。这完全依靠于ARM公司的战略,厉害!!很佩服他们的战略眼光!!
值得注意的是:在找工作中,企业(著名的,小的不算)对单纯的ARM硬件开发工程师并不比单片机重视,很少有大企业的职位里写“从事过ARM开发优先”。写的多的是什么?“嵌入式LINUX”到这相信大家看出来了吧,需要的是硬件中的软件。
二 ARM是硬件还是软件 很难说,ARM是硬件,LINUX是软件。ARM的硬件多半已经模块化了,像我这样把板子改成这样的就算动的多的了,这同样是ARM公司的战略,再次佩服。
实际中的LINUX的开发工作更多,更耗时。从这方面说ARM应该算是软件了。
在找工作中更是这样,举个例子,联想里和ARM最接近的是“BIOS工程师”是软件,MOTO里接近的是嵌入式LINUX工程师是软件。而其他很多公司把嵌入式产品开发归为硬件。所以,不要讨论这个,好好玩转自己的板子才是关键。实在不爽你就把自己叫“嵌入式开发工程师”
三 要不要买开发板 买哪家
我的答案是“在你个人的学习方法”,但是如果看家是需要看这骗笔记的水平,个人推荐还是买现成的。 1.买
买板子可以把注意力集中在软件开发上,软件开发(尤其是驱动)可以不必担心自己硬件上的问题,我就是以便调试一边写驱动和程序,每次写驱动前就要先确认硬件没问题。另外,买板子更省钱和时间,我自己做的板子,原理图PCB花了2周以上!制版又15天,回来以后焊接44B0 160个脚!那叫一个麻烦~~花了多少钱呢?2层板,制版费就300块!当然我把接口都外引了,还做了个20X18的LCD背板,板子比较大。总体下来元件+LCD屏+PCB=11XX块!够2410的了。
再有就是买的资料相对来说比较全,但是不要指望有技术支持!都是骗人的,卖你之后就不会理你。
2.做 自己做可以更了解底层硬件,可以按照自己的要求加东西,比如我就加了GPS模块、 GPRS模块、SD卡模块,扩了个IIC的35个键子的键盘、把LCD接口按照买的LCD改装了,可以用FPC线直接连接。做的很爽的。玩一把吗。
当然,你可以有策略的做,比如像我一样,把RAM和ROM,网络都保持和某现成的板子一样,这样他们的资料你就可以拿过来直接用,给自己留个退路。其他的如 SD了什么的自己做。都达到了~~就是费钱,费时间。
再有就是给做的朋友几点建议:尽量拿到现成的板子,尽量多搜集其他板子的全套资料,一定要拿到一张没问题的原理图。
网上流传的原理图多数是龚俊03年画的,再这里对龚俊表达一下我的敬意!!牛人!
但是那个图有个小BUG,我指的是03版的,后来的没这问题了。8019那地址线和地址有问题。还有人仿照他的PDF图画的SCH,更是漏洞百出!谴责!顺便谴责把龚俊板子偷卖的人。
3.买哪家
个人感觉分3类吧
1)首先是ZLG的,资料非常的全,感觉他是真正想教你怎么开发ARM,而不是像有的公司自己技术都没做好就做个板子出来卖钱。但是最大的不利就是价格太贵!而且主要是PHILIP的,货源比较麻烦~~可能有人说21XX系列的不贵啊,那是总线不外扩的,只能跑UCOS,不能跑UCLINUX。但是说是话,21XX系列才是ARM7的价格性能结合点。ARM7最适合做工业控制,ARM普及,销量都是怎么来的?都是ARM7来的,而44B0是典型的商业片子。但是,这里如果你看中的是为工作做准备,还是选能跑UCLINUX的吧。
但是仍然作为第一个推荐,因为菜鸟时期,合适的资料太重要了!!在这里被ZLG的务实精神感动!你看人家那代码写的。
2)感觉立宇泰的44B0不错
硬件没别的,就是资料比较全的说,不像有些家,原理图直接拿人家的,还错的~~
3)找个最便宜的
好象最便宜的有卖350的吧?也是没别的,就是即省了钱 还省时间搜集资料,至于资料全不全,别计较了~~硬件肯定好使就行吧。
四 要不要有51 AVR等单片机基础
有更好,但没有也无所谓。
两个月以前,我只是看别人做,耳濡目染~~,本科学过单片机,从来没做过。我们这的技术主干做AVR和51,我就跟他们调过C语言程序。你看出来了?我是个不折不扣的菜鸟吧?
但是做这个之前我特意找了ZLG的两本书,看了里面的例子和原理图,这很重要。例程里有汇编有C,都看懂了就OK,不用自己现写
五 开发都需要学习哪些软件
总结起来最主要的有以下几个吧 1 ADS调试用
确切的说是ADS+AXD。 ADS里包含AXD。原来都用SDT后来ARM公司停止对SDT支持了,改支持ADS了,还是用ADS吧。
有的人的程序发布的仍然是SDT版本的,但基本都可以找到相应ADS的,新人在这里不要发蒙。ADS是编译器,AXD是调试器。便宜成AXF以后再在ARM的RAM里调试。
2 PLASHPGM
FLASH烧写的软件。AXD在RAM里调试,掉电就没有了,方便程序修改。调试好的程序再下到FLASH里,上电直接运行。
同类的软件还有很多,什么FLUTED了、FLSHP了都是,但FLASHPGM最好,要是有人还问FLASH不支持BIN格式文件的问题就要看我写的 PLASHPGM使用了。
3 BANYANT调试代理(不知道名对不,起这么个难记的,我一般都叫它“半羊”因为知道它那几天刚吃了烤羊)
调试代理就是用它帮你使用更简单的JTAG(便宜啊)来实现原本1K才卖的JTAG仿真器的大部分功能。JTAG调试原理看我另一篇笔记。简单的就可以把他理解为你自己做的JTAG的驱动就行了。
调试代理还有很多种,什么H-JTAG了、ARM7了(不知道具体叫什么,就记得可执行文件叫 ARM7.EXE)都是,BANYANT比较好。
需要注意的是,没种调试代理安装方法虽然都简单但都不一样,需要看说明。而且AXD调试之前都要运行。省钱了,就别怕麻烦了。
4 ARM-ELF-TOOLS工具链
里面是UCLINUX开发用的工具比如ARM-ELF-GCC只类的。工具链就是把很多工具打包在一起发布的方便你开发的东西。具体安装方法看我另一篇笔记。
另外如果你开发LINUX就要用ARM-LINUX- TOOLS,不一样,不通用。
5 U-BOOT
大名鼎鼎的BOOTLOADER生成工具,同类的好象还有VIVI(名字很暧昧~~)
生成的BOOTLOADER烧到FLASH里,然后就可以用BOOTLOADER下载 烧写其他了
有了BOOTLOADER才能下UCLINUX。 BOOTLOADER就像电脑上的BIOS。当然UCOS的不用这个,用什么我不知道:)
最新版本是1.1.4 具体使用方法看我另一篇笔记吧。
6 UCLINUX包
UCLINUX的源码包,不用多说了吧?建议大家用现成的先体会一下,然后再自己编译,裁剪。因为单独 UCLINUX的编辑技术上比较简单,但涉及的方面还是比较广的。
7 VMWARE
老牌的虚拟机软件,在一个机器上虚拟出一个机器装 LINUX(PC上用的),省得你来回开关机了。记得装VMWARE-TOOLS,安装方法在我另一篇笔记里。
六 有哪些书推荐
主要推荐ZLG的三本书,有这3本再加网络就不用别的书了,其中主要推荐前2本,3是介绍体系结构的,也不错 1 ARM嵌入式LINUX系统构建与驱动开发,北航版
驱动写的很详细,前期开发介绍也很好 2 ARM 嵌入式系统实验教程(二),北航版
有ZLG2200的原理图,实验程序和注释,了解人家是怎么开发的。 3 ARM嵌入式系统基础教程
最重要的是体系结构,汇编部分介绍,看看吧,增加理论素质。 4 44B0数据手册
写在这里是强调它的重要。
不推荐ZLG早期出的红色皮的ARM什么体系结构~只类的
写的太多,看烦了。
其他的书没了几本,没看见好的,大家有看过的推荐吧。
七 选UCOS?UCLINUX?LINUX?VXWORKS?还是当单片机用
1 搞开发,工程设计,用UCOS,小巧,多进程,简单,体现了ARM7的精髓。
2 LINUX 正根的嵌入式系统,LINUX消费与通信领域用的比较多,但缺点是必须ARM9才能跑,ARM9的板子自己做就不行了,6层板太贵。买开发板1K达底吧。但是还是推荐选ARM9+LINUX
3 UCLINUX 算投机嵌入式系统:)ARM7上可以跑,由有LINUX近亲,学好好可以比较方便的转向LINUX,像我一样的穷鬼用吧,呵呵
4 VXWORKS
学好后可以找到高薪工作,但工作机会本身并不比LINUX好找。
5 当单片机用
不推荐,虽然我景仰的 ZLG一直号召这么干。因为对于学习来说多进程的系统设计才是ARM7的玩头,至少你也要整个UCOS啊:)
有朋友问我先学这个当基础不行吗?那当然可以~~但我当时就用了1周搞定,就是我先的ADS在RAM中调试的笔记。后来我清空FLASH用的小段程序还是当时写的LED闪烁程序呢。另外1周里其中还因为自己过于菜,没把OM设置好导致晶阵不阵
哈哈。这个是必须做的,但一带而过。目标放的远一点。
八 学习要用多长时间
我从菜鸟到现在两个多月,中间被打扰数次。仍然搞定了PCB设计与制版,RAM调试,FLASH下载,UBOOT移植和下载UCLINUX(没剪裁,用现成的),LCD驱动。
再次坦诚的说:我确实比较菜,说这些不是让大家羡慕,只是告诉你们“你们应该比这个更好”
我相信良好的态度+合适的方法+及时的总结=成绩
九 ARM都玩什么就几点
1 硬件设计
2 系统移植
3 驱动开发
4 应用开发
没了。其中推荐把注意力放在后两个上,3有难度,4比较灵活,最重要的是都是找工作的砝码。
十 我用的什么板子
很多人问我这个问题,我特意写过一个的。再说一次吧。
我是自己做的,RAM、ROM、8019等比较麻烦而当时的自己不理解的都按照龚俊的做的。保持其他不便的情况下做了如下改动。
1 加了串口通信的GPS模块、 GPRS模块
一个 UART0,一个UART1,当与要用超级终端时用跳线切换。
2 SD卡,和7843触摸屏
同时挂在SPI总线上,因为SPI只能挂一个设备,同时还做了I/O模拟的准备,把两个设备又通过跳线挂在4个IO上。
3 扩了个IIC的35个键子的键盘
用的ZLG的7290,不占用CPU,最大支持64个键子,只上了35个,其他留接口。
4 把LCD接口按照买的LCD改装了,可以用FPC线直接连接。
所以改动虽然多,但真正很移植了,初期调试有关的并没动,就是为了现在不那么菜的时候做准备:)
十一 开发流程
这里是我的开发流程
1 设计原理图(含WIGGLER的JTAG访真器)
2 设计PCB(含WIGGLER的JTAG访真器)
3 制版
4 焊接电压,确定电压没问题
5 焊接44B0+JTAG电路+WIGGLER的JTAG访真器+周边电路,用BANYANT+仿真器连接,BANYANT提示错误,但可以显示44B0编号,好象是0X0F0F0F0F只类的,说明44B0没问题
6 焊接晶体+RAM+ROM+周边电路,用BANYANT+仿真器连接,可以显示正确的44B0了
7 用BANYANT+仿真器连接,开AXD,在命令行窗口操作RAM,看可不可以修改,可以的话(用内存窗口看RAM地址)RAM就没问题
可以用这个命令“setmem 0xc000000,0xffffffff,32”
我的RAM挂在BANK6上 所以地址是0XC000000,你要是改了就也得改。
8 用我写的《自己写了个C工程模板又写了个使用说明 》里的方法调试程序吧,写个简单的,我当时写个LED闪烁的。看好使不。
9 把程序按照《FLASH烧写总结 》里的烧到FLASH里,测试一下
10 按照《UBOOT 移植操作》移植UBOOT
11 按照《UCLINUX下载简单说明》下个UCLINUX
12 看看驱动开发的方法,自己写个驱动看看
13 还有很多事东西着你玩 呵呵
十二 关于JTAG访真器JTAG 访真器现在用的多是简板的,一个244那种,用的没什么不好。
按照并口定义不同分几种,建议选WIFFLER定义的,因为支持的软件多。这个网上多的是,不多说了。
值得提的是有的JTAG访真器原理图上有跳线用来使能复位信号,这个一般不跳上。就是不用复位信号,因为JTAG协议里本身也可以控制44B0复位。
当然,板子上的复位信号跳线也不用跳。
十三 哪个公司的ARM
这个是问题比较简单。 1 ARM7主要就几个公司的
三星,PHILIP,ATMEL的
ATMEL的有比较便宜的AT91SAM7S32 和AT91SAM7S64 专为8位应用产品量身定做,价格很便宜好象《3刀吧。和PHILIP的21XX差不多,资料太少,项目中选还不错。
其他两家上面说了的不多说了吧
2 ARM9
这个玩2410和2440的多吧,现在2440还比较火啊 可以考虑买个了
但是 2410就比较便宜了,作为学习来说反到和不错,推荐整一个:)
其实ARM9用的最多的领域应该是消费电子,比如手机PDA,而这上面用的多的应该是INTEL的和TI的吧。
但是INTEL的TI的入门材料少,价格高,自己看情况定吧