查看: 355|回复: 29
收起左侧

C语言嵌入式系统编程修炼之软件架构

[复制链接]

35

主题

298

帖子

894

积分

高级技术员

 楼主| 发表于 2017-6-30 23:10 | 显示全部楼层 |返回版面|阅读模式
模块划分的"划"是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:

86

主题

604

帖子

1812

积分

助理工程师

发表于 2017-6-30 23:11 | 显示全部楼层 |返回版面
模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;

35

主题

298

帖子

894

积分

高级技术员

 楼主| 发表于 2017-6-30 23:11 | 显示全部楼层 |返回版面
某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;

86

主题

604

帖子

1812

积分

助理工程师

发表于 2017-6-30 23:11 | 显示全部楼层 |返回版面
模块内的函数和全局变量需在.c文件开头冠以static关键字声明;

35

主题

298

帖子

894

积分

高级技术员

 楼主| 发表于 2017-6-30 23:11 | 显示全部楼层 |返回版面
远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念

86

主题

604

帖子

1812

积分

助理工程师

发表于 2017-6-30 23:12 | 显示全部楼层 |返回版面
而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。

35

主题

298

帖子

894

积分

高级技术员

 楼主| 发表于 2017-6-30 23:12 | 显示全部楼层 |返回版面
硬件驱动模块,一种特定硬件对应一个模块;

86

主题

604

帖子

1812

积分

助理工程师

发表于 2017-6-30 23:12 | 显示全部楼层 |返回版面
软件功能模块,其模块的划分应满足低偶合、高内聚的要求。

26

主题

349

帖子

1047

积分

助理工程师

发表于 2017-6-30 23:13 | 显示全部楼层 |返回版面
所谓"单任务系统"是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。

35

主题

298

帖子

894

积分

高级技术员

 楼主| 发表于 2017-6-30 23:13 | 显示全部楼层 |返回版面
多任务系统则可以宏观并行(微观上可能串行)地"同时"执行多个任务。

26

主题

349

帖子

1047

积分

助理工程师

发表于 2017-6-30 23:14 | 显示全部楼层 |返回版面
多任务的并发执行通常依赖于一个多任务操作系统(OS),多任务OS的核心是系统调度器,它使用任务控制块(TCB)来管理任务调度功能

35

主题

298

帖子

894

积分

高级技术员

 楼主| 发表于 2017-6-30 23:14 | 显示全部楼层 |返回版面
TCB包括任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息

78

主题

3546

帖子

1万

积分

资深工程师

发表于 2017-6-30 23:14 | 显示全部楼层 |返回版面
这个软件架构的都是模块化的东西的哈

26

主题

349

帖子

1047

积分

助理工程师

发表于 2017-6-30 23:15 | 显示全部楼层 |返回版面
调度器在任务被激活时,要用到这些信息。此外,TCB还被用来存放任务的"上下文"(context)

83

主题

673

帖子

2013

积分

初级工程师

发表于 2017-6-30 23:15 | 显示全部楼层 |返回版面
任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息

26

主题

349

帖子

1047

积分

助理工程师

发表于 2017-6-30 23:15 | 显示全部楼层 |返回版面
当发生任务切换时,当前运行的任务的上下文被存入TCB,并将要被执行的任务的上下文从它的TCB中取出,放入各个寄存器中

83

主题

673

帖子

2013

积分

初级工程师

发表于 2017-6-30 23:16 | 显示全部楼层 |返回版面
上下文就是计算机当前的状态,也即各个寄存器的内容

26

主题

349

帖子

1047

积分

助理工程师

发表于 2017-6-30 23:18 | 显示全部楼层 |返回版面
嵌入式多任务OS的典型例子有Vxworks、ucLinux等

26

主题

349

帖子

1047

积分

助理工程师

发表于 2017-6-30 23:18 | 显示全部楼层 |返回版面
嵌入式OS并非遥不可及的神坛之物,我们可以用不到1000行代码实现一个针对80186处理器的功能最简单的OS内核,作者正准备进行此项工作,希望能将心得贡献给大家

26

主题

349

帖子

1047

积分

助理工程师

发表于 2017-6-30 23:19 | 显示全部楼层 |返回版面
究竟选择多任务还是单任务方式,依赖于软件的体系是否庞大。例如,绝大多数手机程序都是多任务的,但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,模拟多任务环境。
您需要登录后才可以回帖 登录 | 注册 手机登录

本版积分规则

分享 快速回复 返回顶部 返回列表