a= *(volatile u8 *)0x00000020中 0x0000_0020是32位的。
整体含义 :将内存地址 0x00000020
处的8位无符号值读取出来,并赋值给变量 a
。
(volatile u8 *)
是一种类型转换,用于将一个值转换为指向 volatile u8
类型的指针。在C和C++编程中,这种语法通常用于直接访问特定的内存地址,尤其在嵌入式系统或底层硬件编程中非常常见。
同时,也能通过*(volatile u8 *) = 0x12,对该地址写入数据。
volatile
在C语言中,volatile
是一个关键字,用于告诉编译器某个变量的值可能会在程序的控制之外被改变。它通常被用在嵌入式编程中,与硬件寄存器、内存映射区域或者信号处理等相关的代码中。
volatile
的作用
volatile
告诉编译器:
- 禁止优化 :不要对带有
volatile
的变量进行优化,必须每次访问都从内存中读取或写入,而不能使用寄存器缓存等方式。 - 防止指令重排序 :编译器不能调整对
volatile
变量的访问顺序,以确保按照程序代码的顺序执行。