简说 | 嵌入式系统分层结构
Posted 嵌入式大杂烩
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简说 | 嵌入式系统分层结构相关的知识,希望对你有一定的参考价值。
以控制LED闪烁为例,
———————————
| |
| P1.1 |-----I<|--------------<|
| |
| p2.1 |-------------/ ---------|--.
| |
| |
———————————
1、两层结构
硬件层和软件层--最粗糙的分层架构
/**********************************************************************************/
#include <reg51.h>
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 <reg51.h>
#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<linux/kerel.h>
#include<linux/module.h>
#include<asm/uaccess.h>
#include<linux/mm/h>
#include<linux/ioport.h>
#include<asm/io.h>
#include<linux/ioport.h>
#include<linux/fs.h>
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 <stdlib.h>
#include <stdio.h>
#include <sys/ioctl.h>
#include<sys/time.h>
#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
仅供大家学习参考与知识传播,版权归原作者所有,如有侵权,麻烦联系进行删除,感谢~
以上是关于简说 | 嵌入式系统分层结构的主要内容,如果未能解决你的问题,请参考以下文章