OpenEdv-开源电子网

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

两个功能互相冲突,怎么办?

[复制链接]

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
发表于 2016-5-24 11:29:15 | 显示全部楼层 |阅读模式
本帖最后由 xuande 于 2016-5-24 11:43 编辑

各位大神,小弟在用了sprintf 函数后 ,能进入定时器中断,但是影响了LCD的显示,调试的时候数据有变化,但是无法用LCD显示。。。请问有人曾经遇到过这种情况吗?我用的是原子哥的战舰V3
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

58

主题

6294

帖子

1

精华

资深版主

Rank: 8Rank: 8

积分
11547
金钱
11547
注册时间
2014-4-1
在线时间
1316 小时
发表于 2016-5-24 11:42:50 | 显示全部楼层

两项功能发生冲突了,
基本肯定是你自己程序的事。


回复 支持 反对

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-24 12:31:48 | 显示全部楼层
是不是定制器中断里程序耗时太长了
回复 支持 反对

使用道具 举报

22

主题

751

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1605
金钱
1605
注册时间
2015-6-10
在线时间
222 小时
发表于 2016-5-24 13:36:17 | 显示全部楼层
你中断嵌套了吗
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
 楼主| 发表于 2016-5-24 15:04:22 | 显示全部楼层
xuande 发表于 2016-5-24 11:42
两项功能发生冲突了,
基本肯定是你自己程序的事。

恩,我再看看
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
 楼主| 发表于 2016-5-24 15:04:49 | 显示全部楼层
xujian468 发表于 2016-5-24 12:31
是不是定制器中断里程序耗时太长了

网上也说有这种可能
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
 楼主| 发表于 2016-5-24 15:05:14 | 显示全部楼层
止天 发表于 2016-5-24 13:36
你中断嵌套了吗

恩,嵌套了
回复 支持 反对

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-24 15:22:32 | 显示全部楼层
小新手~ 发表于 2016-5-24 15:04
网上也说有这种可能

中断程序拿出来晒晒,中断里不要嵌套,不要有延时程序什么的,
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
 楼主| 发表于 2016-5-24 15:37:47 | 显示全部楼层
本帖最后由 小新手~ 于 2016-5-24 15:39 编辑
xujian468 发表于 2016-5-24 15:22
中断程序拿出来晒晒,中断里不要嵌套,不要有延时程序什么的,

void TIM3_IRQHandler(void)   
{
        if (TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET)  
                TIM_ClearITPendingBit(TIM3, TIM_IT_Update  );  
                if(flag == 0)
                {
                        float temp2;
                                
                        ds1302_data(read);                    //读取DS1302的时间
                        adcx=Get_Adc_Average(ADC_Channel_1,10);
                        LCD_ShowxNum(106,130,adcx,4,16,0);//显示ADC的值
                        temp=(float)adcx*(3.3/4096);
                        adcx=temp;
                        temp1 = (temp*(40000/21) - 2000/21);
                        LCD_ShowxNum(106,150,adcx,1,16,0);
                        LCD_ShowxNum(122,170,temp1,4,16,0);//显示气体浓度的值
                        temp-=adcx;
                        temp*=1000;
                        LCD_ShowxNum(122,150,temp,3,16,0X80);
                        adcx1 = (int)temp1;
                        temp2 = temp1 - adcx1;
                        temp2*=1000;
                  LCD_ShowxNum(162,170,temp2,3,16,0X80);//显示浓度小数部分
                        
                        LED0=!LED0;
                }
}  
回复 支持 反对

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-24 15:40:10 | 显示全部楼层
你的意思是时间到了到了中断里调用显示程序是吗?你吧显示程序拉出来不要放在中断里么,你再中断里置个标志位,然后把显示程序拉到主WHILE循环里,标志打开进入显示程序,
回复 支持 反对

使用道具 举报

29

主题

492

帖子

0

精华

高级会员

Rank: 4

积分
810
金钱
810
注册时间
2016-4-7
在线时间
123 小时
发表于 2016-5-24 15:40:48 | 显示全部楼层
中断里好多程序啊,还有加减乘除太多了,还要调用这么多子程序,
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
 楼主| 发表于 2016-5-24 16:09:36 | 显示全部楼层
xujian468 发表于 2016-5-24 15:40
中断里好多程序啊,还有加减乘除太多了,还要调用这么多子程序,

还是不行,我单步调试的时候把sprintf 这句话屏蔽掉,每次进入中断后都会有数据的更新,但是执行这句话之后,单步调试可以进入中断,数据也能更新,就是LCD不刷新显示了
回复 支持 反对

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-5-24 17:19:00 | 显示全部楼层
LCD还没show完,定时器估计又开始进入中断了。
中断里面没这么玩的,除非你进入中断后清除完中断标志,就把中断屏蔽,等处理完了再开中断。
中断只需要置位标志,然后主程序里面去读外设芯片和显示。你这程序风格没法看啊。
活到老,学到老。
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
 楼主| 发表于 2016-5-24 17:23:05 | 显示全部楼层
kingnike 发表于 2016-5-24 17:19
LCD还没show完,定时器估计又开始进入中断了。
中断里面没这么玩的,除非你进入中断后清除完中断标志,就 ...

已经改到主程序里了,但是还是不行。。。
回复 支持 反对

使用道具 举报

4

主题

290

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1130
金钱
1130
注册时间
2015-8-4
在线时间
107 小时
发表于 2016-5-24 17:26:11 | 显示全部楼层
小新手~ 发表于 2016-5-24 17:23
已经改到主程序里了,但是还是不行。。。

单步调试吧。。。然后看下程序跑飞了没有
活到老,学到老。
回复 支持 反对

使用道具 举报

2

主题

12

帖子

0

精华

新手上路

积分
39
金钱
39
注册时间
2015-11-16
在线时间
1 小时
 楼主| 发表于 2016-5-24 17:28:14 | 显示全部楼层
kingnike 发表于 2016-5-24 17:26
单步调试吧。。。然后看下程序跑飞了没有

恩。。
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-6-12 10:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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