嵌入式系统uc⼀os-II移植中,OS_CPU.H中有关数据类型的定义时,问题如下

2025-02-23 04:46:41
推荐回答(1个)
回答1:

typedef unsigned char BOOLEAN;的意思是将BOOLEAN定义为无符号的char类型,其作用就是你如果用"BOOLEAN b_complete;"声明b_complete变量相当于用"usigned char b_complete"。
int类型数据根据编译器的不同具有不同的长度,例如一些长度为16位一些为32位。如果你用short int那么不同编译器会为变量分不同长度的空间(16位?32位?),从而不知道是否会溢出,当然不好移植了(都不知道变量的值会不会溢出)。而char的度在C编译器中长度都是8位(java中好像为16位),所以定义INT8S INT8U肯定用char了。
至于这句话:“uc/os-II系统的代码不适用C语言中的short int等数据类型,因为他们是编译器相关的,是不可移植的。相反,定义的整形数据结构等是可易移植的。”的意思是:在程序中不会出现什么int和short int等长度根据编译器变化而变化的数据类型,需要进行变量声明时会用INT8S INT16S INT8U INT16U等代替,然后根据编译环境不同只修改“typedef signed char INT8S; ”这些类型定义就行,用这样的整形数据结构移植方便,不用修改每个个地方,如果不这样,有变量声明的地方移植就要改,那么移植工作量将会是一个非常恐怖的事情,相信没有人愿意这样的事吧。