嵌入式系统设计的最后知识点总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“嵌入式系统设计知识点”。
系统概念
1、嵌入式系统的定义?
以应用为中心、以计算机技术为基础、软硬件可裁剪、适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。“嵌入”、“专用”、“计算机”
2、嵌入式系统的软、硬件组成?以及主要特点?
软件:从底层到上层:bootloader等系统初始化引导程序、设备驱动层(包括驱动程序、板级支持包BSP等)、操作系统、用户应用程序。(底层为上层提供服务)开发软件:即集成开发环境(asemmbler&&compiler&&linker&&debugger&&loader)硬件组成:核心板+外围板+外设(核心板:微控制器(CPU和外设接口、外设控制器)、电源、时钟、复位、SDRAM、flash。外围板面向外围设备,一般是引脚的集合、电平转换电路。外围设备。),当然也可以将核心板和外围板放在一起。
硬件特点:通常由嵌入式处理器和嵌入式外围设备组成,高度集成,常采用SOC设计方法,对功耗、体积等有严格要求,定制性决定了它的可裁剪性,没有像计算机领域的垄断,解决方案不唯一。
软件特点:采用交叉开发方式,系统软件层次分明,操作系统为用户程序提供标准API,提供图形接口和文件系统。用户调用系统服务,系统调用设备驱动从而操纵硬件。
3、嵌入式系统产品设计的基本流程?
需求分析
功能性需求是系统的基本功能,如输入输出信号、操作方式等;
非功能性需求包括系统性能、成本、功耗、体积、重量等因素。规格说明
精确地反映客户的需求并且作为设计时必须明确遵循的要求。体系结构设计
描述系统如何实现所述的功能和非功能需求,包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型等。
软硬件设计
基于体系结构,对系统的软件、硬件进行详细设计。系统集成把系统的软件、硬件和执行装置集成在一起,进行调试,发现并改进单元设计过程中的错误。系统测试
对设计好的系统进行测试,看其是否满足规格说明书中给定的功能要求。
4、处理器及操作系统的选型主要考虑哪些方面?
① 操作系统本身所提供的开发工具。② 操作系统向硬件接口移植难度。
③ 操作系统的内存要求。④ 开发人员是否熟悉此操作系统及其提供的系统API。⑤ 操作系统是否提供硬件的驱动程序,如网卡驱动程序等。⑥ 操作系统的是否具有可剪裁性。⑦ 操作系统是否具有实时性能。
5、交叉开发、交叉开发环境?为何需要交叉开发环境? 在一台通用计算机(宿主机)上进行软件的编辑编译,然后下载到嵌入式设备(目标机)中运行调试的开发方式
交叉开发环境一般由运行于宿主机上的交叉开发软件(aembler&&compiler&&linker&&debugger&&loader)、宿主机到目标机的调试通道组成 需要交叉开发环境是因为目标机一般对体积、功耗等有严格限制,资源也面向应用,较为紧张,要求仅仅能流畅运行代码即可,而将用户开发软件(包括各种库、工具)放置在主机上,而且现在的集成开发环境提供了各种修改好的功能库,用起来也方便。
6、嵌入式集成开发环境的主要功能?
这是由其组成决定的。Aembler将.c源代码汇编,compiler形成目标文件,linker根据链接描述文件将各个目标代码链接定位生成可执行代码。Debugger有些交叉开发工具提供了仿真调试通道。Loader可以将目标文件烧录进设备中(有时需要内部引导代码的配合)
7、嵌入式Linux 开发主要流程?
搭建开发环境--烧写bootloader--烧写内核--烧写根文件系统--烧写应用程序。
开发环境:REDHAT-LINUX、下载相应的GCC 交叉编译器进行安装、配置开发主机(配置MINICOM和配置网络,MINICOM 软件的作用是作为调试嵌入式开发板信息输出的监视器和键盘输入的工具,配置网络主要是配置IP地址、NFS 网络文件系统,需要关闭防火墙)
烧写bootloader 下载一些公开源代码的BOOTLOADER根据自己具体芯片进行移植修改。下载时,有些芯片没有内置引导装载程序,比如三星的ARM7、ARM9 系列芯片,这样就需要编写烧写开发板上flash 的烧写程序。
或者网络上有免费下载的WINDOWS 下通过JTAG 并口简易仿真器烧写ARM 外围flash 芯片的程序。也有LINUX 下公开源代码的J-FLASH 程序。
下载内核
如果有专门针对你所使用的CPU 移植好的LINUX 操作系统那是再好不过,下载后再添加自己的特定硬件的驱动程序,进行调试修改。下载根文件系统
从www.daodoc.complete...*/
OSIntExitY
= OSUnMapTbl[OSRdyGrp];
/*...and not locked.*/
OSPrioHighRdy
=
(INT8U)((OSIntExitY
3)
+ OSUnMapTbl[OSRdyTbl[OSIntExitY]]);
if(OSPrioHighRdy!= OSPrioCur){
/* No Ctx Sw if current task is highest rdy
*/
OSTCBHighRdy = OSTCBPrioTbl[OSPrioHighRdy];//找就绪态的最高优先级,并找到相应TCB。
OSCtxIntCtr++;
/* Keep track of the number of context switches */
OSIntCtxSw();
//调用中断级的任务调度函数
/* Perform interrupt level context switch
*/
}
}
OS_EXIT_CRITICAL();}
中断级任务切换函数
执行出栈指令之后还用中断返回指令?没有包含关系?模式(代码分析)?
OSIntCtxSw;post FIQ Context switcher.This is called from OSIntExit when a hooked ISR;wants to return in the context of another task.We load the new tasks context;(from OSPrioHighRdy)and do the return from interrupt.;;Get pointer to stack where ISR_FiqHandler saved interrupted context
;ISR entry only saves
找到异常模式堆栈,它只保存了.first seven regs and LR
#16?
add
r7, sp, #16
;save pointer to register file(point to r0)LDR
sp, =IRQStack;FIQ_STACK;test to del it意义?
;Change ARM CPU to SVC mode for stack operations.将CPU切换至管理模式,以操作不同模式的堆栈。
;This gets the CPU off the interrupt stack and back to the
;interrupted task's stack, which is the one we want to alter.;mrs
r1, SPSR
;get suspended PSR orr
r1, r1, #0xC0
;disable IRQ, FIQ.msr
CPSR_cxsf, r1
;switch mode(shold be SVC_MODE)
;PSR, SP, LR regs are now restored to the interrupted SVC_MODE.;now set up the task's stack frame as OS_TASK_SW does...将进入IRQ异常的时候保存的上下文,从IRQ栈中赋值到SVC栈中
ldr
r0, [r7, #52]
;get IRQ's LR(tasks PC)from IRQ stack
sub
r0, r0, #4
;Actual PC addre is(saved_LR-4)STMFD
sp!, {r0}
;save task PC放入管理模式栈中 STMFD
sp!, {lr}
;save LR
mov
lr, r7
;save FIQ stack ptr in LR(going to nuke r7)
ldmfd
lr!, {r0-r12}
;get saved registers from FIQ stack STMFD
sp!, {r0-r12}
;save registers on task stack
;save PSR and PSR for task on task's stack MRS
r4, CPSR
;OSPrioCur = OSPrioHighRdy
// change the current proce LDR
r4, addr_OSPrioCur LDR
r5, addr_OSPrioHighRdy bic
r4, r4, #0xC0;leave interrupt bits in enabled mode STMFD
sp!, {r4} MRS
r4, SPSR STMFD
sp!, {r4}
;save task's current PSR;SPSR too
LDRB
r6, [r5] STRB
r6, [r4]
;Get preempted tasks's TCB LDR
r4, addr_OSTCBCur LDR
r5, [r4]
;store sp in preempted tasks's TCB STR
sp, [r5]
;Get new task TCB addre LDR LDR LDR
r6, addr_OSTCBHighRdy
r6, [r6]
sp, [r6]
;get new task's stack pointer;OSTCBCur = OSTCBHighRdy STR r6, [r4]
;set new current task TCB addre
LDMFD sp!, {r4} MSR
SPSR, r4 LDMFD sp!, {r4} BIC
r4,r4,#0xC0;we must exit to new task with ints enabled MSR
CPSR, r4
LDMFD
sp!, {r0-r12, lr, pc}
时钟节拍中断服务子程序
Void OSTickISR(void){
保存处理器寄存器的值;
调用OSIntEnter(),或是将OSIntNesting加1
if(OSIntNesting==1){
OSTCBCur->OSTCBStkPtr=SP;
}
调用OSTimeTick();
功能根据链表遍历每个TCB,将非零的延时值--,有减到零,若非suspend状态,则置就绪位。
清发出中断设备的中断;
重新允许中断(可选用)
调用OSIntExit();
恢复处理器寄存器的值;
执行中断返回指令;
} 中断节拍函数 void OSTimeTick(void){
OS_TCB *ptcb;
OSTimeTickHook();
/*OS_CFG中#define OS_CPU_HOOKS_EN
1*/
ptcb = OSTCBList;
(2)
while(ptcb->OSTCBPrio!= OS_IDLE_PRIO){
(3)
OS_ENTER_CRITICAL();
if(ptcb->OSTCBDly!= 0){
if(--ptcb->OSTCBDly == 0){
if(!(ptcb->OSTCBStat & OS_STAT_SUSPEND)){
(4)/ SUSPEND,则不能就绪,OSRdyGrp
|= ptcb->OSTCBBitY;
(5)
否则就绪到
OSRdyTbl[ptcb->OSTCBY] |= ptcb->OSTCBBitX;
} else {
ptcb->OSTCBDly = 1;
}
}
}
ptcb = ptcb->OSTCBNext;
OS_EXIT_CRITICAL();
}
OS_ENTER_CRITICAL();
(6)
OSTime++;
(7)累加从开机以来的时间,用的是一个无符号32位变量
OS_EXIT_CRITICAL();}
任务控制块初始化函数OS_TCBInit()在创建任务时调用,它获得TCB控制块并对其进行初始化,并让对应任务就绪,完成任务创建的大部分任务。
Delay()和节拍中断的对应关系
Delay函数是自行挂起,等待延时时间到的函数,它的功能就设置TCB中的延时值,清除自己的就绪位。而在每个节拍中断处理函数中,会将延时值--。减到零时重新就绪。并在中断退出时进行任务切换,有可能再次得到CPU的运行权。
若
是
嵌入式系统的定义及特点定义:嵌入式系统是以应用为中心、以计算机技术为基础,软、硬件可裁剪,适应于应用系统对功能、可靠性、成本、体积、功耗等方面有特殊要求的专用计算机系......
刀豆文库小编为你整合推荐5篇嵌入式知识点总结,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......
嵌入式知识点总结总结是社会团体、企业单位和个人在自身的某一时期、某一项目或某些工作告一段落或者全部完成后进行回顾检查、分析评价,从而肯定成绩,得到经验,找出差距,以下是......
1、嵌入式系统的特点:(1).嵌入式系统的个性化很强,软件系统和硬件在不同的应用中均有差异; (2).由通用计算机系统发展而来,根据应用对软硬件进行裁剪; (3).高的可靠性,强的实用性;(......
接VIC部分一旦产生IRQ中断,微控制器切换到IRQ模式,并跳转到向量表0x0018地址执行指令。一旦产生FIQ中断,微控制器切换到FIQ模式,并跳转到向量表0x001C地址执行指令,然后跳转到FIQ......