完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
之前可以编译成功,但是开启软件i2c后编译报错。我使用git将工程还原后重新编译仍然报错,不知道是哪里出了问题,因为main.c文件我没有修改过。报错信息如下:
main.c报错部分如下:
截图如下: |
|
相关推荐
1个回答
|
|
|
我们注意到报错信息指出在main.c文件中的第326行有一个关于宏"Error_Handler"的错误。错误信息没有完整显示,但通常这种错误可能是由于宏定义问题或者函数定义问题导致的。 根据描述,问题是在开启软件I2C后出现的,并且即使用git还原工程后仍然报错。这很奇怪,因为还原后应该回到之前能编译的状态。这里可能的原因有: 1. 还原不彻底,可能有些文件没有被git跟踪,所以还原操作没有覆盖这些文件。 2. 编译环境发生了变化(比如编译器版本、配置等)。 3. 依赖项(如库文件)发生了变化。 4. 工程配置(如Makefile或IDE配置)被修改了。 由于报错信息中提到了多个文件的编译命令,包括: ../cubemx/Src/main.c ../cubemx/Src/stm32f1xx_hal_msp.c ../applications/key_embedded.c ../applications/led_embedded.c ../applications/main.c 这里有两个main.c文件,分别在cubemx/Src/和applications/目录下。这可能是问题的关键。通常,一个工程不应该有两个main.c文件,因为main函数只能有一个。 报错信息指向的是cubemx/Src/main.c的第326行。让我们看一下这个位置附近的代码(通常这个错误可能是由于缺少分号或者括号等语法错误,但这次是宏相关的错误)。 常见的错误情况: 1. 在调用宏时,可能缺少参数。 2. 宏定义本身有错误。 由于我们没有看到完整的错误信息,我猜测错误信息可能是: error: macro "Error_Handler" passed X arguments, but takes just 0 或者类似的信息。 在STM32 HAL库中,Error_Handler通常是一个无参数的宏,它可能被定义为: #define Error_Handler() _Error_Handler(__FILE__, __LINE__) 或者直接定义为: #define Error_Handler() while(1) 如果在代码中调用Error_Handler时带了参数,就会报错。 在main.c中,通常会出现这样的调用: if (HAL_Init() != HAL_OK) { Error_Handler(); } 注意,这里是无参数的。 但是,如果我们在代码中错误地写成了: Error_Handler(参数); 那么就会报错。 但是您提到您没有修改过main.c,所以可能是CubeMX生成时就有问题?或者还原的版本可能有问题? 另外,请注意,您有两个main.c文件。在applications/main.c中可能也有一个main函数,这会和cubemx/Src/main.c中的main函数冲突,导致重复定义。但这里报的是编译错误,不是链接错误,所以先解决编译错误。 建议步骤: 1. 检查报错的main.c文件的第326行(以及附近)的代码,看看Error_Handler是如何被调用的。是否带有参数?如果是,去掉参数(除非宏定义允许参数)。 2. 确认Error_Handler的宏定义。它通常在main.c的开头被定义,或者在一个头文件中(比如stm32f1xx_hal_conf.h或者main.h中)。检查这个宏的定义,看它是否接受参数。 3. 如果确认代码没有问题,那么考虑是否是因为头文件包含顺序或者宏定义冲突导致的问题。比如,可能在某个地方重新定义了Error_Handler,或者包含了不同的头文件。 另外,由于您有两个main.c文件,请确认工程设置中是否应该包含两个main.c?通常,应用程序的代码应该放在不同的文件中,并且避免出现两个main函数。 如果确实有两个main函数,则需要删除其中一个。通常CubeMX生成的main.c是必须的,而applications/main.c可能是您自己添加的,那么需要将其重命名,并且不要包含main函数,或者重新组织代码结构。 由于还原后仍然报错,请检查: - 是否完全还原?使用git status查看是否有未提交的更改。 - 清除编译产生的中间文件,重新编译(因为可能是旧的目标文件导致问题)。 操作步骤: 1. 使用git status查看是否有未提交的修改,如果有,可以暂存或丢弃。 2. 如果之前编译过,执行make clean(或者您使用的编译系统的清理命令)清除所有中间文件。 3. 重新生成代码:如果使用CubeMX,确保已经重新生成了代码(虽然还原了,但可能生成步骤遗漏)。 4. 再次编译。 如果问题依然存在,请提供更详细的错误信息(完整的错误信息)以及main.c文件第326行附近的代码(包括Error_Handler的调用和宏定义部分),这样我们可以更准确地判断问题。 要解决您遇到的编译错误,问题可能源于多个方面。以下是详细的排查步骤和解决方案: 错误原因分析
解决方案步骤 1:检查 Error_Handler 宏定义在
步骤 2:解决两个 |
|
|
|
|
只有小组成员才能发言,加入小组>>
184个成员聚集在这个小组
加入小组rtstudio是否可像keil加载ini解决虚拟串口与mcu串口通讯?
1212 浏览 0 评论
【Vision Board创客营连载体验】基于RA8D1-Vision Board的自动路径规划小车
1776 浏览 1 评论
【Vision Board创客营连载体验】基于Vision Board的垃圾分类
2156 浏览 0 评论
【Vision Board创客营连载体验】使用 Vision Board 做一个 UVC Camera
1777 浏览 0 评论
【Vision Board创客营连载体验】TinyMaix进行手写数字识别
2006 浏览 0 评论
1465浏览 5评论
在RT-Thread Studio中新建的stm32f407-atk-explorer工程运行qemu失败,是什么原因引起的?
1767浏览 3评论
为什么rt_device_read()只能读取到两个字节数据?
364浏览 3评论
连得上热点,但是ping baidu.com出现timeout,请问跟什么有关?
422浏览 3评论
421浏览 2评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-2 01:09 , Processed in 0.600497 second(s), Total 42, Slave 35 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
5215
