我们研究ucos,会发现有一个定义数据类型定义的头文件。比如在STM32中,数据类型是这样定义的:typedef unsigned char INT8U;
typedef signed char INT8S;
typedef unsigned short INT16U;
typedef signed short INT16S;
typedef unsigned int INT32U;
typedef signed int INT32S;
typedef float FP32;
typedef double FP64;
后面的大写BOOLENA、INT8U、INT8U、INT8S、INT16U、INT16S、INT32U、INT32S、FP32和FP64是ucos系统专用的数据类型,不能改动。数字是数据类型代表占多少bits,比如INT32U,是占用32个bits,无符号常整型。UCOS使用这些数据类型,位数一定要和数字一致,否则会出错。
在STM32中,用sizeof(signed int )=4,; 即32bits。用typedef signed int INT32S没问题。但是,在51单片机中,size of(signed int )=2,即16bits。那为了兼容UCOS的INT32S的类型,需要51单片机也搞一个32bits的类型,刚好size of(signed long )=4,即32bits。所以可以修改为typedef signed long INT32S。还有修改为typedef float FP32; 修改为 typedef double FP64。
总之,就是移植不同平台的操作系统,需要注意不同平台的位宽,改动数据类型定义。多用size of()查看平台的数据类型长度,然后根据长度修改为兼容ucos系统的数据类型。这样,移植到51单片机后ucos就不会出现数据类型的错误了。