SEGGER Embedded Studio找不到xxx.c或者xxx.h文件

这篇博客主要介绍了在使用IDE时遇到的找不到.c和.h文件的常见问题及其解决方案。作者指出,新版本的Nordic SDK(NCS)不再支持旧的IDE,推荐使用VSCode+插件。对于找不到.c文件,问题可能出在文件路径上,需要检查文件的完整路径是否正确。对于找不到.h文件,需要检查工程配置中的include路径是否包含了头文件所在的目录。通过修改这些设置,可以有效解决找不到源代码文件的错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

感觉这个IDE有点坑,Nordic新的SDK——NCS已经不再支持这个软件了,改用了VSCode+插件的方式,不过旧的芯片因为工程问题更换不太可能。

找不到.c

首先说找不到.c的问题,在某次使用的时候发现明明左边文件列表里面有.c却在编译的时候显示找不到.c,原因是文件路径。

首先我在某个demo中添加了一些官方的文件,比如官方的跑马灯demo里面可能没有用到pwm,我想省事就直接在官方demo中添加了官方相关的.c文件。

注意,某些情况下找不到相关文件时,注意文件路径:

右键该文件,选择Options:

注意这里的File Name,是否使用了你工程的文件夹,因为我发现有时候这个文件夹如果改过名字,这里有可能不会更新,那你只能把所有找不到的文件再添加一遍。

找不到.h

打开工程配置:

选择common:

查看当前工程的所有include路径:

双击查看报错找不到的.h所在文件夹是否被添加进去了。 

 

 

 

<think>嗯,用户遇到了链接错误,提示几个与TWI相关的函数未定义。首先,我需要确定这些函数属于哪个库。看起来像是nRF SDK中的TWI驱动问题。用户可能没有正确包含或链接相应的驱动文件。 接下来,检查是否在代码中正确包含了头文件,比如nrf_drv_twi.h或者nrfx_twim.h。如果头文件缺失,编译器不会报错,但链接时会不到函数定义。 然后,考虑链接器配置。用户是否在项目中添加了对应的源文件,比如nrf_drv_twi.c或nrfx_twim.c?如果没有,链接器无法到这些函数的实现,导致undefined symbol错误。 另外,SDK版本可能也是一个问题。不同版本的SDK中函数名称可能有变化,比如从nrf_drv_到nrfx_的重构。用户可能混合使用了新旧版本的API,导致函数名不匹配。 还要看看是否启用了TWI驱动模块的配置宏,比如在sdk_config.h中定义NRFX_TWIM_ENABLED或类似的宏,确保驱动被编译进去。 最后,建议用户检查Makefile或工程配置中的源文件路径是否正确,确保所有必要的驱动文件都被正确包含和编译。如果使用Segger Embedded Studio,可能需要手动添加文件到项目结构中。</think>这个链接错误表明在编译nRF52832项目时,与TWI(Two-Wire Interface,即I²C)驱动相关的符号未到。以下是分步解决方案: **1. 确认驱动文件包含** - 检查是否在`main.c`或`mpu6050.c`中正确包含头文件: ```c #include "nrfx_twim.h" // 新版本SDK使用nrfx系列驱动 // 或 #include "nrf_drv_twi.h" // 旧版本SDK使用nrf_drv系列驱动 ``` **2. 验证SDK版本兼容性** ```diff ! 关键注意:nrf_drv_* 和 nrfx_* 是不同SDK版本的API: - nRF5 SDK v15.x及更早 → 使用nrf_drv_twi_init() - nRF5 SDK v17.x及更新 → 使用nrfx_twim_xxx() ``` 检查`sdk_config.h`中的配置: ```c #define NRFX_TWIM_ENABLED 1 // 必须启用TWIM驱动 #define TWI_ENABLED 1 // 旧版SDK需要此配置 ``` **3. 添加缺失的驱动文件** 在工程中确保包含以下实现文件: - 新版SDK:`nrfx_twim.c`(路径:`components/drivers_nrf/nrfx/`) - 旧版SDK:`nrf_drv_twi.c`(路径:`components/drivers_nrf/twi/`) **4. 检查链接器配置** 确保Makefile/CMakeLists包含正确的库路径: ```makefile SRC_FILES += $(SDK_ROOT)/modules/nrfx/drivers/src/nrfx_twim.c ``` **5. 验证函数调用一致性** ```c // 旧版调用方式(nrf_drv_) ret_code_t err_code = nrf_drv_twi_init(&m_twi, &config, event_handler, NULL); // 新版调用方式(nrfx_) ret_code_t err_code = nrfx_twim_init(&m_twi, &config, event_handler, NULL); nrfx_twim_enable(&m_twi); // 注意新版本需要显式启用 ``` **6. 排查内存分配问题** 检查TWI实例是否正确定义: ```c // 必须全局声明(不能在栈内分配) static const nrfx_twim_t m_twi = NRFX_TWIM_INSTANCE(0); ``` **补充建议:** - 使用`SEGGER Embedded Studio`时,右键工程 → "Add Existing File" 添加驱动文件 - 执行`Build Analyzer`查看未解析符号的完整依赖链 - 如果混合使用SDK版本,推荐使用`nrfx v2.0+`并参考Nordic官方迁移指南 完成以上步骤后,建议执行`Rebuild All`而非增量编译,以确保所有依赖关系正确解析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值