uC/OS-ll 第一讲

第一章

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中的显示函数用xy坐标来直接向显示内存中写ASCII字符。每个字符需要两个字节来显示。第一个字节是用户想要显示的字符,第二个字节用来确定前景色和背景色。前景色用低四位来表示,背景色用第4位到6位来表示。最高位表示这个字符是否闪烁,(1)表示闪烁,(0)表示不闪烁。

 

花费时间的测量:测量时间是用PC82C54定时器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、实时操作系统的概念

定义:能在规定的时间内完成对事件的处理的操作系统

分类:软实时、硬实时

注意点:嵌入式操作系统必须是多任务系统,任务切换的时间与系统中的任务数无关,并且中断延时的时间应该可预知并尽可能短

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值