KEILMDK和STM32的数据类型之入门篇_第1页
KEILMDK和STM32的数据类型之入门篇_第2页
KEILMDK和STM32的数据类型之入门篇_第3页
KEILMDK和STM32的数据类型之入门篇_第4页
KEILMDK和STM32的数据类型之入门篇_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、stm32 数据类型入门篇keil mdk和 stm32 的数据类型之入门篇编程过程中,不同的mcu 或编不译器,其数据类型的意义各不相同,所以一定要注意相应变量数据类型的定义和转换,否则在程序编译时候会出错。在 keli mdk数据类型中进了如下定义char 占用 1 个字节short int占用 2 字节int占用 4 字节long 占用 4 字节long int占用 4 字节float占用 4 字节double 占用 8 字节即有如下宏定义typedef unsigned char uint8; / 无符号 8 位字符型变量typedef signed char int8; / 有符号

2、8 位字符型变量typedef unsigned short uint16; / 无符号 16 位短整型变量typedef signed short int16; / 有符号 16 位短整型变量typedef unsigned int uint32; / 无符号 32 位整型变量typedef signed int int32; / 有符号 32 位整型变量typedef float fp32; / 单精度浮点数( 32 位长度)typedef double fp64; / 双精度浮点数( 64 位长度)注: c语言中的种类数据:整型:int short long 实型: float, dou

3、ble 。其中, unsigned 为无符号, signed 有符号。stm32 数据类型入门篇 stm32的数据类型的宏定义stm32 采用了大量的固件库,其中在2.0 库中有 24 个数据类型如下typedef unsigned char u8;/*无符号 8 位变量 */0255一字节typedef signed char s8;/*有符号 8 位变量 */-128127typedef volatile unsigned char vu8;/* 易变的 8 位无符号变量 */typedef volatile signed char vs8;/* 易变的 8 位有符号变量 */typede

4、f unsigned char const uc8; /* 只读的 8 位无符号变量 */typedef signed char const sc8; /* 只读的 8 位有符号变量 */typedef volatile unsigned char const vuc8; /* 易变只读的8 位无符变量 */typedef volatile signed char const vsc8; /* 易变只读8 位有符号变量 */typedef unsigned short u16; /*16位短整型无符号变量*/065535两字节typedef signed short s16; /*16位短整型

5、有符号变量*/-3276832767两字节typedef volatile unsigned short vu16;typedef volatile signed short vs16; typedef unsigned short const uc16; /* read only */typedef signed short const sc16; /* read only */typedef signed short const sc16; /* read only */typedef volatile unsigned short const vuc16; /* read only */

6、 typedef volatile signed short const vsc16; /* read only */ typedef unsigned long u32; /*32位长整型无符号变量*/0(232-1)四字节typedef signed long s32; /*(-232)/2 (-232)/2-1四字节typedef volatile unsigned long vu32; typedef volatile signed long vs32; typedef unsigned long const uc32; /* read only */typedef signed lo

7、ng const sc32; /* read only */typedef volatile unsigned long const vuc32; /* read only */typedef volatile signed long const vsc32; /* read only */ 对部分数据类型后面作了注释,其它类型类推。对于float int编译器中不能看到其定义(估计已编译了)。stm32 数据类型入门篇 不同类型数据的混合运算在c语言中,不同类型的数据间是可以混合运算的。在进行运算时,不同类型的数据要先转换成同一类型,然后进行运算。转换的规则如下:注意:箭头的方向只表示数据类

8、型级别的高低,由低向高转换,这个转换过程是一步到位的。 数据类型转换规则各类数据类型的转换,分为两种方式:隐式(编译软件自动完成),显式(程序强制转换) 隐式转换规则:字符必须先转换为整数 (c 语言规定字符类型数据和整型数据之间可以通用) short 型转换为 int型( 同属于整型 ) float型数据在运算时一律转换为双精度(double) 型,以提高运算精度 ( 同属于实型 ) 赋值时,一律是右部值转换为左部类型注:当整型数据和双精度数据进行运算时,c先将整型数据转换成双精度型数据,再进行运算,结果为双精度类型数据当字符型数据和实型数据进行运算时,c先将字符型数据转换成实型数据,然后进

