OpenEdv-开源电子网

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

调用子函数与主函数实现效果怎么不一样??

[复制链接]

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-8-2
在线时间
0 小时
发表于 2014-8-7 11:06:16 | 显示全部楼层 |阅读模式
5金钱
有一个电机驱动的程序,一开始写在主函数中达到预期效果。
但是我写成子函数调用的时候实现的效果却不一样,为什么呀??还有变量是在子函数.c文件定义还是在.h文件里定义呀??

这是主函数:
#include "PWM_start.h"
#include "PWM_start_updown.h"

 int main(void)
 {

delay_init();     
NVIC_Configuration(); 
uart_init(9600);
  LED_Init();       
  TIM3_PWM_Init();

  WM_start_updown();
  while(1)
  {
  }
}
这是子函数:
#include "PWM_start_updown.h"
#include "delay.h"
#include "usart.h"
#include "timer.h"

void PWM_start_updown(void)
{
u16 PWM=17880;
u8 dir=1;
delay_ms(1000);
TIM_SetCompare2(TIM3,19080);
delay_ms(5000);
while(1)
{
if(dir)PWM++;
else PWM--;

  if(PWM==19080)dir=0;
if(PWM==17880)dir=1;
TIM_SetCompare2(TIM3,PWM);
}
}
是不是变量定义位置的问题呀?


如果直接写在主函数里面就可以达到效果:
 int main(void)
 {
u16 PWM=17880;
u8 dir=1;  
delay_init();    
NVIC_Configuration(); 
uart_init(9600); 
  LED_Init();     
  TIM3_PWM_Init();
 
delay_ms(1000);
TIM_SetCompare2(TIM3,19080);
delay_ms(5000);
while(1)
{
if(dir)PWM++;
else PWM--;

  if(PWM==19080)dir=0;
if(PWM==17880)dir=1;
TIM_SetCompare2(TIM3,PWM);
}

}
为什么呀??求解大神、、

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

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-8-2
在线时间
0 小时
 楼主| 发表于 2014-8-7 11:37:07 | 显示全部楼层
似乎只要是子函数里涉及到变量的都有点问题,如果不涉及变量,引用子函数与主函数实现一致、、、
回复

使用道具 举报

11

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2014-8-4
在线时间
14 小时
发表于 2014-8-7 20:05:05 | 显示全部楼层
局部变量加static
生命不息,学习不止
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-8-7 23:00:26 | 显示全部楼层
回复【2楼】、太陽好大:
---------------------------------
你这不是局部变量的问题.
仿真一下看看吧.
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

11

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2014-8-4
在线时间
14 小时
发表于 2014-8-8 09:33:15 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
子函数一直没有被释放,所以局部变量还是一直有效的
生命不息,学习不止
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-8-2
在线时间
0 小时
 楼主| 发表于 2014-8-8 12:15:19 | 显示全部楼层
回复【5楼】liuzhenwei2014:
---------------------------------
我加了static还是不行,子函数一直没有被释放,程序一直在死循环里面,变量还会被重复初始化吗??
回复

使用道具 举报

3

主题

10

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2014-8-2
在线时间
0 小时
 楼主| 发表于 2014-8-8 12:19:12 | 显示全部楼层
回复【4楼】正点原子:
---------------------------------
我测试的时候,听电机转,感觉变量隔一段时间会被重新初始化、、、
回复

使用道具 举报

11

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2014-8-4
在线时间
14 小时
发表于 2014-8-8 19:20:02 | 显示全部楼层
回复【7楼】、太陽好大:
---------------------------------
听原子哥的仿真看变量变化
生命不息,学习不止
回复

使用道具 举报

0

主题

77

帖子

0

精华

初级会员

Rank: 2

积分
144
金钱
144
注册时间
2014-6-7
在线时间
7 小时
发表于 2014-8-8 19:41:25 | 显示全部楼层
如果你真想呆在子函数里不出来,建议你把子函数中的变量都放到main或者设成全局变量,还是先仿真下,光凭感觉不好说
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-4 02:51

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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