uc32 不是 C 標準關鍵字,而是嵌入式項目中常見的巨集類型別名,通常定義於專案公共頭檔 (如 sys_types.h, std_types.h) 中。
| 別名 | 含義 | 標準對應 | 位寬 | 常用場景 |
|---|---|---|---|---|
| u8 / uint8_t | 無號 8 位整數 | unsigned char / uint8_t | 1 Byte | 位操作、暫存器、原始字節 |
| s8 / int8_t | 有號 8 位整數 | signed char / int8_t | 1 Byte | 小範圍有號數值 |
| u16 / uint16_t | 無號 16 位整數 | unsigned short / uint16_t | 2 Bytes | ADC 數值、計數器、CRC |
| u32 / uint32_t | 無號 32 位整數 | unsigned int / unsigned long / uint32_t | 4 Bytes | 時間戳、位址、大計數 |
| uc32 | 無號 32 位 (常見別名) | unsigned int / uint32_t | 4 Bytes | 同 u32,部分廠商慣例 |
| vu32 | volatile u32 | volatile uint32_t | 4 Bytes | 硬體暫存器映射,防編譯器優化 |
unsigned int?short <= int <= long,int 在 16 位 MCU 可能是 16 位,在 32 位 ARM 是 32 位。使用 uint32_t (C99 <stdint.h>) 或專案統一別名,明確位寬。u32 reg_val 明確表達「32 位無號暫存器值」,unsigned int x 語義模糊。volatile (vu32),確保讀寫直接操作記憶體位址,不被編譯器優化掉。新專案強烈建議直接使用 C99 <stdint.h> 標準類型:
int8_t, uint16_t, int32_t, uint64_tint_least16_tint_fast32_tintmax_t, uintmax_tintptr_t, uintptr_t若維護舊專案,請遵循專案現有 typedef 規範,並在文檔中建立對照表。
// std_types.h
#ifndef STD_TYPES_H
#define STD_TYPES_H
#include <stdint.h> // 優先使用標準類型
// 標準類型別名 (兼容舊代碼)
typedef uint8_t u8;
typedef int8_t s8;
typedef uint16_t u16;
typedef int16_t s16;
typedef uint32_t u32;
typedef int32_t s32;
typedef uint64_t u64;
typedef int64_t s64;
// 特定語義別名
typedef uint32_t uc32; // 某些廠商慣例
typedef volatile uint32_t vu32; // 暫存器專用
typedef volatile uint16_t vu16;
typedef volatile uint8_t vu8;
#endif
uc32 = Unsigned Char? No, Unsigned 32-bit (通常)。嵌入式開發中,統一的類型別名體系是固件品質與可移植性的基石。請優先使用 <stdint.h>,次之遵循專案規範。