导读:目前正在解读《C语言嵌入式系统编程——软件架构之模块划分与硬件驱动模块》的相关信息,《C语言嵌入式系统编程——软件架构之模块划分与硬件驱动模块》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言嵌入式系统编程——软件架构之模块划分与硬件驱动模块》的详细说明。

模块划分

模块划分的""是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:

1)模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;

2)某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;

3)模块内的函数和全局变量需在.c文件开头冠以static关键字声明;

4)永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:

/*module1.h*/

inta=5;/*在模块1.h文件中定义inta*/

/*module1.c*/

#include"module1.h"/*在模块1中包含模块1.h文件*/

/*module2.c*/

#include"module1.h"/*在模块2中包含模块1.h文件*/

/*module3.c*/

#include"module1.h"/*在模块3中包含模块1.h文件*/

以上程序的结果是在模块123中都定义了整型变量aa在不同的模块中对应不同的地址单元,这个世界上从来不需要这样的程序。正确的做法是:

/*module1.h*/

externinta;/*在模块1.h文件中声明inta*/

/*module1.c*/

#include"module1.h"/*在模块1中包含模块1.h文件*/

inta=5;/*在模块1.c文件中定义inta*/

/*module2.c*/

#include"module1.h"/*在模块2中包含模块1.h文件*/

/*module3.c*/

#include"module1.h"/*在模块3中包含模块1.h文件*/

这样如果模块123操作a的话,对应的是同一片内存单元。

一个嵌入式系统通常包括两类模块:

1)硬件驱动模块,一种特定硬件对应一个模块;

2)软件功能模块,其模块的划分应满足低偶合、高内聚的要求。

硬件驱动模块

一个硬件驱动模块通常应包括如下函数:

1)中断服务程序ISR

2)硬件初始化

a.修改寄存器,设置硬件参数(如UART应设置其波特率,AD/DA设备应设置其采样速率等);

b.将中断服务程序入口地址写入中断向量表:

/*设置中断向量表*/

m_myPtr=make_far_pointer(0l);/*返回voidfar型指针voidfar**/

m_myPtr+=ITYPE_UART;/*ITYPE_UARTuart中断服务程序*/

/*相对于中断向量表首地址的偏移*/

*m_myPtr=&UART_Isr;/*UART_IsrUART的中断服务程序*/

3)设置CPU针对该硬件的控制线

a.如果控制线可作PIO(可编程I/O)和控制信号用,则设置CPU内部对应寄存器使其作为控制信号;

b.设置CPU内部的针对该设备的中断屏蔽位,设置中断方式(电平触发还是边缘触发)。

4)提供一系列针对该设备的操作接口函数。例如,对于LCD,其驱动模块应提供绘制像素、画线、绘制矩阵、显示字符点阵等函数;而对于实时钟,其驱动模块则需提供获取时间、设置时间等函数。

提醒:《C语言嵌入式系统编程——软件架构之模块划分与硬件驱动模块》最后刷新时间 2024-03-14 01:13:16,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言嵌入式系统编程——软件架构之模块划分与硬件驱动模块》该内容的真实性请自行鉴别。