良许Linux教程网 干货合集 简说嵌入式软件分层思想

简说嵌入式软件分层思想

大家好!在当今高科技的世界里,嵌入式系统已经渗透到我们生活的方方面面,从智能家居到航天器械,它们的重要性不言而喻。今日,我们将以一个简单而经典的案例——LED灯的控制作为切入点,深入探讨嵌入式软件分层的概念与实践。

———————————           
|          |
|     P1.1 |-----I

1、两层结构

硬件层软件层–最粗糙的分层架构

/**********************************************************************************/
#include 
int main()
{
  int i=0;
  while(1)
   {
      P1_1=0;
      for(i=0;ifor(i=0;i

2、三层结构

硬件层 驱动层应用层

/*******************驱动头文件 driver.h***********************************************************/
void delay();
void led_on();
void led_off();
/*******************驱动源文件 driver.c************************************************************/
#include 
#include"driver.h"
/*延时函数*/
void delay()
{
   int i=0;
   for(i=0;iled_on()
{
   P1_1=0;
}
void led_off()
{
   P1_1=1;
}
/******************应用系统****************************************************************/
#include“../driver/driver.h”
int main()
{
  while(1)
   { 
       led_on();
       delay();
       led_off();
       delay();
  }
}

3、四层结构

硬件层驱动层操作系统层应用层

/******************************驱动****************************************************/
#include
#include
#include
#include
#include
#include
#include
#include
int led_init(void);
void led_cleanup();
static int device_open(struct inode *,struct file*);
static int device_release(struct inode *,struct file*);
static ssize_t device _write(struct file*,const char *,size_t,loff_t *);
int init_model(void);
void cleanup_module(void);
struct file_operations led_ops={
.owner=THIS_MODULE,
..............................
}
int led_init(void)
{
..............................
}
void led_cleanup()
{
..............................
}
static int device_open(struct inode * inode ,struct file* file)
{
..............................
}
static int device_release(struct inode *inode,struct file* file)
{
..............................
}
static ssize_t device _write(struct file *file,const char * buffer,size_t length,loff_t *offset)
{
..............................
int init_model(void)
{
..............................
}
modele_init(led_init);
module_exit(led_cleanup);
MODULE_LICENCE("GPL");
/******************************应用****************************************************/
#include 
#include 
#include 
#include
#define LED  "/dev/led"
int main()
{
    File *fp=fopen(LED,RDWR);
    if(!fp){
      while(1){
        ioctl(fp,1);
        sleep(1);
        ioctl(fp,0);
        sleep(0);
     }
  }
   fclose(fp);
}

从上面的例子可以看出,层次越多,好像系统的代码越多,开发者的工作量越大。实际情况是真的如此吗?其实分层的目的主要1是降低系统开发难度;2是为了复用。

驱动层和中间的操作系统层是可以复用的,产品升级或更新换代的时候,虽然总的代码量是大的,但实际有很多代码是不需要重新开发的,系统开发的工作量相对较小。比如说IO口调整了,甚至是整个硬件板子更换了,软件上只要调整驱动即可。

很多大学的嵌入式系统课程中采用的是两层结构,主要的原因是教材中的示例一般比较简单,其主要目的是为了演示如何使用芯片,如何实现某个功能,很少考虑复用的问题。

为了讲清楚其中的操作方法,其代码会尽量简单,即使是实现相对比较复杂的功能可能也只是采用抽象为函数的方法,很少考虑工程的问题,在潜移默化中很多人就以为两层架构就是理所当然的。

具体采用何种分层结构是与产品相关的。比如大家都知道坐飞机是比步行快得,在校园里从上课的教室到休息的宿舍哪一种方式好呢?当然是步行。反之,从南京到北京,采用坐飞机肯定要比步行好(当然,更好的是坐高铁)。

第3种方式似乎代码量是最大的,但是要记住底层是很少改的,所以开发的时候就是写应用,这个代码量有多少?!优势可见一斑!

以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !

137e00002230ad9f26e78-265x300
本文由 良许Linux教程网 发布,可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。
良许

作者: 良许

良许,世界500强企业Linux开发工程师,公众号【良许Linux】的作者,全网拥有超30W粉丝。个人标签:创业者,CSDN学院讲师,副业达人,流量玩家,摄影爱好者。
上一篇
下一篇

发表评论

联系我们

联系我们

公众号:良许Linux

在线咨询: QQ交谈

邮箱: yychuyu@163.com

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

微信扫一扫关注我们

关注微博
返回顶部