找回密码
 立即注册
查看: 98|回复: 5

使用Freertos demo问题求解----已解决

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-11 10:39:10
已绑定手机

14

主题

4

回帖

116

积分

注册会员

积分
116
发表于 2025-3-25 13:56:49 | 显示全部楼层 |阅读模式
使用型号:STC32G12K128
在用你们的Freertos demo 做项目时开始编译正常,
后来不知道怎么调的,在编译putchar.c 这个文件时,总是报putchar这个函数重复定义,
我用搜索功能搜索putchar,只在putchar.c和sdio.h有定义,这两个文件都没有动过。感觉没有重复定义。请问这是什么原因。

回复

使用道具 举报 送花

3

主题

1160

回帖

1031

积分

等待验证会员

积分
1031
发表于 2025-3-25 13:58:00 | 显示全部楼层
在使用FreeRTOS Demo进行项目开发时,遇到putchar函数重复定义的问题,可能涉及以下几个方面的原因。以下是对该问题的详细分析和解决方案。

1. 检查头文件包含顺序
首先,确保在putchar.c和sdio.h文件中,putchar函数的定义和声明是唯一的。如果这两个文件没有被修改过,那么问题可能出在头文件的包含顺序上。如果某个头文件在包含sdio.h之前已经包含了其他定义了putchar函数的头文件,可能会导致重复定义。

解决方案:
检查所有源文件中的头文件包含顺序,确保sdio.h在其他可能定义putchar函数的头文件之前被包含。
如果putchar函数是标准库函数,确保没有在项目中其他位置重新定义该函数。

2. 检查编译器设置
某些编译器可能会在编译过程中自动包含标准库函数,这可能导致putchar函数的重复定义。特别是如果编译器设置为自动链接标准库,而项目中又手动定义了putchar函数,就会产生冲突。

解决方案:
检查编译器的设置,确保没有自动包含标准库函数。
如果项目需要自定义putchar函数,可以考虑将函数重命名为myputchar或其他唯一名称,以避免与标准库函数冲突。

3. 检查宏定义
在某些情况下,宏定义可能会导致函数重复定义。例如,如果putchar被定义为宏,而项目中有多处使用该宏,编译器可能会认为该函数被重复定义。

解决方案:
检查项目中是否有putchar的宏定义,如果有,确保该宏定义在需要的地方被正确使用,或者取消宏定义,直接使用函数。

4. 检查链接脚本
链接脚本中可能指定了某些库或函数的重复链接,这也会导致putchar函数的重复定义。

解决方案:
检查项目的链接脚本,确保没有重复链接包含putchar函数的库。

5. 使用extern关键字
如果putchar函数在多个源文件中使用,确保在头文件中使用extern关键字声明该函数,以避免重复定义。

解决方案:
在sdio.h文件中,使用extern关键字声明putchar函数,例如:
  1. c
  2.   extern int putchar(int c);
复制代码
在putchar.c文件中定义该函数。

6. 清理和重建项目
有时候,编译器的中间文件可能会导致编译错误。清理项目并重新编译可能解决这个问题。

解决方案:
清理项目,删除所有中间文件和编译输出,然后重新编译项目。

总结
putchar函数重复定义的问题可能由多种原因引起,包括头文件包含顺序、编译器设置、宏定义、链接脚本等。通过仔细检查和调整上述方面,可以有效解决该问题。如果问题仍然存在,建议逐步排查,确保每个环节都符合预期。

[本文内容由国芯人工智能辅助生成,仅供参考]
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:415
  • 最近打卡:2025-04-30 09:58:34
已绑定手机

39

主题

2006

回帖

6841

积分

论坛元老

积分
6841
发表于 2025-3-25 14:55:50 | 显示全部楼层
检查一下 putchar.c 文件的设置是否有被修改:
截图202503251454257602.jpg

点评

感谢!问题解决了  发表于 2025-3-25 15:12
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:12
  • 最近打卡:2025-04-11 10:39:10
已绑定手机

14

主题

4

回帖

116

积分

注册会员

积分
116
发表于 2025-3-25 16:28:56 | 显示全部楼层
乘风*** 发表于 2025-3-25 14:55
检查一下 putchar.c 文件的设置是否有被修改:

我碰到这样一个现象,以FreeRTOS DEMO为模板建了一个新项目,建了9个任务,比demo 的8个任务多一个任务,用软件仿真的时候,单步运行,程序会跑到while(1); demo软件仿真不会,停在vTaskStartScheduler();。因为没在硬件上跑,还不确定是什么问题。你们移植的FreeRTOS可以运行几个任务。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-05-01 13:00:01

0

主题

52

回帖

1280

积分

金牌会员

积分
1280
发表于 2025-3-28 16:43:04 | 显示全部楼层
乘风*** 发表于 2025-3-25 14:55
检查一下 putchar.c 文件的设置是否有被修改:

赞一个,碰到类似的问题,提示函数被重新定义,把红框里的对勾去掉后编译就好了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-5-2 00:19 , Processed in 0.117404 second(s), 78 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表