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

一起学嵌入式 2024-02-22 08:08

扫描关注一起学嵌入式,一起学习,一起成长

“嵌入式开发,点灯一路发”

那今天我们就以控制LED闪烁为例,来聊聊嵌入式软件分层:

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

原文:https://blog.csdn.net/wxg_wuchujie88/article/details/85992064

文章来源于网络,版权归原作者所有,如有侵权,请联系删除。



关注【一起学嵌入式】,回复加群进技术交流群。



觉得文章不错,点击“分享”、“”、“在看” 呗!

一起学嵌入式 公众号【一起学嵌入式】,RTOS、Linux编程、C/C++,以及经验分享、行业资讯、物联网等技术知
评论 (0)
  • 艾瑞泽5的网关接口数据交换通常涉及车辆内部电子设备之间的信息传输,包括车身系统、娱乐系统、远程控制、车辆状态监控、CAN数据采集分析、整车DBC控制策略等信息。艾瑞泽5作为一款采用CAN协议的汽车,其CAN通信的开发可以提高车辆的安全性、可靠性和实时性。CAN协议是一种用于汽车内部通信的网络协议,它允许车辆内不同设备之间进行数据交换,从而为驾驶员提供更好的驾驶体验。 速锐得开发艾瑞泽5 CAN通信总结了一些关键点:作为驾校、公务用车管理、数据采集项目上,客户和技师都必须了解CAN协议:
    lauguo2013 2024-04-22 10:55 323浏览
  • 科技云报道原创。在最新的存储市场动态中,存储芯片大厂的减产策略显现出其效果,特别是在DDR内存领域。根据台湾工商时报的最新报道,第四季度的内存芯片合约价格出现了超出预期的上涨。这一价格变动尤其在DDR5芯片上表现突出,其价格上涨幅度达到了15-20%,而DDR4和DDR3的涨幅分别为10-15%和10%。这些数字远高于原先预估的5-10%的涨幅。在这背后是三星、SK海力士等国际存储器大厂的减产行动,以及美光计划持续减产至2024年。业界普遍预期,在供给减少的同时,人工智能、服务器等领域的需求增长
    科技云报到 2024-04-22 17:13 268浏览
  • STC89C52RC比普通89C52多了后缀“RC”,虽然它们都是单片机芯片,但是带有“RC”字样的单片机自带RC时钟振荡电路(有的频率可调有的频率不可调),可以在不接外部晶振就能使用,没有带“RC”这个字样的芯片一般必须安装外部晶振电路。STC89C52RC是宏晶公司的增强型MCS-51单片机,与Atmel公司的AT89C52相比,有以下优点:支持STC的2线制下载方式,下载程序更方便;支持6T模式(在6T模式下,6个时钟周期就是一个机器周期);片内集成了4kB容量的E²PROM;带有P4口,
    丙丁先生 2024-04-23 10:39 28浏览
  • 科技云报道原创。超融合作为一种云时代的IT基础架构,诞生已有十余年,如今已是一种非常成熟且主流的应用。多年的技术发展和市场需求的快速增长,让超融合成了一个非常“卷”的市场,云服务商、HCI创业公司、综合IT供应商,甚至运营商、安全公司等跨界供应商都广泛参与其中。如此“卷”的中国超融合市场,给行业用户们带来的变化是非常明显的:一方面,超融合“计算存储网络资源池”的概念已烂熟于心,市场接受度逐步达到顶峰;另一方面,超融合产品同质化严重,在选型时容易陷入“乱花渐欲迷人眼”。但值得注意的是,在云原生、A
    科技云报到 2024-04-22 18:06 62浏览
  • DIP(Dual In-line Package)封装是一种经典的集成电路封装形式,特点是两排平行的引脚沿封装体的长边伸出。引脚通常是通过穿孔安装在印刷电路板(PCB)上,并通过焊接固定。DIP封装在电子行业中已有多年历史,尽管表面贴装技术(SMT)的发展使得其使用率有所下降,但在某些应用中仍然广受欢迎,特别是在教育、原型制作、小批量生产和爱好者市场中。DIP封装简介:结构:DIP封装的引脚沿着长方体封装的两长边排列,通常对称分布,形成两行。引脚的间距(引脚间距)通常为0.1英寸(2.54毫米)
    大鱼芯城 2024-04-22 09:46 105浏览
  • 【一文秒懂】Linux ADB调试环境搭建指南1、ADB介绍ADB:Android Debug Bridge,安卓调试桥,是用的最多的一种命令行工具,它能够在电脑端和安卓支持的设备端进行通信,其通信方式有两种:USB或者TCP/IP。它能够支持多种设备端的操作,包括:网络,脚本,安装和调试应用,文件传输等,同时也支持访问unix shell。adb命令行工具,随着安卓SDK平台工具一起发布,是安卓SDK的一个组件。 2、ADB架构及组成它是一个C/S(client-server)架构的
    _嵌入式艺术_ 2024-04-23 07:52 83浏览
  • 这套方案最大的特点就是低成本,也许是目前市面上性价比最高的HDMI 百兆 IP延长方案了,废话不多说,直接进入功能及参数介绍环节: 1、可过百兆或千兆交换机,支持1对1,1对多和多对多; 2、支持KVM(键鼠)、IR(红外遥控)和环出; 3、最大传输距离:150米,支持CAT5e(5类)和CAT6(6类)网线; 4、延迟:90-100毫秒; 5、压缩编码方式:H.264; 6、分辨率支持:最大1920*1080P@60Hz,向下兼容。相对于炬力北方(Actions)最早推出的HDMI百兆IP延长
    深圳东影智联 2024-04-22 09:51 327浏览
  • 技术突围,要选择优势充分发挥领域,比如动力电池加工,比如激光雕刻。2月7日,根据韩国研究机构SNE Research发布的最新数据显示,2023年全年,全球登记的电动汽车(EV、PHEV、HEV)动力电池装车量约为705.5GWh,同比增长38.6%。动力电池市场的飞速发展,也将用于激光焊接的蓝色激光再次推向了聚光灯下。1、动力电池加工,前景广阔以动力电池焊接为例,焊接质量的决定因素除焊接工艺外,在于激光器选型,例如针对铜材料焊接的蓝光激光器应用。“传统的红外光纤激光器在加工电池时会因为焊接出现
    艾迈斯欧司朗 2024-04-22 17:05 231浏览
  • 摘要      随着汽车行业转变为数据驱动的业务,软件在车辆的开发和维护中发挥了核心作用。随着软件数量的增加,相应的网络安全风险、责任和监管也随之增加,传统方法变得不再适用于这类任务。相应的结果是整车厂和供应商都在努力应对汽车软件日益增加的风险。      一种解决这一问题的新方法被提出了——为ECU软件构建一个数字孪生副本,以持续监测其处在网络安全风险环境下中的情况。使用这种方法,供应商可以充分了解网络安全风险,同时既可以用于运营中的
    经纬恒润 2024-04-22 16:16 199浏览
  • 你是否考虑过,企业网络上所用到的每台设备,小到电脑、平板、电话、路由器,大到打印机、服务器,都可能潜藏网络安全风险,威胁企业的信息安全和业务?部门企业的业务开展所赖以支撑的物联网设备或者电子邮件,则更可能挑战企业的网络安全。随着数字化转型的加速,企业应当怎样进行全面的网络安全风险分析,才能有效避免这些风险?一、什么是风险分析?风险分析指的是识别、审查和分析可能对企业造成负面影响的现有或潜在网络安全风险的过程,对于识别、管理和保护可能受到网络攻击的数据、信息和资产而言至关重要。通过网络安全风险分析
    虹科网络可视化 2024-04-22 14:17 234浏览
  • 配图来自Canva可画AI和服装,这两个看似不相干的领域摩擦出了不一样的火花。过去几年,国潮风口带动了汉服、马面裙、旗袍等等不少“新中式”服装的兴盛,有的商家借此契机赚了个盆满钵满,也有的商家苦于追不上风口。以马面裙为例,得益于“新中式”风潮的兴起,马面裙销量不断上涨,市场规模呈持续扩大趋势。根据魔镜洞察统计,2023年3月至2024年2月,马面裙的线上市场规模达到了23.5亿元,同比增长503.1%。风口之上,许多嗅觉敏锐的服装企业开始切入马面裙赛道。仅仅一个曹县,马面裙企业就有1500家左右
    刘旷 2024-04-22 10:50 349浏览
  • 前言在汽车与自动化行业,基于模型的开发过程中,从业者希望能够在保证建模效率的同时确保模型质量。此时,合理使用建模工具变得尤为重要。合适的工具不仅能够通过建模规范检查分析测试模型的质量,还能根据分析结果对模型进行自动改进。本篇文章为您介绍广受业界认可的静态测试工具MES Model Examiner® (MXAM) 。从MXAM在静态测试中的应用角色到实际演示与10.0版本功能更新,本文带您透彻了解MXAM如何能轻松帮助您实现优质建模。基于模型的开发中静态测试的应用与MXAMMXAM是用于对Sim
    MESMarketing 2024-04-20 18:03 90浏览
  • 科技云报道原创。随着以大模型为代表的AIGC时代拉开序幕,算力需求持续爆发,AI与边缘深度融合已是大势所趋,越来越多的企业开始积极布局GenAI。GenAI技术的商用化部署和应用成为企业竞逐的新阵地,勾勒出大模型从“技术力”转向“生产力”的新生态。算力就是生产力,更丰富的算力资源成为人工智能竞争的核心基石。IDC预计,全球AI计算市场规模将从2022年的195亿美元增长到2026年的346.6亿美元,其中GenAI计算市场规模将从2022年的8.2亿美元增长到2026年的109.9亿美元。Gen
    科技云报到 2024-04-22 15:11 241浏览
  • 本视频来自凤凰卫视《世纪大讲堂》,演讲人是中国工程院院士、中国仪器仪表学会理事长尤政院士,主题是《传感器:亟待攻克的关键“卡脖子”技术》。尤政院士是中国传感器与微米纳米技术著名专家,本视频基于其深厚的专业素养,同时深入浅出,向我国大众科普传感器知识,提到中国传感器产业一些比较尖锐的问题,向许多甚少了解我国科技发展情况的朋友,阐述了我国传感器产业面临的情况。强烈推荐!专家档案尤政 ,中国工程院院士,华中科技大学校长,中国仪器仪表学会第十届理事长,中国微米纳米技术学会理事长,主要研究方向为微米纳米技
    传感器专家网 2024-04-23 10:09 35浏览
  • 科技云报道原创。没有小的市场,只有还没有被发现的大生意。随着企业数字化转型的逐级深入,市场需求进一步向PaaS和SaaS层进发,使之成为公有云服务市场增长的主要动力。根据IDC最新发布的报告显示,2022-2027五年间中国公有云市场年复合增长率将达到26.9%,其中PaaS(平台即服务)增速最快,为30.5%,SaaS(软件即服务)紧随其后为28.7%。当云计算的基础设施建设完成后,中国公有云市场正在从资源驱动型延伸至技术和业务驱动。与此同时,生成式AI和大模型的快速发展,也在加速推动PaaS
    科技云报到 2024-04-22 17:24 241浏览
我要评论
0
0
点击右上角,分享到朋友圈 我知道啦
请使用浏览器分享功能 我知道啦