#define PERIPH_BASE ((u32)0x40000000)//端口地址
#define APB2PERIPH_BASE (PERIPH_BASE + 0x10000)//端口地址
#define GPIOA_BASE (APB2PERIPH_BASE + 0x0800)//端口地址
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)//不明白,这个预定义
//把GPIOA_BASE看成指向GPIO_TypeDef结构体的指针吗,GPIOA代表一个指针变量吗
int main()
{
typedef unsigned long u32;
typedef volatile unsigned long vu32;// volatile是什么意思
typedef struct
{
vu32 CRL;
vu32 CRH;
vu32 IDR;
vu32 ODR;
vu32 BSRR;
vu32 BRR;
vu32 LCKR;
} GPIO_TypeDef;
GPIOA->ODR = 0x1111;// GPIOA能直接指向GPIO_TypeDef结构体的成员ODR吗
}
有加分,急!
请讲的具体一些
谢谢
请高手解释一下下面程序
答案:2 悬赏:0 手机版
解决时间 2021-03-15 07:52
- 提问者网友:箛茗
- 2021-03-14 15:01
最佳答案
- 五星知识达人网友:woshuo
- 2021-03-14 15:30
#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE)
GPIOA的一个宏而已.
给后面的GPIOA->ODR = 0x1111;用的,其实就是一种指针的使用
/////////////////////////////////////////////////
这两句话.改成好理解的就是
GPIO_TypeDef * GPIOA;
GPIOA = (GPIO_TypeDef *) GPIOA_BASE; GPIOA_BASE表示指针指向的地方
类似 GPIOA = (GPIO_TypeDef *)1000;,
既然gpioa是指针当然可以 GPIOA->ODR了
//////////////////////////////////
typedef volatile unsigned long vu32;// volatile是什么意思
搞嵌入式的都知道 volatile 表示可变的.
也就是说这个变量可能在中断中访问,,仿真编译器优化读写vu32这个变量
GPIOA的一个宏而已.
给后面的GPIOA->ODR = 0x1111;用的,其实就是一种指针的使用
/////////////////////////////////////////////////
这两句话.改成好理解的就是
GPIO_TypeDef * GPIOA;
GPIOA = (GPIO_TypeDef *) GPIOA_BASE; GPIOA_BASE表示指针指向的地方
类似 GPIOA = (GPIO_TypeDef *)1000;,
既然gpioa是指针当然可以 GPIOA->ODR了
//////////////////////////////////
typedef volatile unsigned long vu32;// volatile是什么意思
搞嵌入式的都知道 volatile 表示可变的.
也就是说这个变量可能在中断中访问,,仿真编译器优化读写vu32这个变量
全部回答
- 1楼网友:持酒劝斜阳
- 2021-03-14 15:47
首先解释一下
void test(int a, int& b) //这里a和b是形参,其中a是传值形参(只向内传数据,而内部发生的变化不带到外边),b是引用方式,属于变参,能将内部发生的变化
{
a -= a * (a < 0) + (a > 0); //相当于a = a-(a * (a < 0) + (a > 0));其中若a>0,那么a<0为0,a>0为1,;否则相反。
if (a != 0)
b = a;
else
a = 10;
}
接着解释主程序:
x=-2
y=3
调用test(x, y)后,内部a=-2,b=3
a = a-(a * (a < 0) + (a > 0));相当于a=-2-(-2*(-2<0)+(-2>0)------a=-2-(-2*1+0)-----a=0
接着的条件语言使得:a=10,b=3
函数完成后,a的变化不带出函数体外,而b没有改变,所以x=-2,y=3
调用test(y,x)后,内部a=3,b=-2
a = a-(a * (a < 0) + (a > 0));相当于a=3-(3*(3<0)+(3>0)------a=3-(3*0+1)-----a=2
接着调用条件语句,由于a=2不为0,所以b=a,也就是b=2
函数完成后,a的值不带到函数外边,所以对应的y还是3,而b发生了变化,并要讲改变带到函数体外给对应的变量x,所以x的值为b的值,即x=2.
注意:在c语言中,引用相当于指针,也只有指针才属于变参,其他都为值参。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