C语言嵌入式系统编程修炼之二
6页1、C 语言嵌入式系统编程修炼之二语言嵌入式系统编程修炼之二:软件架构篇!软件架构篇! 转转 C 语言嵌入式系统编程修炼之二:软件架构篇!作者:宋宝华模块划分模块划分模块划分的“划“是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C 语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C 语言模块化程序设计需理解如下概念:(1) 模块即是一个.c 文件和一个.h 文件的结合,头文件(.h)中是对于该模块接口的声明;(2) 某模块提供给其它模块调用的外部函数及数据需在.h 中文件中冠以 extern 关键字声明;(3) 模块内的函数和全局变量需在.c 文件开头冠以 static 关键字声明;(4) 永远不要在.h 文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:/*module1.h*/int a = 5; /* 在模块 1 的.h 文件中定义 int a *
2、/*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*/extern int a; /* 在模块 1 的.h 文件中声明 int a */*module1 .c*/#include “module1.h“ /* 在模块 1 中包含模块 1 的.h 文件 */int a = 5; /* 在模块 1 的.c 文件中定义 int a */*module2 .c*/#include “module1.h“ /* 在模块 2 中包含模块 1 的.h 文件 */*module3 .c*/#include “module1.h“ /
3、* 在模块 3 中包含模块 1 的.h 文件 */这样如果模块 1、2、3 操作 a 的话,对应的是同一片内存单元。一个嵌入式系统通常包括两类模块:(1)硬件驱动模块,一种特定硬件对应一个模块;(2)软件功能模块,其模块的划分应满足低偶合、高内聚的要求。多任务还是单任务多任务还是单任务所谓“单任务系统“是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。而多任务系统则可以宏观并行(微观上可能串行)地“同时“执行多个任务。多任务的并发执行通常依赖于一个多任务操作系统(OS),多任务 OS 的核心是系统调度器,它使用任务控制块(TCB)来管理任务调度功能。TCB 包括任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器在任务被激活时,要用到这些信息。此外,TCB还被用来存放任务的“上下文“(context)。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。当发生任务切换时,当前运行的任务的上下文被存入 TCB,并将要被执行的任务的上下文从它的 TCB 中取出,放入各个寄存器
4、中。嵌入式多任务 OS 的典型例子有 Vxworks、ucLinux 等。嵌入式 OS 并非遥不可及的神坛之物,我们可以用不到 1000 行代码实现一个针对 80186 处理器的功能最简单的 OS 内核,作者正准备进行此项工作,希望能将心得贡献给大家。究竟选择多任务还是单任务方式,依赖于软件的体系是否庞大。例如,绝大多数手机程序都是多任务的,但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,模拟多任务环境。单任务程序典型架构单任务程序典型架构(1)从 CPU 复位时的指定地址开始执行;(2)跳转至汇编代码 startup 处执行;(3)跳转至用户主程序 main 执行,在 main 中完成:a.初试化各硬件设备; b.初始化各软件模块;c.进入死循环(无限循环),调用各模块的处理函数用户主程序和各模块的处理函数都以 C 语言完成。用户主程序最后都进入了一个死循环,其首选方案是:while(1)有的程序员这样写:for(;)这个语法没有确切表达代码的含义,我们从 for(;)看不出什么,只有弄明白 for(;)在 C 语言中意味着无条件循环才明
《C语言嵌入式系统编程修炼之二》由会员飞***分享,可在线阅读,更多相关《C语言嵌入式系统编程修炼之二》请在金锄头文库上搜索。
人教版一年级下册数学第二单元20以内的退位减法测试卷精品【考试直接用】
人教版一年级下册数学第二单元20以内的退位减法测试卷(实用)word版
人教版一年级下册数学第二单元20以内的退位减法测试卷及答案(夺冠)
人教版一年级下册数学第二单元20以内的退位减法测试卷(典型题)
人教版一年级下册数学第二单元20以内的退位减法测试卷精品(a卷)
人教版一年级下册数学第二单元20以内的退位减法测试卷及答案【精品】
部编版二年级上册道德与法治期中测试卷 (考试直接用)
部编版二年级上册道德与法治期中测试卷 带答案(培优)
部编版二年级上册道德与法治期中测试卷 含答案(精练)
部编版二年级上册道德与法治期中测试卷 及答案【各地真题】
部编版二年级上册道德与法治期中测试卷 及完整答案【名校卷 】
部编版二年级上册道德与法治期中测试卷 【考点精练】
部编版三年级上册道德与法治期末测试卷 (重点)
部编版三年级上册道德与法治期末测试卷 (模拟题)word版
部编版三年级上册道德与法治期末测试卷 附答案(预热题)
部编版三年级上册道德与法治期末测试卷 附参考答案(b卷 )
部编版三年级上册道德与法治期末测试卷 答案下载
部编版三年级上册道德与法治期末测试卷 含答案【夺分金卷 】
部编版三年级上册道德与法治期末测试卷 含完整答案【网校专用】
部编版三年级上册道德与法治期末测试卷 及答案(最新)
2024-05-10 7页
2024-05-06 3页
2024-05-06 105页
2024-05-06 98页
2024-05-06 98页
2024-05-05 73页
2024-05-05 253页
2024-05-05 62页
2024-05-05 64页
2024-05-05 72页