乐鑫技术交流
直播中

洒下墨色

9年用户 917经验值
擅长:可编程逻辑 嵌入式技术
私信 关注
[问答]

ESP-IDF adc_dma读取多个通道值,一直编译不过是怎么回事?

ret = adc_digi_controller_config(&dig_cfg);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~
../main/adc_dma_example_main.c: At top level:
../main/adc_dma_example_main.c:47:36: error: unknown type name 'adc_digi_output_data_t'
static bool check_valid_data(const adc_digi_output_data_t *data)
                                    ^~~~~~~~~~~~~~~~~~~~~~
../main/adc_dma_example_main.c: In function 'check_valid_data':
../main/adc_dma_example_main.c:49:35: error: request for member 'type2' in something not a structure or union
     const unsigned int unit = data->type2.unit;
                                   ^~
../main/adc_dma_example_main.c:51:13: error: request for member 'type2' in something not a structure or union
     if (data->type2.channel >= SOC_ADC_CHANNEL_NUM(unit)) return false;
             ^~
../main/adc_dma_example_main.c: In function 'continuous_read':
../main/adc_dma_example_main.c:68:5: error: implicit declaration of function 'adc_digi_start' [-Werror=implicit-function-declaration]
     adc_digi_start();
     ^~~~~~~~~~~~~~
../main/adc_dma_example_main.c:72:15: error: implicit declaration of function 'adc_digi_read_bytes' [-Werror=implicit-function-declaration]
         ret = adc_digi_read_bytes(result, TIMES, &ret_num, ADC_MAX_DELAY);
               ^~~~~~~~~~~~~~~~~~~
../main/adc_dma_example_main.c:72:60: error: 'ADC_MAX_DELAY' undeclared (first use in this function); did you mean 'portMAX_DELAY'?
         ret = adc_digi_read_bytes(result, TIMES, &ret_num, ADC_MAX_DELAY);
                                                            ^~~~~~~~~~~~~
                                                            portMAX_DELAY
../main/adc_dma_example_main.c:72:60: note: each undeclared identifier is reported only once for each function it appears in
../main/adc_dma_example_main.c:74:13: error: unknown type name 'adc_digi_output_data_t'
             adc_digi_output_data_t *p = (void*)&result[i];
             ^~~~~~~~~~~~~~~~~~~~~~
../main/adc_dma_example_main.c:76:45: error: request for member 'type2' in something not a structure or union
                 printf("ADC%d_CH%d: %xn", p->type2.unit+1, p->type2.channel, p->type2.data);
                                             ^~
../main/adc_dma_example_main.c:76:62: error: request for member 'type2' in something not a structure or union
                 printf("ADC%d_CH%d: %xn", p->type2.unit+1, p->type2.channel, p->type2.data);
                                                              ^~
../main/adc_dma_example_main.c:76:80: error: request for member 'type2' in something not a structure or union
                 printf("ADC%d_CH%d: %xn", p->type2.unit+1, p->type2.channel, p->type2.data);
                                                                                ^~
../main/adc_dma_example_main.c:78:54: error: request for member 'type2' in something not a structure or union
                 printf("Invalid data [%d_%d_%x]n", p->type2.unit+1, p->type2.channel, p->type2.data);
                                                      ^~
../main/adc_dma_example_main.c:78:71: error: request for member 'type2' in something not a structure or union
                 printf("Invalid data [%d_%d_%x]n", p->type2.unit+1, p->type2.channel, p->type2.data);
                                                                       ^~
../main/adc_dma_example_main.c:78:89: error: request for member 'type2' in something not a structure or union
                 printf("Invalid data [%d_%d_%x]n", p->type2.unit+1, p->type2.channel, p->type2.data);
                                                                                         ^~
../main/adc_dma_example_main.c:84:5: error: implicit declaration of function 'adc_digi_stop'; did you mean 'esp_timer_stop'? [-Werror=implicit-function-declaration]
     adc_digi_stop();
     ^~~~~~~~~~~~~
     esp_timer_stop
../main/adc_dma_example_main.c:85:11: error: implicit declaration of function 'adc_digi_deinitialize' [-Werror=implicit-function-declaration]
     ret = adc_digi_deinitialize();
           ^~~~~~~~~~~~~~~~~~~~~
../main/adc_dma_example_main.c: In function 'single_read':
../main/adc_dma_example_main.c:97:23: error: 'ADC_WIDTH_BIT_DEFAULT' undeclared (first use in this function); did you mean 'ADC_WIDTH_BIT_12'?
     adc1_config_width(ADC_WIDTH_BIT_DEFAULT);
                       ^~~~~~~~~~~~~~~~~~~~~
                       ADC_WIDTH_BIT_12
cc1: some warnings being treated as errors
[849/902] Linking CXX static library esp-idf/wpa_supplicant/libwpa_supplicant.a
ninja: build stopped: subcommand failed.
ninja failed with exit code 1
                                                                                                                                                                  

回帖(1)

京五环以外

2024-6-17 17:49:56
看起来你在尝试使用ESP-IDF的ADC DMA功能来读取多个通道的值,但是在编译过程中遇到了一些问题。根据你提供的错误信息,问题主要出现在两个方面:

1. `adc_digi_controller_config`函数调用错误。
2. `adc_digi_output_data_t`类型未定义。

让我们逐一解决这些问题。

### 1. `adc_digi_controller_config`函数调用错误

错误信息提示你在调用`adc_digi_controller_config`函数时出现了问题。这可能是因为你使用了错误的语法或者参数。请确保你已经包含了正确的头文件,并且正确地初始化了`adc_digi_config_t`结构体。例如:

```c
#include "driver/adc.h"

adc_digi_config_t dig_cfg = {
    .conversation_mode = ADC_DIGI_CONV_SINGLE_UNIT_1,
    .sample_freq_hz = 1000,
    .adc1_data_id = 1,
    .adc2_data_id = 2,
};

esp_err_t ret = adc_digi_controller_config(&dig_cfg);
```

### 2. `adc_digi_output_data_t`类型未定义

这个错误表明编译器找不到`adc_digi_output_data_t`类型的定义。这可能是因为你缺少了相应的头文件。通常,这个类型定义在`driver/adc.h`中。确保你已经包含了这个头文件:

```c
#include "driver/adc.h"
```

如果包含了头文件后仍然出现问题,可能是因为你的ESP-IDF版本不支持这个类型。请检查你的ESP-IDF版本是否是最新的,或者查看相关的文档和示例代码以确保你的使用是正确的。

### 3. 检查示例代码

如果你仍然遇到问题,可以尝试查看ESP-IDF的官方示例代码,以确保你的代码结构和调用是正确的。ESP-IDF的示例代码通常可以在以下路径找到:

```
your_esp_idf_directory/examples
```

在这些示例中,你可以找到关于如何正确使用ADC DMA功能的示例。

### 4. 清理并重新编译

有时候,编译错误可能是由于之前的编译过程中的一些问题导致的。尝试清理你的项目并重新编译:

```bash
make clean
make
```

或者如果你使用的是IDE,可以尝试清理项目并重新构建。

希望这些建议能帮助你解决问题。如果问题仍然存在,请提供更多的代码和上下文信息,以便进一步分析。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分