uint8_t\uint16_t\uint32_t和unsigned char\int\long int的区别
本人刚步入嵌入式开发,看到ARM程序中,在定义数据类型时,有些用uint8_t神马的,有些用unsigned char什么的。
按说这两种类型是指同一种基本数据类型,在程序中这样用有什么特别用途吗???
[解决办法]
unsigned char 标准C语言,无需解释
uint8_t,这个不是标准C时代码编写者自己造的类型 诸如typedef unsigned char uint8_t
你可以去跟踪代码,看看那里定义的uint8_t,这个很好找。 其次去google "typedef" 肯定是你要的答案。
综上所述,C语言问题。
[解决办法]
Standard C, 是不定義資料型別的 sizeof() 值的.
所以 sizeof(int), 在 8051 or ARM 上面的 C compiler 的值是不一樣的.
為了更明確地定義以增加移植性, 所以會這樣寫
Paul, Chao @ Techware
[解决办法]
上一篇寫的不好, 更精確地說法應是 "Standard C, 資料型別的 sizeof() 值是與機器相關的"
Paul, Chao @ Techware
[解决办法]
"我看了,这个好像是ucOS系统自己typedef的,直接在ARM上移植过来的系统代码。"
只有unsigned char是标准C里面的。
ucosii里面用的是什么,我不记得了,typedef给原来的类型起来一个名字,目的是为了不同系统里便移植方便,比如8位单片机代码移植到32位ARM上面,如果按照原来的标准C很可能不适合,逐个改定义很累,而用了typedef可以实现一改全改,尤其在定义结构体类型的时候很有优势。
google "typedef".你会学到更多。
看看我这个结构体:
typedef struct
{
ascii *p_Command;
u8 v_MaxParameters;
u8 v_SupportedTypes;
u8 v_CommandId;
u8 v_CommandCategory;
t_aki_SupportedParamList a_SupportedParam[AKI_PARAM_LENGTH];
} t_aki_CommandList;