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

    文章

    240

    浏览量

    26635
  • LED闪烁
    +关注

    关注

    0

    文章

    29

    浏览量

    9815

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    聊聊什么是嵌入式

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

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

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

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

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

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

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

    什么是嵌入式软件开发

    嵌入式软件开发又是指什么?   随着嵌入式软件系统结构越来越复杂,嵌入式软件的开发已成
    发表于 04-20 08:43 8771次阅读

    ARM嵌入式软件开发

    ARM嵌入式软件开发ARM嵌入式软件开发ARM嵌入式软件开发
    发表于 01-15 17:29 65次下载

    嵌入式软件是什么意思_嵌入式软件的分类有哪些

    本文首先阐述了嵌入式软件的概念,其次介绍了嵌入式软件的特征,最后介绍了嵌入式软件的分类。
    发表于 08-31 15:54 1.6w次阅读

    嵌入式软件的开发流程_嵌入式软件的调试

    本文首先介绍了嵌入式软件的发展,其次阐述了嵌入式软件的开发流程,最后介绍了嵌入式软件的调试。
    发表于 08-31 16:02 6271次阅读

    嵌入式软件测试参考书籍

    嵌入式软件测试的几本参考书籍:1、《嵌入式软件测试》;2、《嵌入式软件测试 方法、案例与模板详解
    发表于 10-20 12:06 51次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>测试参考书籍

    嵌入式框架-分层

    原有的代码。接下来嵌入式ARM便和大家分享一下,嵌入式架构那些事儿……01嵌入式系统的基本架构嵌入式系统一般由软件和硬件两个部分组成,基中
    发表于 10-20 16:06 24次下载
    <b class='flag-5'>嵌入式</b>框架-<b class='flag-5'>分层</b>

    嵌入式分层概括总结

    最近重新进入嵌入式领域,有必要对嵌入式分层架构有一个清晰的理解。经过多方查阅以及个人的理解,本人对嵌入式分层架构概括总结如下:比较细的层次由
    发表于 10-21 10:51 11次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>分层</b>概括总结

    嵌入式软件开发的特点、设计流程、嵌入式软件的结构

           嵌入式软件开发的特点、设计流程、嵌入式软件的结构 一:嵌入式软件开发的特点1.
    发表于 11-03 15:21 37次下载
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>开发的特点、设计流程、<b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>的结构

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

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

    嵌入式软件架构设计之程序分层

    嵌入式MCU软件开发过程中,程序分层设计也是重中之重,关系到整个软件开发过程中的协同开发,降低系统软件的复杂度(复杂问题分解)和依赖关系、
    的头像 发表于 02-15 14:41 1191次阅读
    <b class='flag-5'>嵌入式</b><b class='flag-5'>软件</b>架构设计之程序<b class='flag-5'>分层</b>