数码之家

 找回密码
 立即注册
搜索
查看: 1882|回复: 11

[STM] 奇怪的编译问题,问题解决

[复制链接]
发表于 2023-5-9 22:46:11 | 显示全部楼层 |阅读模式
本帖最后由 595953427@qq 于 2023-5-9 23:37 编辑

为了实现这个配置向导,在gpio.c里面定义了两个数组GPIO_RCC和GPIO_PROT,在gpio.h中声明了这两个数组,在main.h中包含了gpio.h,每个.h文件都包含了main.h。
在另一个工程中编译是没有问题的,运行也正常。
奇怪的是这个工程,在led.c和key.c中引用了GPIO_RCC和GPIO_PROT,编译报错会提示找不到定义的两个数组,从左边的文件夹来看led.c已经包含了gpio.h,且通过编译预处理#ifndef _gpio_h_ 和#endif 也可以看出已经定义过_gpio_h_了,第4行和第5行的颜色要淡一些,并不是涂了黄色,下面也有涂了黄色的,字体颜色是要黑一些的。
如果在#include "led.h"下一行写上#include "gpio.h"也是会编译出错,提示找不到GPIO_RCC和GPIO_PORT这两个数组。
只有把这两个数组的声明写到led.c和key.c里面引用之前才可以编译成功。编译成功之后程序运行正常。

工程打包网盘下载

感谢4楼 mmxx2015 提示

问题解决的工程打包网盘下载



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
 楼主| 发表于 2023-5-9 22:47:26 | 显示全部楼层
话说这个配置向导真心好用,同一个功能运行在不同的PCB板上,不同的PCB板引脚配置是不同的,用这个来快速配置IO实在是太方便了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-9 22:52:14 | 显示全部楼层
在这个用了FreeRTOS的工程里面,只是把gpio.h包含到main.h里面就可以了,编译不会提示找不到GPIO_RCC和GPIO_PORT这两个数组。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2023-5-9 23:12:53 | 显示全部楼层
这是重复定义_gpio_h_导致的,把.h中的定义或gpio.h中的这个宏定义改一下就行了。


我习惯以文件名来定义这种宏,如
  1. #ifndef BIT_BAND_C_HEADER
  2. #define BIT_BAND_C_HEADER
  3. ……
  4. #endif //BIT_BAND_C_HEADER
复制代码
这样重复定义的几率很低。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

打赏

参与人数 1家元 +30 收起 理由
595953427@qq + 30 精彩回帖

查看全部打赏

回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2023-5-9 23:22:13 | 显示全部楼层
只要名字是唯一的,不会出现重复定义的情况,就算有重复定义,编译的时候会报错的。
不过有可能bit_band.h的问题,我再看一下程序。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-9 23:25:22 | 显示全部楼层
mmxx2015 发表于 2023-5-9 23:12
这是重复定义_gpio_h_导致的,把.h中的定义或gpio.h中的这个宏定义改一下就行了。


果然是这个文件的问题,左边是很久之前写的,右边是后来写的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

发表于 2023-5-10 07:18:28 | 显示全部楼层
"在main.h中包含了gpio.h,每个.h文件都包含了main.h"

这种习惯其实很不好,交叉包含,虽然有#ifndef, 会把包含关系搞的很乱,我一般是main.h包含子模块的.h,反之尽量不包含
回复 支持 0 反对 0

使用道具 举报

发表于 2023-5-14 00:52:01 | 显示全部楼层
请教这个配置向导是怎么弄的,好久没搞STM32了,这是Kell的功能吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-14 10:10:14 来自手机浏览器 | 显示全部楼层
40560335 发表于 2023-5-14 00:52
请教这个配置向导是怎么弄的,好久没搞STM32了,这是Kell的功能吗?

这个是keil自带的功能,8051和ARM都能用
回复 支持 反对

使用道具 举报

发表于 2023-5-16 22:51:40 | 显示全部楼层
595953427@qq 发表于 2023-5-14 10:10
这个是keil自带的功能,8051和ARM都能用

这是新版本才有的功能吗?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-17 00:11:46 | 显示全部楼层
40560335 发表于 2023-5-16 22:51
这是新版本才有的功能吗?

应该一直就有的功能吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-17 00:37:37 | 显示全部楼层
keil的帮助里面搜索 Configuration Wizard 就可以找到

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复 支持 反对

使用道具 举报

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

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-4 02:55 , Processed in 0.124800 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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