目录
概述
1 嵌入式C的数据类型
2 嵌入式C语言存储类型
2.1 auto存储类型
2.2 extern存储类型
2.3 register存储类型
2.4 static存储类型
概述
本文主要介绍嵌入式C语言中的数据变量的类型,包括其数据长度,在内存中的存储方式。还介绍了数据的存储类型的相关内容。
1 嵌入式C的数据类型
数据类型主要用来之门变量的存储大小,即一个类型变量占用了多大的内存空间,嵌入式C的数据类型包括如下这些:
1)基本数据类型(32位MCU)
整形数据类型
类型 | 数值范围 |
---|---|
short int | -32768 ~ 32768 |
unsigned short int | 0~65535 |
int | -2 147 483 648 ~ 2 147 483 647 |
unsigned int | 0 ~ 4 294 967 295 |
long int | -2 147 483 648 ~ 2 147 483 647 |
unsigned long int | 0 ~ 4 294 967 295 |
浮点类型
float: 单精度浮点数
double: 双精度浮点数
long double: 扩展精度浮点数
字符型
char: 该类型变量可以用任意的单字符赋值
char ch;ch = 'a';
ch = '1';
ch = '-';
字符型数据也可以分为:
有符合字符: 字符范围(-128 ~ 127 )
无符号字符 :字符范围(0 ~ 255 )
2)用户自定义数据类型
自定义类型包括:
类型 | 说明 |
---|---|
struct | 结构体定义 |
enum | 枚举型数据 |
typedef | 类型重定义 |
union | 联合型定义 |
2 嵌入式C语言存储类型
2.1 auto存储类型
auto只能用来标识变量的存储类型,意义上是自动类型,标识该局部变量存储在正在运行的进程栈区域。一般情况,对于局部变量,auto为默认的存储类型,不需要显示指定。
局部变量的特点:
1)局部变量的作用域在一队{ }类,生存周期为当前函数
2)局部变量如果没有被初始化,系统将会为其分配一个随机值
2.2 extern存储类型
extern关键字,既可以标识变量,也可以标识函数。
标识变量:用来声明当前文件中的引用,该变量已经被初始化到数据区。所以,声明其他文件中的变量,内存不在为其分配存储区。
标识函数:存贮类型仅仅标记函数的作用域,函数默认的存储方式为extern。也就是说,在一个项目中,没有一个文件中函数没有被声明函数类型,该函数可以被项目中所有的函数引用。
2.3 register存储类型
register关键字只能用来标识变量,被标识为register类型的数据只能为整形和字符型。此关键字只用来标识长期被使用的变量。
普通变量和register变量的差异:
1)普通变量: 在运行程序时,所有的数据都将调入到MCU的寄存器中才能被真正的处理,而由于CPU的寄存器有限,普通的变量存储在内存单元中,只有在使用时,才能加载到CPU的寄存器中,使用完成后,立即清除掉。
2)register类型变量: register类型的变量常驻在CPU的寄存器中
register类型数据的特点:
从内存加载摸个数据到CPU的寄存器至少需要一个周期,访问寄存器类型的变量将在很大程度上提高效率。
和auto类型一样,未初始化的register类型变量,也会被分配一个随机值。
2.4 static存储类型
static为静态类型,既可以标识变量,也可以表示函数。被声明为静态类型的变量(无论是全局变量还是局部变量)存储在数据区,其生命周期为整个运行程序的周期。
如果该变量在{ } 内,其作用域聚在该{ }内;如果在变量时一个全局变量,其作用域在当前文件。
静态变量没有被初始化,将会被自动初始化为0。