ARM嵌入式整理
填空
1指令含义
列出文件列表的ls命令
切换目录的cd命令
创建目录的mkdir命令
删除目录的rmdir命令
复制文件的cp命令
删除文件或目录的rm命令
让显示画面暂停的more命令
连接文件的cat命令
移动或更换文件,目录名称的mv命令
显示当前所在目录的pwd命令
2 做移植操作系统的三步:下载bootloader,下载内核,下载文件
3 ARM7TDMI各个字母的含义:支持32位寻址范围,并弥补了ARM6不能在低于5V电源电压下工作的不足
考点:
- 1. vi编辑器模式
命令模式(command mode)—执行命令:在该模式中,可以输入命令来执行许多种功能。控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。
输入模式(Insert mode)—输入文本:vi被运行时,通常处在命令模式下,键入以下命令 可以使vi退出命令模式,进入输入模式:I(i)、A(a)、O(o)。
末行模式(last line mode)—执行待定命令:将文件保存或退出vi,也可以设置编辑环境,如寻找字符串、列出行号……等。不过一般我们在使用时把vi简化成两个模式,就是将末行模式(last line mode)也算入命令行模式command mode)。
- 2. 判读一个数是否合法?
#immed_8r——常数表达式
该常数必须对应8位位图,即必须是一个8位的常数通过循环右移偶数位可以得到的数。
例如:
MOV R0,#1 AND R1,R2,#0x0F MOV R1,#0xC000 ;0xC000可由0x03循环右移16位得到
3. PC指令算法(考PC的值)
q 三级流水线
正常操作过程中,在执行一条指令的同时对下一条指令进行译码,并将第三条指令从存储器中取出。这三条指令之间的位置关系如下表所示:
当处理器处于ARM状态时,每条指令长为4字节,所以PC的值为正在执行的指令地址加8字节,即: PC值=当前程序执行位置+8字节
当处理器处于Thumb状态时,每条指令长为4字节,所以PC的值为正在执行的指令地址加8字节,即: PC值=当前程序执行位置+4节
PC的读取程序
0x4000 ADD PC , PC , #4 ;正在被执行的指令,将地址值PC+4写到PC 0x4004 … ;正在被译码的指令 0x4008 … ;在被取指的指令,PC=0x4008 0x400C … ;PC+4=0x400C
程序解析:假设地址0x000上的ADD指令时处理器“正在执行”的第一条指令,该指令的功能是把PC+4的值放到寄存器里,由于PC总是指向第三条指令,即0x4008就是“正在指令”的地址,从而得到地址:PC+4=0x4008+4=0x400C,于是将地址写入PC寄存器
4.7种处理器模式
5. CPSR模式位值表(P39)
6. 读取SWI立即数
在SWI异常中断处理程序中,读取SWI立即数的步骤为:首先,确定引起软件中断的SWI指令是ARM指令还是Thumb指令,这可通过对SPSR访问得到,然后,取得该SWI指令的地址,这可通过访问LR寄存器得到,最后,读出指令,分解出立即数,如下:
T_bit EQU 0x20 SWI_Handler STNFD SP!,{R0-R3,R12,LR} ;现场保护 MRS R0,SPSR;读取SPSR STMFD SP!,{R0}:保存SPSR TST R0,#T_bit LDRNEH R0,[LR,#-2];若是Thunb指令,读取指令码(16位) BICNE R0,#0XFF00:取得Thunb指令的8位立即数 LDREQ R0,[LR,#-4];若是ARM指令,读取指令码(32位) BICEQ R0,#0XFF000000;取得ARM指令的24位立即数 .... LDMFD SP!,{R0-R3,R12,PC}^;SWI异常中断返回
7. 锁相环 设置MSEL位,PSEL……………….(计算)
PLL的作用。寄存器名称与功能,频率计算方法与寄存器设置?
答:作用:由晶体振荡器输出的时钟信号,通过PLL升频,可以获得更高的系统时钟(CCLK)。PLL接受的输入时钟频率范围为10~25MHz,通过一个电流控制振荡器(CCO)倍增到10~60MHz。 寄存器:
1.PLL配置寄存器(PLLCFG):
①、MSEL[4:0]:PLL倍频器值,在PLL频率计算中其值为(M-1); ②、PSEL[1:0]:PLL分频器值,在PLL频率计算中其值为P 。 2.PLL状态寄存器(PLLSETA):
1)、MSEL[4:0]、PSEL[1:0]、PLLE、PLLC:读出反映这几个参数的设置值,写入无效
2)、PLOCK:反映PLL的锁定状态。为0时,PLL未锁定;为1时,PLL锁定到指定频率。
频率计算:回路锁定后:FOSC = FCCO / (2P × M) FCLK = FOSC × M 必须满足的条件:
FOSC范围:10MHz~25MHz; FCCLK范围:10MHz~60MHz; FCCO范围:156MHz~320MHz 计算流程:
1.选择处理器的工作频率(CCLK)-----2.选择振荡器频率(FOSC)----3.计算M值 配置MSEL位------4.计算P值配置PSEL位
根据处理器的整体要求、UART波特率的支持等因素来决定。外围器件的时钟频率可以低于处理器频率CCLK 必须为FOSC的整数倍。 M = CCLK / FOSC,取值范围1~32。写入MSEL的值为(M-1)。 选择合适的P值,使FCCO在限制范围内。P只能取1、2、4或8。写入PSEL的值为P。
锁相环(PLL)计算实例:
系统要求:FOSC=10MHz、CCLK= 60MHz 1.计算M值:M= CCLK / FOSC =6 ; 2.设置MSEL位:写入值为(M-1)=5; 3. 设置PSEL位:P=FCCO/(CCLK×2)
=(156~320)/120=1.3~2.67 所以P取整数2,PSEL写入值为2。
8.中断延迟
最大中断时延:
当FIQ使能时,最坏情况是正在执行一条装载所有寄存器的指令“LDM”(它耗时最长),同时发生了FIQ和数据中止异常,在响应FIQ中断之前要先把正在执行的指令完成,然后先进入数据中止异常,再马上跳转到FIQ异常入口,所以延迟时间包含:
Tsyncmax,请求通过同步器的最长时间。为2个处理器周期(由内核决定);
Tldm,最长的指令执行需要的时间。Tldm在零等待状态系统中的执行时间为20个周期。注意,是在零等待状态系统中。一般的基于ARM7核的芯片的存储器系统比内核速度慢,造成其不是零等待的;
Texc,数据中止入口的时间。Texc为3个周期(由内核决定);
Tfiq,FIQ入口的时间。Tfiq为2个周期(由内核决定)。
FIQ总的延迟时间=Tsyncmax +Tldm +Texc +Tfiq=27个周期
在40MHz处理器时钟时,最大延迟时间略少于0.7us。在此时间结束后,ARM7TDMI执行位于0x1C处的指令。
最大的IRQ延迟时间与之相似,但必须考虑到这样一种情况,当更高优先级的FIQ和IRQ同时申请时,IRQ要延迟到FIQ处理程序允许IRQ中断时才处理(可能需要对中断控制器进行相应的操作)。IRQ延迟时间也要相应增加。
最小中断延迟:
FIQ或IRQ的最小中断延迟是请求通过同步器的时间Tsyncmin加上Tfiq(共4个处理器周期)
简答
- 1. 配置环境变量的三种方法
修改/etc/profile文件
修改/etc/profile文件
直接在shell下设置变量
- 2. 什么是bootloader以及作用?
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。
作用如下:
初始化硬件;引导Linux;烧写Linux内核映像和文件系统
引导加载程序是系统加电后运行的第一段软件代码,BootLoader的主要运行任务就是将内核映象从硬盘上读到 RAM 中,然后跳转到内核的入口点去运行,也即开始启动操作系统。
- 3. 互斥信号量以及优先级反转问题
二值信号量可以实现对共享资源的独占式处理,所以叫做互斥信号量。互斥信号量也称为mutex,专用于资源同步。互斥信号量具有一些特性:占用一个空闲优先级,以便解决优先级反转问题。
当低优先级任务占有某个共享资源而高优先级任务又要使用时,就会发生优先级反转。内核可以先将低优先级提升到不低于哪个高优先级任务的优先级,知道低优先级的任务使用完占用的内核资源。
解决优先级反转一般要求内核支持同优先级下的多任务,也可以说能防止优先级反转的信号量就是互斥信号量,在嵌入式系统中,经常使用互斥信号量访问共享资源来实现资源同步。
- 4. 实现资源同步的三种方法:
l 使用关中断:通过调用禁止中断函数OS_ENTER_CRITICAL()和允许中断函数OS_EXIT_CRITICAL()实现的。
l 使用关调度:通过调用禁止任务调度函数OSSchedLock()和允许任务调度函数OSSchedUnlock()实现的,因为禁止调度违背了多任务的初衷,所以不建议用户使用。
l 使用信号量与互斥信号量:通过等待信号量和发送信号量实现共享资源的独享。
- 5. 代码临界区
代码的临界区也称临界区,指处理时不可分割的代码,运行这些代码不允许被打断,一旦这部分代码开始执行,则不允许任何中断打算,为确保临界区代码的执行,在进入临界区之前要关中断,而临界区代码执行完成以后要立即开中断。
- 6. “BX”与“MSR”实现状态切换的区别
“BX”指令是在程序跳转的同时进行状态切换,在程序发生跳转时候流水线会被清空,所有BX指令进行状态切换后,流水线按原来处理器状态进行取值和译码的指令会被清除,也就不会英气处理器的错误
“MSR”---写状态寄存器指令,可以直接修改PSR寄存器,通过它俩修改T位可以实现状态切换,但是不会清空流水线。
- 7. 指出生活当中有关嵌入式操作系统并解释为什么是嵌入式系统?
MP3、手机、可视电话、数码相机、网络电视、打印机
- 8. 计算机有哪几种主要的架构(区别是什么?
冯·诺依曼结构:把代码作为一种特殊的数据来操作,指令总线和数据总线及其存储区域是一致的
哈佛结构:指令总线和数据总线及其存储区域是相互独立的
程序分析
C或汇编,指出作用或者代码意思
程序设计
1 makefile三种写法
2 LED任务(行为+资源同步)、(事件、消息、信号量、邮箱等)
要求:划分任务、定义优先级、画流程图、写程序
ARM嵌入式整理的更多相关文章
- 《如何学习基于ARM嵌入式系统》笔记整理
author:Peong time:20190603 如何学习基于ARM嵌入式系统 一.嵌入式系统的概念 从硬件上讲,将外围器件,与CPU集成在一起. 从操作系统上讲,定制符合要求的系统内核 从应用上 ...
- ARM嵌入式开发板
iTOP-4412 ARM嵌入式开发板----主要特点 iTOP-4412开发平台是北京迅为电子研发设计的嵌入式开发板平台,核心板配备64位双通道2GB DDR3,16GBEMMC存储,三星原厂S5M ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/** ****************************************************************************** * @author 暴走的小 ...
- 应聘linux/ARM嵌入式开发岗位
**************************************************************** 因为发在中华英才和智联招聘没有人采我所以我 在这里发布我的个人简历希望 ...
- Holer实现外网访问ARM嵌入式Linux系统
公网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从公网也能访问内网ARM嵌入式Linux系统? 本文将介绍使用holer实现的具体步骤. 1. 准备工 ...
- 外网访问ARM嵌入式Linux系统
外网访问ARM嵌入式Linux系统 实验室里的ARM嵌入式Linux系统,只能在局域网内访问,怎样从外网也能访问ARM嵌入式Linux系统? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并 ...
- ARM嵌入式开发中的GCC内联汇编__asm__
在针对ARM体系结构的编程中,一般很难直接使用C语言产生操作协处理器的相关代码,因此使用汇编语言来实现就成为了唯一的选择.但如果完全通过汇编代码实现,又会过于复杂.难以调试.因此,C语言内嵌汇编的方式 ...
随机推荐
- 如何设置box shadow的透明度
(从已经死了一次又一次终于挂掉的百度空间人工抢救出来的,发表日期2014-04-24) 今天发现使用box-shadow属性,可以很好的给div添加阴影效果,但是添加的效果如果是: -moz-box- ...
- 关于mysql函数GROUP_CONCAT
GROUP_CONCAT()是MySQL数据库提供的一个函数,通常跟GROUP BY一起用,具体可参考MySQL官方文挡:http://dev.mysql.com/doc/refman/5.0/en/ ...
- Linux下getopt()函数的简单使用
最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴. 好了,虽然啰嗦了点,但确实是忠告.步入正题: 我们的主角----getopt()函数. 英雄不问出处,getopt()函数的 ...
- cocos2d制作动态光晕效果基础——blendFunc
转自:http://www.2cto.com/kf/201207/144191.html 最近的项目要求动态光晕的效果. 何谓动态光晕?之前不知道别人怎么称呼这个效果, 不过在我看来,“动态光晕”这个 ...
- Swift学习资源
原文: http://leancodingnow.com/swift-learning-resources/ Swift是Apple在今年的WWDC推出的一门新的编程语言,它的1.0版本跟着Xcode ...
- myeclipse、eclipse中项目复制后(可能无法访问)注意事项 .
.myEclipse 复制后修改名称,访问不到项目 这是因为,你只是改了项目的名称,而没有改 下面是解决方法: 方法 1.右击你的项目,选择“properties”,在“type filter tex ...
- MySQL 多会话之间更新数据的小实例
1:创建一个实验表 mysql> use test; mysql> CREATE TABLE t -> (id int(11) NOT NULL DEFAULT 0, -> n ...
- 约瑟夫圆环的C++实现
转载请注明出处:点我 昨天参加了企鹅的2015年实习生招聘的笔试,编程题第一道题就是约瑟夫圆环问题,要求用C++来实现. 约瑟夫圆环问题其实是一个很有名的问题:问题的描述为: 设有编号为1,2,……, ...
- Linux下安装MySQL数据库以及用C语言编程存取数据库
ubuntu下安装软件相当简单,一条简单的 apt-get install 就可以解决,相比源码安装方式唯一的缺点就是,你无法自定义软件的安装目录.不过这也不是什么太大的缺点.下面我们就用 apt-g ...
- jQuery css() 方法
$("p").css("background-color"); $("p").css("background-color" ...