乐鑫技术交流
直播中

敷衍作笑谈

9年用户 941经验值
擅长:制造/封装 连接器 光电显示 接口/总线/驱动 RF/无线
私信 关注
[问答]

基于esp-idf release v4.3 (588436db) 编译esp-at工程异常怎么处理?

信息:
芯片: ESP32-PICO-D4
ESP-AT version: release/v2.1.0.0_esp32的基础上新增了自定义指令(原本使用IDF release v4.0,但该版本不再维护,故切换到v4.3)
ESP-IDF version: release v4.3 commit:588436db47da792736dade1c21fcbf2c879456a4
(官方固件ESP32-PICO-D4_AT_Bin_V2.4.0.0.zip 基于这个版本的IDF)
工具链环境等:通过install.sh 安装 工具链 python环境 依赖包等,通过export.sh设置环境变量

编译时出现如下问题:

log:CC build/newlib/locks.o
/home/yq/esp/esp-idf/components/newlib/locks.c:240:23: error: invalid application of 'sizeof' to incomplete type 'struct __lock'
_Static_assert(sizeof(struct __lock) >= sizeof(StaticSemaphore_t),
                       ^~~~~~
/home/yq/esp/esp-idf/components/newlib/locks.c:240:16: error: expression in static assertion is not an integer
_Static_assert(sizeof(struct __lock) >= sizeof(StaticSemaphore_t),
                ^~~~~~
/home/yq/esp/esp-idf/components/newlib/locks.c: In function '__retarget_lock_init':
/home/yq/esp/esp-idf/components/newlib/locks.c:286:11: warning: assignment to '_LOCK_T' {aka 'int'} from 'void *' makes integer from pointer without a cast [-Wint-conversion]
     *lock = NULL;  /* In case lock's memory is uninitialized */
           ^
/home/yq/esp/esp-idf/components/newlib/locks.c: In function '__retarget_lock_init_recursive':
/home/yq/esp/esp-idf/components/newlib/locks.c:292:11: warning: assignment to '_LOCK_T' {aka 'int'} from 'void *' makes integer from pointer without a cast [-Wint-conversion]
     *lock = NULL;  /* In case lock's memory is uninitialized */
           ^
In file included from /home/yq/esp/esp-idf/components/esp_common/include/esp_err.h:18,
                 from /home/yq/esp/esp-idf/components/hal/include/hal/cpu_hal.h:20,
                 from /home/yq/esp/esp-idf/components/esp_hw_support/include/soc/cpu.h:32,
                 from /home/yq/esp/esp-idf/components/newlib/locks.c:19:
/home/yq/esp/esp-idf/components/newlib/locks.c: In function 'check_lock_nonzero':
/home/yq/esp/esp-idf/components/newlib/locks.c:309:17: warning: comparison between pointer and integer
     assert(lock != NULL && "Uninitialized lock used");
                 ^~
/home/yq/esp/esp-idf/components/newlib/platform_include/assert.h:50:42: note: in definition of macro 'assert'
#define assert(__e) (__builtin_expect(!!(__e), 1) ? (void)0 : __assert_func (__FILENAME__, __LINE__,
                                          ^~~
/home/yq/esp/esp-idf/make/component_wrapper.mk:291: recipe for target 'locks.o' failed
make[1]: *** [locks.o] Error 1
/home/yq/esp/esp-idf/make/project.mk:635: recipe for target 'component-newlib-build' failed
make: *** [component-newlib-build] Error 2
                                 

回帖(1)

kasdlak

2024-6-27 17:04:49
以下是一些建议来解决这个问题:

1. 首先,请确保您的ESP-IDF v4.3和ESP-AT工程是兼容的。由于您提到之前使用的是ESP-IDF v4.0,可能存在一些不兼容的问题。建议您查看ESP-AT工程的文档,了解它支持的ESP-IDF版本。

2. 清理编译环境:在编译之前,运行以下命令以清理之前的编译生成的文件:
   ```
   make clean
   ```

3. 检查环境变量:确保您的环境变量设置正确。您可以在终端中运行以下命令来检查环境变量:
   ```
   printenv
   ```
   确保`IDF_PATH`指向您的ESP-IDF v4.3目录。

4. 更新ESP-IDF:尝试更新您的ESP-IDF到最新版本,以解决可能的已知问题。您可以使用以下命令:
   ```
   cd ~/esp/esp-idf
   git pull
   git checkout release/v4.3
   ./install.sh
   ./export.sh
   ```

5. 检查代码:检查您的ESP-AT工程中的`locks.c`文件,确保没有语法错误或其他问题。错误信息提示在第240行,可能需要您手动检查该行代码。


举报

更多回帖

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