|
http://forum.eepw.com.cn/thread/215752/1原文地址* o7 N: R9 N; l1 h , P4 q! ~- E2 Q; j- p- L 今天调试程序时,想观察一下变量的情况,突然发现平时经常移植别人程序时最容易忽略的一个致命问题,那就是忽略变量类型,这里有必要给大家一定知识啦,都是库里面的,非原创!/ d5 Y5 ?, q4 w4 h: \$ E . c4 L# s4 n* ~4 M* d 3.0以后的版本中使用了CMSIS数据类型,变量的定义有所不同,但是出于兼容旧版本的目的,以上的数据类型仍然兼容。CMSIS的IO类型限定词如表 5‑7所示,CMSIS和STM32固件库的数据类型对比如表 5‑8所示。这些数据类型可以在STM32F10x_StdPeriph_Lib_V3.4.0\Libraries\CMSIS\CM3\DeviceSupport\ST\STM32F10x\stm32f10x.h中找到具体的定义,此部分定义如下。 2 p% C' {( B1 U" s, } 1 /*!< STM32F10x Standard Peripheral Library old types (maintained for legacy purpose) */ 2 3 typedef int32_t s32; 4 5 typedef int16_t s16; 6 7 typedef int8_t s8; 8 9 typedef const int32_t sc32; /*!< Read Only */10 11 typedef const int16_t sc16; /*!< Read Only */12 13 typedef const int8_t sc8; /*!< Read Only */14 15 typedef __IO int32_t vs32;16 17 typedef __IO int16_t vs16;18 19 typedef __IO int8_t vs8;20 21 typedef __I int32_t vsc32; /*!< Read Only */22 23 typedef __I int16_t vsc16; /*!< Read Only */24 25 typedef __I int8_t vsc8; /*!< Read Only */26 27 typedef uint32_t u32;28 29 typedef uint16_t u16;30 31 typedef uint8_t u8;32 33 typedef const uint32_t uc32; /*!< Read Only */34 35 typedef const uint16_t uc16; /*!< Read Only */36 37 typedef const uint8_t uc8; /*!< Read Only */38 39 typedef __IO uint32_t vu32;40 41 typedef __IO uint16_t vu16;42 43 typedef __IO uint8_t vu8;44 45 typedef __I uint32_t vuc32; /*!< Read Only */46 47 typedef __I uint16_t vuc16; /*!< Read Only */48 49 typedef __I uint8_t vuc8; /*!< Read Only */ CMSIS IO类型限定词
固件库与CMSIS数据类型对比
; `! B( h0 v; R2 ^ stm32f10x.h文件中还包含了常用的布尔形变量定义,如: 1 typedef enum {RESET = 0, SET = !RESET} FlagStatus, ITStatus; 2 + u" \2 M3 S/ {0 A, _ 3 typedef enum {DISABLE = 0, ENABLE = !DISABLE} FunctionalState;3 R" j3 s" q" _5 M3 m+ J E- U! ^ 4 7 W- i3 o4 \ z9 g 5 #define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE))! x; }7 Q0 f3 C2 V. Z9 I" { 6 9 _. z! S T, \/ K$ h 7 typedef enum {ERROR = 0, SUCCESS = !ERROR} ErrorStatus;4 v$ F. A5 x. d7 b+ r 不同版本的标准外设库的变量定义略有不同,如3.4版本中就没有之前版本的TRUE和FALSE的定义,用户也可以根据自己的需求按照上面的格式定义自己的布尔形变量。在使用标准外设库进行开发遇到相关的定义问题时应首先找到对应的头文件定义。9 S" }$ Q9 R: [1 f- ~ 9 E: ]* W5 g& b6 x |
微信公众号
手机版
不知道STM32的官方开发人员,整2套定义的目的,难道直是为了区别固件库和CUBE库?
两个定义不一样,为什么分家啊