用点亮LED举例,说明嵌入式软件分层设计的思想

发布时间:2024-02-29  

“开发,点灯一路发” —— 今天我们就以控制闪烁为例,来聊聊分层。

本文引用地址:
———————————           
|          |
|     P1.1 |-----I<|--------------<|
|          |                
|     P2.1 |-------------/ ---------|--.
|          |
|          |
———————————      

1. 两层结构

硬件层<-->层--最粗糙的分层架构

/*****************************/
#include 
int main(){
  int i=0;
  while(1)
   {
      P1_1=0;
      for(i=0;i<5000;i++);
      P1_1=1;
      for(i=0;i<5000;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;i<5000;i++);
}
void led_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   "/dev/led"
int main(){
    File *fp=fopen(,RDWR);
    if(!fp){
      while(1){
        ioctl(fp,1);
        sleep(1);
        ioctl(fp,0);
        sleep(0);
     }
  }
   fclose(fp);
}

从上面的例子可以看出,层次越多,似乎系统的代码越多,开发者的工作量也就越大。实际情况是真的如此吗?其实分层的目的主要:

1. 是降低系统开发难度;

2. 是为了复用,解耦,层次分明。

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

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

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

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

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

文章来源于:电子产品世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    程师和农业技术人员提供方便浏览的资源库,重点关注农业领域的动态发展和技术。从机器人解决方案到嵌入式系统,贸泽内容全面的智慧农业资源中心让用户能够接触到众多创新产品和解决方案,进一步推动农业走向未来。贸泽提供丰富多样的文章、博客、产品......
    瑞萨电子携多款先进解决方案亮相2023上海国际嵌入式展; 全球半导体解决方案供应商瑞萨电子(TSE:6723)今日宣布,将携多款面向汽车电子、工业、物联......
    瑞萨电子携多款先进解决方案亮相2023上海国际嵌入式展; 全球半导体解决方案供应商瑞萨电子(TSE:6723)今日宣布,将携多款面向汽车电子、工业、物联......
    Series® 2835 LED,专门针对极为重视高光效和光滑外观的低密度照明应用进行了优化。2835 LED是筒灯、嵌入式天花板灯、一般灯具和面板灯的理想之选。 •Analog Devices......
    程师和农业技术人员提供方便浏览的资源库,重点关注农业领域的动态发展和技术。从机器人解决方案到嵌入式系统,贸泽内容全面的智慧农业资源中心让用户能够接触到众多创新产品和解决方案,进一步推动农业走向未来。贸泽提供丰富多样的文章、博客......
    法半导体的新一代LED阵列驱动器,新增一系列完全可设置的创新功能,同时保留原来的24针标准封装,在实际应用中只需一个外部电阻,从而可大幅降低组件成本,提高系统设计的灵活性。 新的嵌入式功能让系统设计变得更加灵活,为用......
    法半导体的新一代LED阵列驱动器,新增一系列完全可设置的创新功能,同时保留原来的24针标准封装,在实际应用中只需一个外部电阻,从而可大幅降低组件成本,提高系统设计的灵活性。 新的嵌入式功能让系统设计变得更加灵活,为用......
    央视曝光:雷士照明、三雄极光等灯具上黑榜!危害其他家电;近期,上海市质监局对嵌入式灯具产品质量进行抽查。不合格产品5批次。其中,雷士照明、三雄极光等大品牌灯具榜上有名。 据央视财经报道,不合格品牌灯具......
    关注农业领域的动态发展和技术。从机器人解决方案到嵌入式系统,贸泽内容全面的智慧农业资源中心让用户能够接触到众多创新产品和解决方案,进一步推动农业走向未来。贸泽提供丰富多样的文章、博客、产品资料、电子书等,带您......
    关注农业领域的动态发展和技术。从机器人解决方案到嵌入式系统,贸泽内容全面的智慧农业资源中心让用户能够接触到众多创新产品和解决方案,进一步推动农业走向未来。贸泽提供丰富多样的文章、博客、产品资料、电子书等,带您......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>