OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 2625|回复: 6

关于函数调用的问题

[复制链接]

3

主题

9

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-6-11
在线时间
10 小时
发表于 2018-6-22 11:19:16 | 显示全部楼层 |阅读模式
10金钱
在使用stm32驱动直流电机的程序中出现了 错误:  main.c(347): warning:  #223-D: function "MOTOR_R" declared implicitly
在网上查是没有声明的问题,可是我已经在子文文件的头文件中声明了,
头文件:
[mw_shl_code=c,true]#ifndef __MOTOR__H
#define __MOTOR__H
#include "sys.h"

void Motor_Init(void);
void MOTOR_R(void);
void MOTOR_S(void);



#endif
[/mw_shl_code]

直流电机.C文件
[mw_shl_code=applescript,true]#include  "Motor.h"

void Motor_Init(void)
{       
        GPIO_InitTypeDef        GPIO_InitStrucyure;
       
        RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);  //使能时钟GPLOB
       
        GPIO_InitStrucyure.GPIO_Mode=GPIO_Mode_Out_PP;
        GPIO_InitStrucyure.GPIO_Pin=GPIO_Pin_5|GPIO_Pin_6;
        GPIO_InitStrucyure.GPIO_Speed=GPIO_Speed_50MHz;
       
        GPIO_Init(GPIOB,&GPIO_InitStrucyure);                 //初始化io口
       
        GPIO_SetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6);                      // io口默认不点亮,先将io口设置为高电

}

void MOTOR_S(void)
{

        GPIO_ResetBits(GPIOB,GPIO_Pin_5|GPIO_Pin_6);

}
void MOTOR_R(void)
{

        GPIO_SetBits(GPIOB,GPIO_Pin_5);
        GPIO_ResetBits(GPIOB,GPIO_Pin_6);

}

[/mw_shl_code]

[mw_shl_code=c,true]#include "Motor.h"
#include "stm32f10x.h"
int main (void)
{
        //LED_Init1();
        Motor_Init();
        delay_init(72);

        while(1)
        {
                MOTOR_R();
                delay_ms(1000);
                delay_ms(1000);
                delay_ms(1000);
                MOTOR_S();

                delay_ms(1000);
                delay_ms(1000);
                delay_ms(1000);

       
        }


}[/mw_shl_code]


这样就会出现错误两个
main.c(347): warning:  #223-D: function "MOTOR_R" declared implicitly
                MOTOR_R();
main.c(351): warning:  #223-D: function "MOTOR_S" declared implicitly
                MOTOR_S();



可是函数  void Motor_Init();却没有出现错误,说明调用  void Motor_Init()函数是成功的  可是为什么 MOTOR_R与MOTOR_S 不成功



正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

82

主题

589

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1255
金钱
1255
注册时间
2017-11-18
在线时间
296 小时
发表于 2018-6-22 11:23:48 | 显示全部楼层
添加头文件路径了吗?没添加的就试试
回复

使用道具 举报

2

主题

168

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
336
金钱
336
注册时间
2018-5-14
在线时间
69 小时
发表于 2018-6-22 11:58:23 | 显示全部楼层
#ifndef __MOTOR__H
#define __MOTOR__H
#include "sys.h"

void Motor_Init(void);
void MOTOR_R(void);
void MOTOR_S(void);



#endif

你这种声明……用到同一个文件内没事,跨文件调用的时候就会出问题了。
前面加个extern吧。
例如: extern void Motor_Init(void);
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-6-11
在线时间
10 小时
 楼主| 发表于 2018-6-22 15:24:15 | 显示全部楼层
kvdong 发表于 2018-6-22 11:58
#ifndef __MOTOR__H
#define __MOTOR__H
#include "sys.h"

可是  void Motor_Init(void) 调用是成功的  。为什么其余两个不行
回复

使用道具 举报

3

主题

9

帖子

0

精华

新手上路

积分
24
金钱
24
注册时间
2018-6-11
在线时间
10 小时
 楼主| 发表于 2018-6-22 15:24:40 | 显示全部楼层
美丽的时光机器 发表于 2018-6-22 11:23
添加头文件路径了吗?没添加的就试试

添加了的
回复

使用道具 举报

14

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
386
金钱
386
注册时间
2016-9-5
在线时间
66 小时
发表于 2018-6-22 17:04:18 | 显示全部楼层
把那三个函数的声明都加上extern 吧,因为你在motor.c和main.c中都调用了这三个函数,你说motor_init()函数没报错,只是这次没报错,下次依然会报错的
回复

使用道具 举报

31

主题

265

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
413
金钱
413
注册时间
2018-1-9
在线时间
65 小时
发表于 2018-6-22 20:56:35 | 显示全部楼层
加extern试试。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 03:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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