leddrv.c是怎么访问到结构体变量board_demo_led_opr的?
时间: 2024-03-07 22:47:58 浏览: 25
在leddrv.c文件中,我们可以通过extern关键字引用led_operations类型的结构体变量board_demo_led_opr,从而访问该结构体中的操作函数。具体代码如下:
```
#include "led.h"
// 引用board_demo_led_opr结构体
extern struct led_operations board_demo_led_opr;
void led_init()
{
// 调用board_demo_led_opr结构体中的init函数
board_demo_led_opr.init();
}
void led_on()
{
// 调用board_demo_led_opr结构体中的ctl函数
board_demo_led_opr.ctl(LED_ON);
}
void led_off()
{
// 调用board_demo_led_opr结构体中的ctl函数
board_demo_led_opr.ctl(LED_OFF);
}
```
因为board_demo_led_opr结构体是在board.c文件中定义的,而在leddrv.c文件中无法直接访问该结构体,所以需要使用extern关键字来引用该结构体。这样,就可以通过board_demo_led_opr结构体中的init、ctl等函数来控制LED的开关、亮度等。
相关问题
首先定义并初始化了一个led_operations类型的结构体变量board_demo_led_opr,然后将该结构体变量的地址通过返回值返回给调用该函数的文件,即leddrv.c文件。
对的,您说的很正确。代码中的函数led_operations *board_demo_led_ops(void)定义了一个返回值为led_operations类型指针的函数,该函数返回一个led_operations类型的结构体变量board_demo_led_opr的地址。这样,当leddrv.c文件调用board_demo_led_ops函数时,就可以获得board_demo_led_opr结构体变量的地址,从而通过该结构体变量访问结构体中的操作函数。
调用此函数是为了让leddrv.c访问led_operation结构体
是的,调用该函数的目的是将led_operation结构体的指针传递给leddrv.c文件,以便leddrv.c文件可以通过该指针访问led_operation结构体中的操作函数,从而控制LED灯的开关、亮度等。
在该函数中,首先定义并初始化了一个led_operations类型的结构体变量board_demo_led_opr,然后将该结构体变量的地址通过返回值返回给调用该函数的文件,即leddrv.c文件。这样,leddrv.c文件就可以通过该指针来访问board_demo_led_opr结构体中的操作函数了。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)