模块划分
语言模块化程序设计需理解如下概念:
() 模块即是一个 文件和一个 文件的结合,头文件中是对于该模块接口的声明;
() 某模块提供给其它模块调用的外部函数及数据需在 中文件中冠以 关键字声明;
() 模块内的函数和全局变量需在 文件开头冠以 关键字声明;
() 永远不要在 文件中定义变量!定义变量和声明变量的区别在于定义会产生内存分配的操作,
是汇编阶段的概念;而声明则只是告诉包含该声明的模块在连接阶段从其它模块寻找外部函数和变量。
一个嵌入式系统通常包括两类模块:
()硬件驱动模块,一种特定硬件对应一个模块;
()软件功能模块,其模块的划分应满足低偶合、高内聚的要求。
多任务还是单任务
所谓单任务系统是指该系统不能支持多任务并发操作,宏观串行地执行一个任务。而多任务系统则
可以宏观并行(微观上可能串行)地同时执行多个任务。
多任务的并发执行通常依赖于一个多任务操作系统(),多任务 的核心是系统调度器,它使
用任务控制块()来管理任务调度功能。 包括任务的当前状态、优先级、要等待的事件或资源、
任务程序码的起始地址、初始堆栈指针等信息。调度器在任务被激活时,要用到这些信息。此外,
还被用来存放任务的上下文(。任务的上下文就是当一个执行中的任务被停止时,所要保存的
所有信息。通常,上下文就是计算机当前的状态,也即各个寄存器的内容。当发生任务切换时,当前运行
的任务的上下文被存入 ,并将要被执行的任务的上下文从它的 中取出,放入各个寄存器中。
究竟选择多任务还是单任务方式,依赖于软件的体系是否庞大。例如,绝大多数手机程序都是多任务的,
但也有一些小灵通的协议栈是单任务的,没有操作系统,它们的主程序轮流调用各个软件模块的处理程序,
模拟多任务环境。
单任务程序典型架构
()从 复位时的指定地址开始执行;
()跳转至汇编代码 处执行;
()跳转至用户主程序 执行,在 中完成:
初试化各硬件设备;
初始化各软件模块;
进入死循环(无限循环),调用各模块的处理函数
用户主程序和各模块的处理函数都以 语言完成。用户主程序最后都进入了一个死循环,其首选方案
是:
有的程序员这样写:
!""
这个语法没有确切表达代码的含义,我们从 !""看不出什么,只有弄明白 !""在 语言中意味
着无条件循环才明白其意。
下面是几个著名的死循环:
()操作系统是死循环;
()#$% 程序是死循环;
()嵌入式系统软件是死循环;
()多线程程序的线程处理函数是死循环。
评论0