野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 23048|回复: 6

题主小白,编译基于FreeRTOS系统的STM32工程时,出现的问题

[复制链接]
发表于 2021-2-21 10:08:39 | 显示全部楼层 |阅读模式
本帖最后由 qimianlangya 于 2021-2-21 10:59 编辑

    在学习《FreeRTOS 内核实现与应用开发实战指南》一书时,使用配套的源码练习,但在编译时出现了问题,问题如下:              
    1 选择配套源码的某个项目,例如《01-Fire-F407霸天虎-FreeRTOS-LED》,直接编译无问题;
    2 在”bsp_debug_usart.h"中添加
        #include "FreeRTOS.h"
        #include "task.h"
        如下图:

图2

图2

    3 再次编译,则出现大量错误,如下图:
   

图1

图1

    4 题主愚钝,猜测可能是头文件互相包含出了问题,希望大佬能指点一下,感激不尽。




回复

使用道具 举报

 楼主| 发表于 2021-2-21 11:01:00 | 显示全部楼层
我在GitHub上下了一些相关代码,按照上面的改法,编译没有问题。
回复 支持 反对

使用道具 举报

发表于 2021-2-22 09:13:55 | 显示全部楼层
把头文件的引用放到.c文件里试试
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 20:24:27 | 显示全部楼层
ZZZ_XXJ 发表于 2021-2-22 09:13
把头文件的引用放到.c文件里试试

    感谢答复!
    试了下,将
        #include "FreeRTOS.h"
        #include "task.h"  
    放在"bsp_debug_usart.c"中没有问题,但我的目的是想在.c中定义一些变量,同时在.h中声明其为外部(extern)变量,因此必须要在.h中包含头文件。
    今天咨询了淘宝的客服,回答得很简单,答复说:缺哪个头文件,就补哪个......
   
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-22 20:31:58 | 显示全部楼层
本帖最后由 qimianlangya 于 2021-2-22 20:33 编辑
ZZZ_XXJ 发表于 2021-2-22 09:13
把头文件的引用放到.c文件里试试

    比如说图2中的错误:
        ..\..\FreeRTOS\include\list.h(184): error:  #20: identifier "TickType_t" is undefined
    TickType_t 定义在“portmacro.h”文件中,        
    "portable.h"包含了“portmacro.h”
    "FreeRTOS.h"包含了"portable.h"
    因此我 #include "FreeRTOS.h"了应该是没问题的,又去参考其它家产品的代码,也是这么写的,但是没有问题。
    如果可以的话,麻烦版主找下野火的某个工程,试着编译一下,感激不尽。
回复 支持 反对

使用道具 举报

发表于 2021-2-22 22:17:51 | 显示全部楼层
看起来可能是重复包含了
其实.c中自己定义的全局变量在其他文件里使用的时候,只需要在.h里把变量声明成extern,然后在其他用到这个变量的.c文件中包含对应的.h文件就可以了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-2-23 14:54:13 来自手机 | 显示全部楼层
ZZZ_XXJ 发表于 2021-2-22 22:17
看起来可能是重复包含了
其实.c中自己定义的全局变量在其他文件里使用的时候,只需要在.h里把变量声明成ext ...

又搞了一天,还是不行,只能求助官方,准备给野火官方发一封邮件,期待有回复。
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-18 13:01 , Processed in 0.030365 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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