0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

聊聊嵌入式软件分层

lilihe92 来源:CSDN 2023-12-28 09:22 次阅读

正文

大家好,今天以控制LED闪烁为例,聊聊嵌入式软件分层:

———————————
||
|P1.1|-----I<|--------------<|
|          |                
|     p2.1 |-------------/ ---------|--.
|          |
|          |
———————————      

1、两层结构

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

/**********************************************************************************/
#include
intmain()
{
inti=0;
while(1)
{
P1_1=0;
for(i=0;i<5000;i++);
      P1_1=1;
      for(i=0;i<5000;i++);
  }
}

2、三层结构

硬件层<--> 驱动层<-->应用层

/*******************驱动头文件driver.h***********************************************************/
voiddelay();
voidled_on();
voidled_off();
/*******************驱动源文件driver.c************************************************************/
#include
#include"driver.h"
/*延时函数*/
voiddelay()
{
inti=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
intled_init(void);
voidled_cleanup();
staticintdevice_open(structinode*,structfile*);
staticintdevice_release(structinode*,structfile*);
staticssize_tdevice_write(structfile*,constchar*,size_t,loff_t*);
intinit_model(void);
voidcleanup_module(void);
structfile_operationsled_ops={
.owner=THIS_MODULE,
..............................
}
intled_init(void)
{
..............................
}
voidled_cleanup()
{
..............................
}
staticintdevice_open(structinode*inode,structfile*file)
{
..............................
}
staticintdevice_release(structinode*inode,structfile*file)
{
..............................
}
staticssize_tdevice_write(structfile*file,constchar*buffer,size_tlength,loff_t*offset)
{
..............................
intinit_model(void)
{
..............................
}
modele_init(led_init);
module_exit(led_cleanup);
MODULE_LICENCE("GPL");
/******************************应用****************************************************/
#include
#include
#include
#include
#defineLED"/dev/led"
intmain()
{
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种方式似乎代码量是最大的,但是要记住底层是很少改的,所以开发的时候就是写应用,这个代码量有多少?!优势可见一斑!






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 嵌入式软件
    +关注

    关注

    4

    文章

    227

    浏览量

    26383
  • LED闪烁
    +关注

    关注

    0

    文章

    28

    浏览量

    9728

原文标题:简说嵌入式软件分层思想

文章出处:【微信号:最后一个bug,微信公众号:最后一个bug】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    嵌入式系统的分层及对口专业要求

    `嵌入式系统的分层及对口专业要求,嵌入式系统分为4层,硬件层、驱动层、操作系统层和应用层。硬件层比较适合于电子、通信、自动化、机电一体、信息工程类专业的人来搞。需要掌握的专业基础知识,有:单片机原理及接口技术、微机原理及接口技术
    发表于 05-07 16:39

    怎么利用分层思想进行嵌入式项目设计

    利用分层思想进行嵌入式项目设计,你试过吗?
    发表于 05-22 10:16

    嵌入式软件与非嵌入式软件的区别?

    学习笔记一:嵌入式系统课程学习储备知识:C语言+单片机(硬件的工作原理)1、嵌入式技术是什么?嵌入式软件与非嵌入式
    发表于 07-19 08:00

    嵌入式软件与非嵌入式软件的区别

    嵌入式软件与非嵌入式软件的区别嵌入式:在已有的硬件上移植(需要修改操作系统源码,安装不需要)操作系统解决软硬件耦合导致的问题。
    发表于 10-27 06:18

    嵌入式分层架构的相关资料分享

    最近重新进入嵌入式领域,有必要对嵌入式分层架构有一个清晰的理解。经过多方查阅以及个人的理解,本人对嵌入式分层架构概括总结如下:比较细的层次由
    发表于 10-28 08:42

    什么是嵌入式软件

    概述:什么是嵌入式软件?与传统软件不同,嵌入式软件需要将软件分析、设计、编码后烧录至硬件环境中才
    发表于 10-28 08:45

    嵌入式软件与非嵌入式软件的区别

    1.嵌入式技术是什么?嵌入式软件与非嵌入式软件的区别?与单片机开发的区别?
    发表于 11-08 08:22

    聊聊什么是嵌入式

    目录随便聊聊什么是嵌入式?我对嵌入式的看法单片机系统与嵌入式系统的差别PC系统与嵌入式系统的差别单片机与
    发表于 12-01 07:31

    嵌入式软件开发过程之程序代码分层

    嵌入式软件开发过程中,在程序架构的搭建完成之后,为了提高项目代码的可读性和可维护性等,应对程序代码分层
    发表于 12-21 06:13

    嵌入式软件和非嵌入式软件区别

    1.什么是嵌入式技术?嵌入式技术是以应用为中心,以计算机技术为基础的系统技术。它初起源于单片机技术,是各类数字化的电子、机电产品的核心,主要用于实现对硬件设备的控制、监视或管理等功能。2.嵌入式
    发表于 12-21 07:41

    嵌入式分层结构及分类

    1.1嵌入式系统定义1.1.1学习内容嵌入式系统原理与开发|系统概述--硬件开发-------软件程序设计--开发工具||处理器--外围硬件 操作系统--系统设计1....
    发表于 12-22 07:50

    嵌入式软件基础的四层架构分别是哪些

    嵌入式软件分层架构基本原则有哪些?嵌入式软件基础的四层架构分别是哪些?
    发表于 12-24 07:57

    嵌入式操作系统时如何分层的?各层的功能是什么?

    嵌入式操作系统时如何分层的?各层的功能是什么?
    发表于 12-27 06:44

    探讨一下嵌入式软件分层设计

    嵌入式软件分层设计嵌入式软件就是某一项目的源码文件集合,源码文件的数量,根据项目复杂程度的不同而有规模和层次的差别。就拿简单的一个芯片厂..
    发表于 02-14 07:19

    嵌入式软件分层隔离的典范是什么?

    嵌入式软件开发分层、模块化是理想状态,实际开发中因各种限制而有所取舍,但这不妨碍学习参考优秀软件架构,即使有部分思想在项目中落实,也是大有裨益的。
    的头像 发表于 01-20 11:08 785次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b><b class='flag-5'>分层</b>隔离的典范是什么?