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文章
5363瀏覽量
120931 -
C語言
+關注
關注
180文章
7614瀏覽量
137415 -
變量
+關注
關注
0文章
613瀏覽量
28441 -
數組
+關注
關注
1文章
417瀏覽量
26000 -
CONST
+關注
關注
0文章
45瀏覽量
8179
發布評論請先 登錄
相關推薦
評論