9、行计算,结果为实型数据 显式转换规则:例: (int)(x+y); 注:强制类型转换时,得到一个所需要的中间变量,原来变量的类型未发生变化stm32 数据类型入门篇关于两个关键词说明 volatile const(1)volatile :这个关键字,很多人只知道用,不知道其含义,有介绍解释是不易被编译器优化的。在 stm32 资料中解释加了易挥发的变量。这些解释都是含糊不清的。为此笔者专门查了下这个修饰关键字含义通俗的解释:随时会改变,并被多函数调用可以加volatile修饰。简称易变变量或易挥发变量。表示这个变量的真的很容易变。进阶解释 :加了这个 volatile意义就是在每次取这个变量值

10、的时候,要求不是取它上次在某个时候取的临时缓存变量(比如说暂存在某个寄存器中),而是直接到内存中取。个人经验:告诉编译器 ,volatile定义的变量必须 ram 变量. 不能是寄存器变量 . 尤其是中断中用全局变量。(2)const: 在定义变量时候,如果加上关键词const ,则变量的值在程序运行期间不能改变,当然不能再赋值了。 这种变量称为常变量(constant variable) 或是只读变量(read-only-variable,这样觉得更恰当)。stm32 数据类型入门篇stm32f10 x_stdperiph_driver 3.0 以后的版本中使用了cmsis数据类型3.0 以

11、后版本与之前版本变量的定义有所不同,但是出于兼容旧版本的目的,以上的数据类型仍然兼容。cmsis的 io 类型限定词如表 3 所示, cmsis和 stm32固件库的数据类型对比如表 5 所示。这些数据类型可以在stm32f10 x_stdperiph_lib_v3.4.0librariescmsiscm3devicesupportststm32f10 x stm32f10 x.h中找到具体的定义。数据类型和 io类型限定词cortex-mx hal使用标准 ansi c 头文件 定义的标准类型。特别用类型限定词io来访问外设的变量。表3 数据类型限定词io。io类型限定词#define 描述

12、_i volatile const 只读访问_o volatile 只写访问_io volatile 读和写访问st从库包中移除了文件”stm32f10 x_type.h ”,新的库使用cmsis 和 定义的数据类型。表5展示了 stm32f10 xxx和 之间数据类型的一一对应关系。表5 stm32f10 xxx固件库 v2.0.3 与 cmsis 数据类型对比stm32f10 xxx固件库类型cmsis 类型描述s32 int32_t 有符号 32位数据s16 int16_t 有符号 16位数据s8 int8_t 有符号 8位数据sc32 const int32_t 只读有符号 32位数据

13、sc16 const int16_t 只读有符号 16位数据sc8 const int8_t 只读有符号 8位数据vs32 _io int32_t 易挥发读写访问有符号32位数据vs16 _io int16_t 易挥发读写访问有符号16位数据vs8 _io int8_t 易挥发读写访问有符号8位数据vsc32 _i int32_t 易挥发只读有符号32位数据vsc16 _i int16_t 易挥发只读有符号16位数据vsc8 _i int8_t 易挥发只读有符号8位数据u32 uint32_t 无符号 32位数据u16 uint16_t 无符号 16位数据u8 uint8_t 无符号 8位数据

14、stm32 数据类型入门篇uc32 const uint32_t 只读无符号 32位数据uc16 const uint16_t 只读无符号 16位数据uc8 const uint8_t 只读无符号 8位数据vu32 _io uint32_t 易挥发读写访问无符号32位数据vu16 _io uint16_t 易挥发读写访问无符号16位数据vu8 _io uint8_t 易挥发读写访问无符号8位数据vuc32 _i uint32_t 易挥发只读无符号32位数据vuc16 _i uint16_t 易挥发只读无符号16位数据vuc8 _i uint8_t 易挥发只读无符号8位数据注意出于兼容旧版本的目的文件”stm32f10 x.h ”中仍然定义了 stm32f10 xxx 固件库原有数据类型。文件”stm32f10 x.h ”中也定义了 stm32f10 xxx 固件库专用类型 . 它们是 :typedef enum false = 0, true = !false bool; typedef enum reset

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论