嵌入式系统及编程经验

嵌入式系统以应用为中心,软件硬件可裁减,适应应用系统对功能,可靠性,成本,体积,功耗严格要求的专用计算机系统,广泛的存在于现在的数字设备中,比如:硬盘,网卡,鼠标,键盘,手机,集线器.....

嵌入式软件的特征:
1.和硬件紧密相关
2.软件大部分需要固化存储
3.软件代码高质量,高可靠性
4.嵌入式OS的实时性要求高

以RTOS为开发平台,可以保证程序执行的实时性,可靠性,减少开发时间,保证软件质量。

RTOS最关键的部分是实时多任务内核,基本功能包括:任务管理,定时器管理,存储器管理,资源管理,时间管理,消息管理(队列管理)

实时的含义是在规定的时限内能对事件或中断进行正确的响应,迟到就是错误。就是具有限定的响应时间,使系统具有可预测性。从实时性可分为"硬实时系统"和"软实时系统"
硬实时系统:在不满足响应时限,响应不及时或响应过早的情况下都会导致灾难性的后果
软实时系统:在不满足响应时限时,系统性能退化,但不会导致灾难性的后果

实时操作系统的重要评价指标:
(1)任务调度机制
调度策略:优先级调度策略,时间片轮转调度策略
调度方式:分可抢占,不可抢占,选择可抢占
时间片:固定,可变时间片轮转
(2)内存管理:
实模式,保护模式
(3)最小内存开销:
RTOS占用内存的大小
(4)中断禁止时间和中断延迟时间
RTOS运行在核心态和某些系统调用时,不会因为外部中断的到来而中断执行,只有回到用户态时才能够相应外部中断请求,这一过程的最大时间就是中断禁止时间
中断延迟时间是系统确认中断开始到执行中断服务程序第一条指令所需要的时间。
(5)任务切换时间
一个任务退出运行态,RTOS保存它的现场运行信息(比如堆栈和寄存器状态),插入相应队列,并根据任务调度算法选择一个任务,使之开始运行(恢复运行现场信息,如堆栈,寄存器状态等),这一过程需要的时间就是任务切换时间。

RTOS的功能
(1)任务管理:
任务是系统内核调度的基本单位,任务一般由任务控制块,程序区,数据区,堆栈区组成,堆栈一般分为系统堆栈和用户堆栈,系统堆栈是系统调用访问系统核心时用到的堆栈。
任务的驱动一般是基于消息或者事件的,任务的四种状态:运行,就续,挂起,冬眠
冬眠是指任务完成或错误等原因被清除的任务,也可以认为是系统中不存在的任务。
(2)任务间同步和通讯
主要任务间同步和通讯的机制有:消息,事件,信号量, 而部分系统还沿用邮箱机制,还有的提供了共享内存的任务间通信机制
(3)内存管理
(4)实时时钟服务
实时时钟是系统调度的基础,也是系统定时服务器的基础,实时时钟服务一般包括定时唤醒和定时事件,有的优秀的RTOS提供定时消息机制。
(5)中断管理服务

优先级倒置发生的条件和解决
高优先级任务H和低优先级任务L,共享一块内存Y,通过信号量S来进行互斥访问,任务M优先级介于H与L之间
(1)L取得S的所有权(执行P操作),并且还没有执行V操作
(2)此时属于H的一个中断事件发生,RTOS核心通过系统调度,将L切换下去,将H置为运行态
(3)H开始执行,需要访问内存Y,对S执行P操作,因为信号量S还没有恢复,H阻塞在信号量S上
(4)L重新取得控制权,恢复执行
(5)此时属于中优先级M的一个中断事件发生,因为M优先级高于L,所以RTOS核心将L切换下去,M取得CPU的执行权,此时优先级比H低的M可以跳过H直接执行,而H为了等待L所拥有的信号量S,反而无法在M之前执行

抢占式RTOS如何避免优先级倒置呢?
(1)利用非抢占的低级服务函数来支持高级的抢占式的服务函数
(2)采用"优先级继承"技术
在前面的情况中当H阻塞在信号量S上,L重新取得控制权时,L通过S暂时继承H的优先级,L对S进行V操作时,通过RTOS调度核心恢复L到原来的优先级,然后H恢复执行。

---------------------------------------------------------------------------------
关于vxWorks的开发经验:
1.vxWorks通过BSP(板级支持包)来提供对各种不同硬件的支持。这是一段启动代码,和BIOS的地位差不多,主要任务是设置临时栈指针,初始化设备寄存器(比如控制I/O口的寄存器),然后跳到实时操作系统内核入口。
2.开发环境
系统板网口与PC机网口连接,串口与PC机串口连接。可通过PC上的"超级终端"显示与系统板交互的内容
在一块系统板上有三块ROM:
一块是一级Bootrom,其中有BSP。
第二块是二级Bootrom,其中有加载和更新应用ROM中程序的代码
第三块ROM中是应用程序和OS(VxWorks),其中包括协议栈和其他的应用程序
Bootrom中的启动代码启动过程:
(1)从一级Bootrom中的BSP初始化临时栈指针和寄存器
(2)初始化网口和串口
(3)向串口发出命令,询问是否需要更新二级Bootrom中的程序
(4)如果PC上的输入是需要更新,则通过网口ftp从pc上的ftp服务器加载二级bootrom程序,并写入二级bootrom中,然后重新启动,返回(1)
(5)如果PC上无输入(输入等待超时)或指定不更新,则加载二级bootrom中的程序,跳转到二级bootrom的执行
(6)二级bootrom的程序向串口发命令,询问是否需要更新应用ROM中的程序
(7)如果PC上的输入是需要更新,则通过网口与PC上的应用连接,加载应用程序和OS到内存,并写入应用ROM中,然后程序跳转到OS的内核入口
(8)如果PC上无输入(输入等待超时)或指定不更新,则加载应用ROM中的程序到内存,然后程序跳转到OS的内核入口

嵌入式处理器分类
(1)嵌入式微处理器
基础是通用计算机上的CPU,在应用中,微处理器装配在专门设计的电路板上,只保留和嵌入式应用有关的母板功能
(2)嵌入式微控制器
又称单片机,就是将整个计算机系统集成到一块芯片中,芯片内部集成ROM/EPROM, RAM,总线,总线逻辑,定时/计数器,I/O,串行口,甚至A/D, D/A等。
(3)嵌入式DSP处理器
适合于执行DSP算法,在数字滤波,谱分析等方面应用
DSP应用正从在单片机上以指令实现DSP功能,过渡到采用嵌入式DSP处理器。
(4)嵌入式片上系统(System On Chip)
将通用处理器内核和许多其它嵌入式系统外设一样,作为设计中的标准器件来进行系统设计。设计和制造出来的嵌入式系统大部分均可集成到一块和几块芯片中。应用系统电路板会很简洁,对减小功耗和体积,提高可靠性非常有利

3.习惯于windows编程的程序员需要注意的问题
(1)堆栈(stack)
VxWorks的任务堆栈较小(大概只有几十个k),传参数时如果有较大的结构,应该传指针。
如果函数内部需要占用内存较多的临时变量,应该在堆(heap)上分配,并记住释放。否则很容易导致堆栈溢出!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值