已知 STM32F4的 GPIOA 的IDR 地址是 0x40020010
int n=*( (volatile long *) 0x40020010);
请问下 第一个指针 和 第2个volatile long *指针有什么区别?
(volatile long *) 改成(volatile int *) 效果一样。为什么?
我做了一个实验:
*(GPIO_TypeDef *)0x40000000 = 57.5d;
结果出错:
RTE qq.c(25):错误:#513:无法将类型“double”的值分配给类型为“GPIO_TypeDef”的实体
猜想:
57.5d是“double”类型
那么应该是先 *0x40000000 指向0x40000000这个地址, 再把57.5d 给(GPIO_TypeDef *)
int n=*( (volatile long *) 0x40020010);
那应该是先 *0x40020010 这个地址,取出 volatile long 类型给左值。不知对不对?
0x40020c14是GPIOA->ODR的地址。
*( (volatile long *) 0x40020c14)=0x0A;
* (char* )0x40020c14 = 0x01<<12;
GPIOA->ODR =0x01;
* (char* )0x40020c14 = 0xFFFF;//出现一个警告,不能把int类型给char类型,,,,溢出
*(int *)(0x40000000+0x200fff) = 0xffff;
地址我试了下可以把地址改成表达式。
我想问下二级指针是什么样子的?怎么用, 二级指针就是双指针吗?
有大神普及下吗?万分感谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>