OpenEdv-开源电子网

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

变量定义问题

[复制链接]

31

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-3-29
在线时间
0 小时
发表于 2013-5-3 20:43:51 | 显示全部楼层 |阅读模式
在定时器中断程序中使用的一个变量,在主程序中也要用到,这个变量要怎样定义呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

71

主题

183

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
494
金钱
494
注册时间
2013-1-29
在线时间
1 小时
发表于 2013-5-3 21:05:03 | 显示全部楼层
回复 支持 反对

使用道具 举报

31

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-3-29
在线时间
0 小时
 楼主| 发表于 2013-5-4 14:02:39 | 显示全部楼层
我在main.c里面定义了u16 cnt;在timer.h里面声明extern u16 cnt;然后在main.c需要读一下它,而在timer.c的一个中断程序里需要对其进行加减操作,我这样使用有什么问题吗?我调试的时候到中断那就不运行了,并且cnt的值变的很奇怪。

我一开始是这样设置的,直接在timer.c里定义了u16 cnt;只在timer.c的中断里使用了它,是没有问题的。
 
请指点一下。
回复 支持 反对

使用道具 举报

31

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-3-29
在线时间
0 小时
 楼主| 发表于 2013-5-4 17:20:30 | 显示全部楼层
回复【2楼】langwanglx:
---------------------------------
我在main.c里面定义了u16 cnt;在timer.h里面声明extern u16 cnt;然后在main.c需要读一下它,而在timer.c的一个中断程序里需要对其进行加减操作,我这样使用有什么问题吗?我调试的时候到中断那就不运行了,并且cnt的值变的很奇怪。 

我一开始是这样设置的,直接在timer.c里定义了u16 cnt;只在timer.c的中断里使用了它,是没有问题的。 
  
请指点一下。
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-4 21:15:57 | 显示全部楼层
回复【4楼】murongyiruo:
---------------------------------
你这个不运行是死机了?
程序跑哪里去了?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

31

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-3-29
在线时间
0 小时
 楼主| 发表于 2013-5-5 14:07:08 | 显示全部楼层
回复【5楼】正点原子:
---------------------------------
HardFault_Handler\
                ROC
                EXPORT  HardFault_Handler         [WEAK]
                B       .
                ENDP
  
原子哥,程序就进入这里面了。我在下面贴下图。
回复 支持 反对

使用道具 举报

31

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-3-29
在线时间
0 小时
 楼主| 发表于 2013-5-5 14:11:48 | 显示全部楼层
main.c里涉及到的程序部分是
volatile u16 round;
while(1)
{
   delay_ms(1000);
currentCount = TIM3 -> CNT;
printf("编码器%d,计数值为:%d \n",round,currentCount+1);
}
timer.c中断程序是
    void TIM3_IRQHandler(void) { if(TIM3->SR&0X0001)//溢出中断 round++; printf("圈数为:%d \n",round); TIM3->CNT = COUNTER_RESET; TIM3->SR&=~(1<<0);//清除中断标志位 } timer.h中 extern u16 round;
然后硬件调试,进入中断后,继续运行,就出现了下面的情况








回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-5 15:28:57 | 显示全部楼层
是不是你的printf有问题
我看你的中断服务函数,没问题啊.
是不是printf启用了发送完成中断?
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

31

主题

58

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
202
金钱
202
注册时间
2013-3-29
在线时间
0 小时
 楼主| 发表于 2013-5-6 10:09:45 | 显示全部楼层
回复【8楼】正点原子:
---------------------------------
我也不清楚,我现在只能把round定义在timer.c中,不在main.c里使用了,不过这不是我想要的效果
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-5-6 10:53:05 | 显示全部楼层
检查下看看,你这进入hardfault了,很可能是中断没有服务函数。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-21 15:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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