OpenEdv-开源电子网

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

原子哥给的STemwin相关的例程用一段时间就卡了

[复制链接]

18

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-8-22
在线时间
82 小时
发表于 2015-11-23 22:07:19 | 显示全部楼层 |阅读模式
5金钱
如题   原子哥给的STemwin例程用一段时间就卡了(未做任何修改),再点屏幕就没反应了,就比如XBF字体那章   之前用F1的板子也出现过这种情况,  不知道为什么

最佳答案

查看完整内容[请看2#楼]

 修正下bug 触摸屏9147早期的代码有个bug,要在触摸屏扫描函数里面,加入放错误数据处理. 代码如下: [mw_shl_code=c,true]//扫描触摸屏(采用查询方式) //mode:0,正常扫描. //返回值:当前触屏状态. //0,触屏无触摸;1,触屏有触摸 u8 GT9147_Scan(u8 mode) { u8 buf[4]; u8 i=0; u8 res=0; u8 temp; u8 tempsta; static u8 t=0;//控制查询间隔,从而降低CPU占用率 t++; if((t%10)==0||t<10) ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165391
金钱
165391
注册时间
2010-12-1
在线时间
2112 小时
发表于 2015-11-23 22:07:20 | 显示全部楼层
 修正下bug
触摸屏9147早期的代码有个bug,要在触摸屏扫描函数里面,加入放错误数据处理.
代码如下:

[mw_shl_code=c,true]//扫描触摸屏(采用查询方式) //mode:0,正常扫描. //返回值:当前触屏状态. //0,触屏无触摸;1,触屏有触摸 u8 GT9147_Scan(u8 mode) { u8 buf[4]; u8 i=0; u8 res=0; u8 temp; u8 tempsta; static u8 t=0;//控制查询间隔,从而降低CPU占用率 t++; if((t%10)==0||t<10)//空闲时,每进入10次CTP_Scan函数才检测1次,从而节省CPU使用率 { GT9147_RD_Reg(GT_GSTID_REG,&mode,1); //读取触摸点的状态 if(mode&0X80&&((mode&0XF)<6)) { temp=0; GT9147_WR_Reg(GT_GSTID_REG,&temp,1);//清标志 } if((mode&0XF)&&((mode&0XF)<6)) { temp=0XFF<<(mode&0XF); //将点的个数转换为1的位数,匹配tp_dev.sta定义 tempsta=tp_dev.sta; //保存当前的tp_dev.sta值 tp_dev.sta=(~temp)|TP_PRES_DOWN|TP_CATH_PRES; tp_dev.x[4]=tp_dev.x[0]; //保存触点0的数据 tp_dev.y[4]=tp_dev.y[0]; for(i=0;i<5;i++) { if(tp_dev.sta&(1<<i)) //触摸有效? { GT9147_RD_Reg(GT9147_TPX_TBL,buf,4); //读取XY坐标值 if(tp_dev.touchtype&0X01)//横屏 { tp_dev.y=((u16)buf[1]<<8)+buf[0]; tp_dev.x=800-(((u16)buf[3]<<8)+buf[2]); }else { tp_dev.x=((u16)buf[1]<<8)+buf[0]; tp_dev.y=((u16)buf[3]<<8)+buf[2]; } //printf("x[%d]:%d,y[%d]:%d\r\n",i,tp_dev.x,i,tp_dev.y); } } res=1; if(tp_dev.x[0]>lcddev.width||tp_dev.y[0]>lcddev.height)//非法数据(坐标超出了) { if((mode&0XF)>1) //有其他点有数据,则复第二个触点的数据到第一个触点. { tp_dev.x[0]=tp_dev.x[1]; tp_dev.y[0]=tp_dev.y[1]; t=0; //触发一次,则会最少连续监测10次,从而提高命中率 }else //非法数据,则忽略此次数据(还原原来的) { tp_dev.x[0]=tp_dev.x[4]; tp_dev.y[0]=tp_dev.y[4]; mode=0X80; tp_dev.sta=tempsta; //恢复tp_dev.sta } }else t=0; //触发一次,则会最少连续监测10次,从而提高命中率 } } if((mode&0X8F)==0X80)//无触摸点按下 { if(tp_dev.sta&TP_PRES_DOWN) //之前是被按下的 { tp_dev.sta&=~(1<<7); //标记按键松开 }else //之前就没有被按下 { tp_dev.x[0]=0xffff; tp_dev.y[0]=0xffff; tp_dev.sta&=0XE0; //清除点有效标记 } } if(t>240)t=10;//重新从10开始计数 return res; } [/mw_shl_code]

我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

2

主题

9

帖子

0

精华

新手上路

积分
27
金钱
27
注册时间
2016-3-21
在线时间
8 小时
发表于 2016-3-21 12:27:06 | 显示全部楼层
遇到的问题和楼主情况一样,可是我的GT9147_Scan函数就是这个啊,一样会出现运行一段时间后就卡死的问题,请问楼主或者原子哥,如何解决?
回复

使用道具 举报

18

主题

65

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
419
金钱
419
注册时间
2015-8-22
在线时间
82 小时
 楼主| 发表于 2016-3-21 19:31:54 | 显示全部楼层
fourfires 发表于 2016-3-21 12:27
遇到的问题和楼主情况一样,可是我的GT9147_Scan函数就是这个啊,一样会出现运行一段时间后就卡死的问题, ...

其实我这个问题一直也没解决    有时候好使有时候不行
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-3 22:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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