C语言嵌入式系统编程修炼之二软件架构篇
7页1、C语言嵌入式系统编程修炼之二:软件架构篇模块划分模块划分的划是规划的意思,意指怎样合理的将一个很大的软件划分为一系列功能独立的部分合作完成系统的需求。C语言作为一种结构化的程序设计语言,在模块的划分上主要依据功能(依功能进行划分在面向对象设计中成为一个错误,牛顿定律遇到了相对论),C语言模块化程序设计需理解如下概念:(1) 模块即是一个.c文件和一个.h文件的结合,头文件(.h)中是对于该模块接口的声明;(2) 某模块提供给其它模块调用的外部函数及数据需在.h中文件中冠以extern关键字声明;(3) 模块内的函数和全局变量需在.c文件开头冠以static关键字声明;(4) 永远不要在.h文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。如:/*module1.h*/int a = 5; /* 在模块1的.h文件中定义int a */*module1 .c*/#include module1.h /* 在模块1中包含模块1的.h文件 */*module2 .c*/#includ
2、e 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中包含模块1的.h文件 */这样如果模块1、2、3操作a的话,对应的是同一片内存单元。一个嵌入式系统通常包括两类模块:(1)硬件驱动模块,一种特定硬件对应一个模块;(2)软件功能模块,其模块的划分应满足低偶合、高内聚的要求。多任务还是
3、单任务所谓单任务系统是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。而多任务系统则可以宏观并行(微观上可能串行)地同时执行多个任务。多任务的并发执行通常依赖于一个多任务操作系统(OS),多任务OS的核心是系统调度器,它使用任务控制块(TCB)来管理任务调度功能。TCB包括任务的当前状态、优先级、要等待的事件或资源、任务程序码的起始地址、初始堆栈指针等信息。调度器在任务被激活时,要用到这些信息。此外,TCB还被用来存放任务的上下文(context)。任务的上下文就是当一个执行中的任务被停止时,所要保存的所有信息。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。当发生任务切换时,当前运行的任务的上下文被存入TCB,并将要被执行的任务的上下文从它的TCB中取出,放入各个寄存器中。嵌入式多任务OS的典型例子有Vxworks、ucLinux等。嵌入式OS并非遥不可及的神坛之物,我们可以用不到1000行代码实现一个针对80186处理器的功能最简单的OS内核,作者正准备进行此项工作,希望能将心得贡献给大家。究竟选择多任务还是单任务方式,依赖于软件的体系是否庞大。例如,绝大多数手机程
4、序都是多任务的,但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,模拟多任务环境。单任务程序典型架构(1)从CPU复位时的指定地址开始执行;(2)跳转至汇编代码startup处执行;(3)跳转至用户主程序main执行,在main中完成:a.初试化各硬件设备; b.初始化各软件模块;c.进入死循环(无限循环),调用各模块的处理函数用户主程序和各模块的处理函数都以C语言完成。用户主程序最后都进入了一个死循环,其首选方案是:while(1)有的程序员这样写:for(;)这个语法没有确切表达代码的含义,我们从for(;)看不出什么,只有弄明白for(;)在C语言中意味着无条件循环才明白其意。下面是几个著名的死循环:(1)操作系统是死循环;(2)WIN32程序是死循环;(3)嵌入式系统软件是死循环;(4)多线程程序的线程处理函数是死循环。你可能会辩驳,大声说:凡事都不是绝对的,2、3、4都可以不是死循环。Yes,you are right,但是你得不到鲜花和掌声。实际上,这是一个没有太大意义的牛角尖,因为这个世界从来不需要一个处理完几个消息就喊着要OS
《C语言嵌入式系统编程修炼之二软件架构篇》由会员夏**分享,可在线阅读,更多相关《C语言嵌入式系统编程修炼之二软件架构篇》请在金锄头文库上搜索。
黄牛买卖合同样本
八下仁爱英语单词表
2023二年级班务管理计划样本(二篇).doc
2022中级经济师-中级经济师农业经济考试全真模拟卷7(附答案带详解)
驾校教练员奖励制度
小学语文六上第八单元复习题
遂宁蛋白质组学技术服务项目商业计划书【参考模板】
物业公司工作总结
八年级英语下册 Chapter 7 A new newspaper教学基本要求 牛津上海版
浅谈如何提高语文阅读和作文的教学质量
《苦难辉煌》观后感
生产车间各岗位职责(四篇).doc
垃圾日清合同
商场财务管理手册
人教版小学一年级数学下册单元试题(含期中及套期末)全册
2023年江西省社会科学院高层次人才招考聘用笔试题库含答案带解析
蛋鸡生态养殖商业0628
安全事故管理制度
副井加热施工组织
2022卫生招聘考试-卫生招聘(计算机信息管理)考试全真模拟卷47(附答案带详解)
2023-02-16 34页
2023-06-04 9页
2023-08-28 6页
2023-09-28 7页
2023-06-29 7页
2023-08-01 2页
2022-10-21 5页
2023-09-21 4页
2023-02-22 20页
2023-10-23 8页