参考网址:

(94条消息) 例解嵌入式系统分层结构_和风化雨-CSDN博客_嵌入式系统分层

目的

分层的目的主要:1,是降低系统开发难度;2,是为了复用。

两层结构[硬件层, 软件层]

1
2
3
4
5
6
7
8
9
10
11
12
13
/**********************************************************************************/
#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++);
}
}

三层结构[ 硬件层, 驱动层,应用层 ]

虽然简单但很有逻辑,可以参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*******************驱动头文件 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();
}
}

四层结构[ 硬件层,驱动层,操作系统层,应用层 ]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
/******************************驱动****************************************************/
#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);
}