没有合适的资源?快使用搜索试试~ 我知道了~
C语言嵌入式系统编程中软件架构的问题.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 186 浏览量
2021-11-08
13:41:53
上传
评论
收藏 20KB DOCX 举报
温馨提示
试读
13页
C语言嵌入式系统编程中软件架构的问题.docx
资源推荐
资源详情
资源评论
C 语言嵌入式系统编程中软件架构的问题
模块划分
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的
软件划分为一系列功能独立的部分合作完成系统的需求。C 语言作
为一种结构化的程序设计语言,在模块的划分上主要依据功能(依
功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了>
相对论),C 语言模块化程序设计需理解如下概念:
(1)模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中
是对于该模块接口的声明;
(2)某模块提供给其它模块调用的外部函数及数据需在.h 中
文件中冠以 ex(te)rn 关键字声明;
(3)模块内的函数和全局变量需在.c 文件开头冠以 sta(ti)c
关键字声明;
(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 文件*/
以上程序的结果是在模块 1、2、3 中都定义了整型变量 a,a
在不同的模块中对应不同的地址单元,这个世界上从来不需要这样
的程序。正确的做法是:
/*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 文件*/
这样如果模块 1、2、3 操作 a 的话,对应的是同一片内存单元。
一个嵌入式系统通常包括两类模块:
(1)硬件驱动模块,一种特定硬件对应一个模块;
(2)软件功能模块,其模块的划分应满足低偶合、高内聚的要
求。
多任务还是单任务
所谓"单任务系统"是指该系统不能支持多任务并发操作,宏观
串行地执行一个任务。而多任务系统则可以宏观并行(微观上可能
串行)地"同时"执行多个任务。
多任务的并发执行通常依赖于一个多任务操作系统(OS),多
任务 OS 的核心是系统调度器,它使用任务控制块(TCB)来管理
任务调度功能。TCB 包括任务的当前状态、优先级、要等待的事件
或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器在
任务被激活时,要用到这些信息。此外,TCB 还被用来存放任务
的"上下文"(context)。任务的上下文就是当一个执行中的任务被
停止时,所要保存的所有信息。通常,上下文就是计算机当前的状
剩余12页未读,继续阅读
资源评论
- weixin_421217332022-06-28用户下载后在一定时间内未进行评价,系统默认好评。
ziyoudianzi15
- 粉丝: 0
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功