第一章
1.01 在µCOS-II中,考虑到代码的移植性,所有的.c文件都包含includes.h
1.02数据类型
1、因为不同的微处理器有不同的字长,µC/OS-II的移植文件包括很多类型定义以确保可移植性。
2、µCOS-II使用移植性强的整数数据类型,还定义了浮点数数据类型
程序清单 L1.1 可移植型数据类型。 |
Typedef unsigned char BOOLEAN; |
Typedef unsigned char INT8U; |
Typedef signed char INT8S; |
Typedef unsigned int INT16U; |
Typedef signed int INT16S; |
Typedef unsigned long INT32U; |
Typedef signed long INT32S; |
Typedef float FP32; |
Typedef double FP64; |
|
#define BYTE INT8S//8位有符号字符数据类型 |
#define UBYTE INT8U//8位无符号字符数据类型 |
#define WORD INT16S//16位有符号整数数据类型 |
#define UWORD INT16U//16位无符号整数数据类型 |
#define LONG INT32S//32位有符号长整型数据类型 |
#define ULONG INT32U//32位无符号长整型数据类型 |
1.03 全局变量
定义:全局变量应该是得到内存分配且可以被其他模块通过C语言中extern关键字调用的变量。因此,必须在 .C 和 .H 文件中定义。这种重复的定义很容易导致错误。以下讨论的方法只需用在头文件中定义一次。
举例:
当编译器处理.C文件时,它强制xxx_EXT(在相应.H文件中可以找到)为空,(因为xxx_GLOBALS已经定义)。所以编译器给每个全局变量分配内存空间,而当编译器处理其他.C文件时,xxx_GLOBAL没有定义,xxx_EXT被定义为extern,这样用户就可以调用外部全局变量。为了说明这个概念,可以参见uC/OS_II.H,其中包括以下定义:
#ifdef OS_GLOBALS //在头文件查找是否定义0S_GLOBALS宏 |
#define OS_EXT //如定义OS_GLOBALS,强制将0S_EXT定义为空 |
#else //如未定义OS_GLOBALS,将OS_EXT定义为extern |
#define OS_EXT extern |
#endif |
|
OS_EXT INT32U OSIdleCtr; |
OS_EXT INT32U OSIdleCtrRun; |
OS_EXT INT32U OSIdleCtrMax; |
同时,uCOS_II.H有中以下定义:
#define OS_GLOBALS |
#include “includes.h” |
当编译器处理其他.C文件时,头文件变成了如下的样子,因为在.c文件中OS_GLOBAL没有定义,所以OS_EXT被定义为extern。
extern INT32U OSIdleCtr; |
extern INT32U OSIdleCtrRun; |
extern INT32U OSIdleCtrMax; |
自我理解:在uCOS_II中定义一个全局的宏,为了在.c文件中不产生内存分配但是又能正常使用这些变量,我们只需要在头文件中定义一次即可。
1.04 OS_ENTER_CRITICAL() 和 OS_EXIT_CRITICAL()
OS_ENTER_CRITICAL()用来开中断
OS_EXIT_CRITICAL()用来关中断
用户的应用代码可以使用这两个宏来开中断和关中断。很明显,关中断会影响中断延迟,所以要特别小心。用户还可以用信号量来保护林阶段代码。
1.05 PC服务程序
PC.C PC.H 都是基于PC的服务程序,所有服务函数PC_为前缀的函数
字符显示函数:显示内存从绝对地址0x000B8000开始,PC.C中的显示函数用x和y坐标来直接向显示内存中写ASCII字符。每个字符需要两个字节来显示。第一个字节是用户想要显示的字符,第二个字节用来确定前景色和背景色。前景色用低四位来表示,背景色用第4位到6位来表示。最高位表示这个字符是否闪烁,(1)表示闪烁,(0)表示不闪烁。
花费时间的测量:测量时间是用PC的82C54定时器2。被测的程序代码是放在函数PC_ElapsedStart()和PC_ElapsedStop()之间来测量的。在用这两个函数之前,应该调用PC_ElapsedInit()来初始化,它主要是计算运行这两个函数本身所附加的的时间。
INT16U time;
PC_ElapsedInit();
PC_ElapsedStart();
PC_Dispchar(40,24,’A’,DISP_FGND_WHITE);
time = PC_ElapsedStop();
PC_ElapsedStop()函数中返回的数值就是准确的测量结果
1、对计算机操作系统概念的理解
操作系统是计算机硬件系统与应用程序之间的接口,可以管理软件和硬件。这使得很多开发人员不需要熟悉硬件原理也可以熟悉的操作。
2、嵌入式系统的概念
在已有的硬件平台上移植操作系统后,做应用软件
3、实时操作系统的概念
定义:能在规定的时间内完成对事件的处理的操作系统
分类:软实时、硬实时
注意点:嵌入式操作系统必须是多任务系统,任务切换的时间与系统中的任务数无关,并且中断延时的时间应该可预知并尽可能短