const我平时没咋用过,最近在一份代码中配置外设寄存器值的数组定义上看到用了这个,因此进行一下简单的入门学习。 在本文最后1点给出const在配置外设初始默认寄存器的用法
- const定义的是变量,不是常量。 只是其值在初始化后就不允许再改变,即const变量为只读变量
- 注意以下为以讹传讹的错误结论:定义数组时其长度必须是常量,因此不允许使用const变量。
事实是不同的运行环境结论是不一样的:
(1)我试验在arm的cortex m0好的很,在cortex m0平台上(stm32g031单片机)用const变量来定义数组长度一点问题都没有
(2)而在windows平台上面试验,const变量的确不能用来定义数组长度,编译阶段就会报错
另外,虽然结论是错误的,但因为在有的平台上的确这个结论是成立的,因此为了代码统一规范,最好就遵循不要用const变量来定义数组长度的规则
3.定义const变量时,const和具体数据类型位置可以互换,没有区别,但一般是把const放前面:
(1)一般的定义方法
const int a = 10;
(2)const和int位置互换,和上面的定义含义是一样的
int const a = 10;
4.const 和 define 的区别
(1)const定义的是变量,define定义的是常量
(2)#define在预编译阶段就展开了,不占用内存,机器只会给变量分配内存,而const定义的是变量,是占用内存的
5.定义一个const数组的方法,用来给外设做初始默认寄存器配置,该数据里面元素的数据类型是结构体
#define SOMEDEVICE_REG_CONFIG_NUM_REGS 16
typedef struct
{
unsigned char address; /* 8-bit register address */
unsigned char value; /* 8-bit register data */
} somedevice_register_t;
somedevice_register_t const somedevice_registers[SOMEDEVICE_REG_CONFIG_NUM_REGS] =
{
{ 0x00, 0x11 },
{ 0x01, 0x36 },
{ 0x02, 0x75 },
{ 0x03, 0x27 },
{ 0x04, 0x38 },
{ 0x05, 0x1F },
{ 0x06, 0x25 },
{ 0x07, 0x88 },
{ 0x08, 0x46 },
{ 0x09, 0x29 },
{ 0x0a, 0x03 },
{ 0x0b, 0x01 },
{ 0x0c, 0x40 },
{ 0x0d, 0x11 },
{ 0x0e, 0x31 },
{ 0x0f, 0x45 },
};
-
寄存器
+关注
关注
31文章
5317浏览量
120008 -
C语言
+关注
关注
180文章
7598浏览量
136199 -
变量
+关注
关注
0文章
613浏览量
28329 -
数组
+关注
关注
1文章
415浏览量
25910 -
CONST
+关注
关注
0文章
44浏览量
8149
发布评论请先 登录
相关推荐
评论