c语言stm32问题
展开全部
一句话概括,就是告诉编译器pao3这个变量里存的是一个地址值而不是一个整形变量值,虽然他们的表现形式都一致!然后再详细剖析一下上面这句C语言。“u32 *pao3”中
变量类型不是u32,而是u32*。表示变量名pao3所在地址存放的是一个地址值,如果是u32,则表示只是存放的一个32位的整形数据。而地址0x4FFF0001内存放的东西才是32位的整形数据,而这个数有可能是某个整形变量的值或是一个32位寄存器的值。赋值语句后面的(u32*)是一个强制类型转换。所赋的值必须与定义的变量一致。你也可以试试如果把那句话改为u32 *pao3=(u32)(0x4FFF0001)或是u32 *pao3=0x4FFF0001都是会报错的。编译器以为你把一个整形变量赋给了一个指针变量。然后如果你要取该寄存器(0x4FFF0001)的值,则直接取*pao即可,比如printf("%x\n",*pao),如果是在计算机中,你会得到显示13247A1A.
威孚半导体技术
2024-08-19 广告
2024-08-19 广告
威孚(苏州)半导体技术有限公司是一家专注生产、研发、销售晶圆传输设备整机模块(EFEM/SORTER)及核心零部件的高科技半导体公司。公司核心团队均拥有多年半导体行业从业经验,其中技术团队成员博士、硕士学历占比80%以上,依托丰富的软件底层...
点击进入详情页
本回答由威孚半导体技术提供
展开全部
#define
Bank1_LCD_C
((uint32_t)0x60000000)
0x60000000地址是一个无符号32位数,
(__IO
uint16_t
*)
(Bank1_LCD_C)将0x60000000地址转换成指向一个类型为__IO
uint16_t的指针。
*(__IO
uint16_t
*)
括号前面的*号是取值。
整句的意思是将0x60000000地址所指向的值赋值成index
Bank1_LCD_C
((uint32_t)0x60000000)
0x60000000地址是一个无符号32位数,
(__IO
uint16_t
*)
(Bank1_LCD_C)将0x60000000地址转换成指向一个类型为__IO
uint16_t的指针。
*(__IO
uint16_t
*)
括号前面的*号是取值。
整句的意思是将0x60000000地址所指向的值赋值成index
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
(u32*)(00.)表示取这个地址所存储的内容,前面的u32表示该内容代表一个无符号的32位数值。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
u32 是类型,同u16、u8类似,它是32位的。*pao3是个指针,该指针指向“存储着u32类型内容的变量”。=是赋值符,为指针*pao3赋值,赋的值为(00略这是个地址)。总体意思是:定义一个叫pao3的指针,这个指针指向的地址的内容是u32型的,给这个指针赋值为(00略这是个地址)。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这个很好解释的:
因为前面你定义了一个32位整形的指针变量,这个变量是用来存放整形数据的地址,这个地址是占4个字节的,假如你后面的地址是8位,16位,32位,它都通过u32* 强制转换成为32位的地址,用来与前面的指针类型去匹配,当然如果你的地址刚好就是32位的,也可以不需要啊,其实就只是一个强制转换的作用,没有其他的意思!
因为前面你定义了一个32位整形的指针变量,这个变量是用来存放整形数据的地址,这个地址是占4个字节的,假如你后面的地址是8位,16位,32位,它都通过u32* 强制转换成为32位的地址,用来与前面的指针类型去匹配,当然如果你的地址刚好就是32位的,也可以不需要啊,其实就只是一个强制转换的作用,没有其他的意思!
追问
为何不是(u32)呢,为什么要有那个*号。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询