有关ARM得C语言问题,诚心请教!

来源:百度知道 编辑:UC知道 时间:2024/05/29 14:20:24
指令行为:
#define GetAddr(addr) (volatile uint6 *)(FLASH_ADDR|(addr<<1))

这后面的(volatile uint6 *)(FLASH_ADDR|(addr<<1)) 是什么意思啊?

这里面的FLASH_ADDR显然是个宏定义,应该是定义的flash地址,前面的uint6是个类型,具体是什么类型,要看代码里的定义。这个宏的意思就是把给出的地址左移1位之后与FLASH_ADDR定义的值按位或,结果强制转换成volatile unit6类型的指针。
volatile的意思是易变的,这个关键字是告诉编译器,当前声明的变量可能经常改变,这样强制编译器不要对他进行优化操作。
详细的你可以看
http://tieba.baidu.com/f?kz=231946806

(volatile uint6 *) 无符号整形变量指针
(FLASH_ADDR|(addr<<1)) FLASH_ADDR一个基址的宏 addr具体寄存器对基址的偏移 连起来就是对应一个地址

加上前面的就是一个地址的内容 类型为整形

有不明白的 请补充哦

goodluck

这个地址的左移一位后加上基地址宏FLASH_ADDR才是它的实际地址,一般flash划分的时候都要保留一段存放系统的bootloader等程序,后面的放配置文件等,具体看怎么放,怎么放都行。