乐鑫技术交流
直播中

张燕

8年用户 1464经验值
私信 关注
[问答]

cdc repl编译失败怎么解决?

master分支,使用cdc作为console输出,增加repl功能,编译报错如下,有什么好的解决办法。Code: Select all
esp-idf/components/esp_system/port/soc/esp32s3/usb_console.c:69:1: error: static assertion failed: "usb_osglue_*_int is not multicore capable" _Static_assert(SOC_CPU_CORES_NUM == 1, "usb_osglue_*_int is not multicore capable");

回帖(1)

杨海清

2024-6-14 17:17:12
根据您提供的错误信息,这个编译错误是由于在多核处理器上使用了不支持多核的USB OS glue中断处理函数。错误提示是:“usb_osglue_*_int is not multicore capable”。

要解决这个问题,您可以尝试以下步骤:

1. 确认您的ESP32-S3设备是否支持多核。根据ESP32-S3的技术规格,它确实支持多核处理。

2. 检查您的项目配置。确保您在项目的`sdkconfig`文件中正确设置了多核支持。您可以在`sdkconfig`文件中查找`CONFIG_FREERTOS_UNICORE`选项,确保它没有被设置为`y`。如果设置为`y`,请将其更改为`n`以启用多核支持。

3. 如果您使用的是ESP-IDF v4.4或更高版本,可以尝试使用`esp_panic_handler`来处理USB OS glue中断。在`usb_console.c`文件中,找到`usb_osglue_isr`函数,并将其替换为以下代码:

```c
void usb_osglue_isr(void *arg)
{
    esp_panic_handler(ESP_ERR_USB_GLUE, "USB OS Glue interrupt", (uint32_t) arg, 0);
}
```

4. 如果以上方法都无法解决问题,您可以尝试在`usb_console.c`文件中禁用静态断言。但请注意,这可能会导致在多核环境中出现不稳定的行为。要禁用静态断言,您可以将以下代码:

```c
_Static_assert(SOC_CPU_CORES_NUM == 1, "usb_osglue_*_int is not multicore capable");
```

替换为:

```c
// _Static_assert(SOC_CPU_CORES_NUM == 1, "usb_osglue_*_int is not multicore capable");
```

5. 重新编译您的项目,看看问题是否得到解决。

请注意,这些解决方案可能不适用于所有情况。如果您仍然遇到问题,请考虑在ESP-IDF的GitHub仓库中查找相关问题或提交一个新的issue,以便开发团队能够提供更具体的帮助。
举报

更多回帖

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