您的位置 首页 传感器

面向设备编程-嵌入式微体系连载之六

System结构体封装了整个系统层,让App很容易基于System跨平台,那么System内部该如何组织? ARM公司推荐嵌入式开发遵循CMSIS架构,用户应用程序可以调用

  System结构体封装了整个体系层,让App很简单根据System跨渠道,那么System内部该怎么安排?

  

 

  ARM公司引荐嵌入式开发遵从CMSIS架构,用户使用程序能够调用实时内核(OS)、中间件等,也能够直接调用底层硬件根据CMSIS标准的函数接口,比方ST公司发布的STM32的硬件驱动LIB库,乃至直接拜访最底层的寄存器。这种架构编程比较灵敏,关于规划不大的嵌入式体系比较合适,但这样的一个架构分层还比较含糊,使用层简直能够拜访一切的体系层资源,比较恣意。各种底层接口没有封装,规划一大很简单引起重名、彼此调用,若替换处理器芯片,整个体系层都要从头规划,不便于移植。为了处理这些问题,需求引进新的概念:设备,根据设备把底层的硬件驱动函数按功用封装起来,这样能够把体系层内部理清、分层次、模块化、可移植。

  

 

  设备这个词,咱们是常常触摸的,咱们知道PC机的组成,便是由中央处理器、内存、硬盘、主板、电源、显示器等几样组成,这是物理上讲的,若从Windows操作体系视点看,咱们能够看Windows的设备办理器。一台PC机在Windows XP的眼中由DVD驱动器、IDE控制器、处理器、磁盘驱动器、电池等等组成,每一个设备里边又细分为许多小设备。所以设备是Windows XP办理的根本目标。

  

 

  在VS.Net架构的C#编程视点看,体系层System由各种功用子类组成,子类下面又分子类。使用层开发程序,便是面向System各品种开发即可,所以类是C#编程的根底单元。

  不管设备仍是类,它们都是表征一组具有相对完好功用的调集。比方一个人,由头、四肢、五脏六腑组成,这些部件都是相对完好的功用集,而头呢,又由大脑、眼睛、鼻子、耳朵等组成,它们的功用也是相对完好的。相关于类这个概念来说,嵌入式人员更简单接受设备这个名词,由于有许多实践的对应物存在,比方LCD、按键、存储器、串口、ADC、定时器、IO等等,都是详细的一个设备,它们有十分明晰的功用界说,根本上各个项目都需求这些设备组合起来完结,仅仅不同的项目或许触及的设备品种不同算了,但根本上脱离不了这么几种。所以咱们能够以为一个体系层System便是由不同的设备组成的,体系层内的中间件也是由设备来支撑的,而设备则需求编写设备驱动代码,需求调用各种硬件驱动接口函数来完结,比方ST公司发布的STM32硬件驱动库来完结。

  

 

  中低端嵌入式编程,由于资源比较严重,为了节约资源,代码编写比较紧凑,所以长期以来使用层与体系底层是分不清的,这就导致常常一个人既要懂上层使用,又要懂底层驱动,对开发者的要求较高,这也增加了项目的开发难度。而现在高性能嵌入式芯片的呈现,能够不再被资源束缚,所以引进设备概念,让嵌入式编程真实意义上处理了一人打天下的为难局势,关于使用层开发人员来说,他们尽管不明白底层硬件驱动,但能够很简单了解设备这个功用接口,轻松完结项目需求,而关于底层驱动人员来说,一个个明晰独立的设备,更有助于自己明晰的编写底层驱动,合适多人帮忙开发。所以msOS,能够以为是面向设备开发的架构。

  每一个设备,都有一个对应的结构体封装,由于中低端嵌入式体系规划不大,为了便利使用检查,所以直接封装在System的Device里边。

  

 

  只要在System的Device中的根底设备才能够被使用层拜访、调用,而设备内的其它函数,都需求界说为Static类型,避免被外部调用。

  一个设备驱动的代码编写一般的讲要分为五部分,以LCD设备为例:

  1、 树立一个按键设备文件device_lcd.c。

  2、 在device_lcd.c中编写lcd设备驱动代码,除了外部接口函数之外,其它的都需求界说为Static类型的静态函数,避免被外部函数调用。

  3、 在SystemStruct的Device中增加Lcd设备结构体,内部包括接口函数指针。

  4、 在Lcd设备初始化函数InitializeLcd中把Lcd设备的接口函数指针与Lcd设备的接口函数相关起来:System.Device.Lcd.DisplayString = LcdDisplayString;

  5、 有些需求根据体系节拍作业的设备,比方按键、定时器设备,需求由体系节拍供给体系节拍服务程序:KeySystick100Service();TimerSystick1000Service();

  引进设备概念,把体系层分为一个个相对独立的模块,内部的函数都经过Static封装了,仅仅保留了设备接口与外界联络,这样大大简化了体系的复杂度,调度愈加明晰,能够支撑项目做的更大更强。封装之后的设备功用相对完好,独立性强,那么它是怎么作业的呢?有必要要有一套支撑设备作业的标准。

  1、 设备一般分为两类,一类不需求体系节拍支撑它作业的,比方Lcd、IO等设备,它们由上层函数直接调用接口即可。还有一类需求由体系节拍设备支撑其作业的,比方按键和定时器设备,按键是根据每秒100次的按键扫描获取按键值,定时器是根据每秒1000次的体系节拍完结多路虚拟定时器。所以这一类设备,需求由体系节拍设备供给支撑,它们的作业根据体系节拍之上作业,体系节拍设备是它们作业的根底。device_systick.c是体系节拍设备,它是相对比较特别的根底设备。

  2、 调用方法分为三种:上层与基层能够直接调用,基层对上层供给了两种方法,一是使用OS的音讯机制完结信息上传,二是选用注册机制,完结相似处理器中止的方法,给上层供给信息。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/chuanganqi/117917.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部