OpenEdv-开源电子网

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

在STM32上移植UCOSII+UCGUI,触摸屏光标不能跟随触点移动

[复制链接]

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
发表于 2014-8-4 20:07:48 | 显示全部楼层 |阅读模式
5金钱
我首先单独在STM32上成功移植了UCOSII、UCGUI.
而且裸机移植UCGUI的时候触摸屏已经正常工作,光标随触点移动了

但是当我将UDOSII和UCGUI同时移植到STM32上之后,
能模糊看到光标会闪烁
但是不随触点移动, 这个是咋回事

我建立了四个任务,

void Task_LED(void *p_arg)
{
  LED_GPIO_Config();
  OSTaskCreate(Task_LCD,(void *)0,
               &lcd_task_stk[LCD_TASK_STK_SIZE - 1],LCD_TASK_PRIO);
  OSTaskCreate(Task_Touch,(void *)0,
               &Touch_task_stk[TOUCH_TASK_STK_SIZE - 1],TOUCH_TASK_PRIO);
  OSTaskCreate(Task_Check_Touch,(void *)0,
                &CheckTouch_task_stk[CHECK_TOUCH_TASK_STK_SIZE - 1],CHECK_TOUCH_TASK_PRIO);

   p_arg=p_arg;
    while(1)
    {
      
      LED1(ON);
      OSTimeDlyHMSM(0,0,0,500);
      LED1(OFF); 
      
      LED2(ON);
      OSTimeDlyHMSM(0,0,0,500);
      LED2(OFF);

    }
}


void Task_Touch(void *p_arg){
    TP_Init();
   p_arg=p_arg;
   while(1)
    {
      GUI_CURSOR_Show();
      OSTimeDlyHMSM(0,0,0,100);

    }

}

void Task_Check_Touch(void *p_arg){
   p_arg=p_arg;
   while(1)
    {
      GUI_TOUCH_Exec();
      OSTimeDlyHMSM(0,0,0,20);

    }

}

void Task_LCD(void *p_arg){
 GUI_Init();
 GUI_SetBkColor(GUI_WHITE);

 GUI_SetColor(GUI_RED);
 GUI_Clear();
   GUI_SetFont(&GUI_Font32B_ASCII);
   GUI_DispStringAt("ColorBar - ", 0, 5);
   p_arg=p_arg;
   while(1)
    {
       GUI_DispStringAt("ColorBar - ", 0, 5); 
      OSTimeDlyHMSM(0,0,5,500);

    }

}

此外,我改写了延时函数
//延时nus
//nus为要延时的us数.       
void delay_us(u32 nus)
{
  OSTimeDlyHMSM(0,0,0,1); //1MS代替us延时    
}
//延时nms
//nms:要延时的ms数
void delay_ms(u16 nms)
{
 OSTimeDlyHMSM(0,0,0,1);
}

没有出现死机现象,但是光标就是不会随触点移动, 能看到光标在闪烁, 


这个是什么原因,
这是源码

STM32_UCGUI_UCOSII成功.zip

2.85 MB, 下载次数: 268

最佳答案

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

 回复【2楼】 5498折戟沉沙 : --------------------------------- 误操作,直接发送了 很简单撒,因为你没有建立相应的任务进行重绘  建立一个如下的任务  while(1){    GUI_Exec();    OSTimeDlyHMSM(0,0,0,100); } 另外你其他几个任务也有问题,修改如下 void Task_Touch(void *p_arg){     TP_Init();    p_arg=p_arg;  GUI_CURSOR_Show( ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-8-4 20:07:49 | 显示全部楼层
 回复【2楼】 5498折戟沉沙 :
---------------------------------
误操作,直接发送了


很简单撒,因为你没有建立相应的任务进行重绘 

建立一个如下的任务 
while(1){ 
  GUI_Exec(); 
  OSTimeDlyHMSM(0,0,0,100);
}


另外你其他几个任务也有问题,修改如下
void Task_Touch(void *p_arg){
    TP_Init();
   p_arg=p_arg;
 GUI_CURSOR_Show();   //开启即可,不必放入while中,故该任务可与其他任务合并
   while(1)
    {
      
      OSTimeDlyHMSM(0,0,0,100);

    }

}

void Task_Check_Touch(void *p_arg){
   p_arg=p_arg;
   while(1)
    {
      GUI_TOUCH_Exec();
      OSTimeDlyHMSM(0,0,0,20);

    }

}

void Task_LCD(void *p_arg){
 GUI_Init();
 GUI_SetBkColor(GUI_WHITE);

 GUI_SetColor(GUI_RED);
 GUI_Clear();
   GUI_SetFont(&GUI_Font32B_ASCII);
   GUI_DispStringAt("ColorBar - ", 0, 5);
   p_arg=p_arg;  
 GUI_DispStringAt("ColorBar - ", 0, 5);   //开启即可,不必放入while中,故该任务可与其他任务合并
 //GUI实际应用中,这些显示字符串的程序一般都是放在DIALOG的用户级回调函数响应WM_PAINT消息处
   while(1)
    {
       
      OSTimeDlyHMSM(0,0,5,500);

    }

}



努力,前进。
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-8-4 20:22:58 | 显示全部楼层
很简单撒,因为你没有建立相应的任务进行重绘

建立一个如下的任务
while(1){
  GUI_Exec();

}
努力,前进。
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-8-4 20:31:25 | 显示全部楼层
回复【3楼】5498折戟沉沙:
---------------------------------
//如下是DIALOG用户级回调函数对WM_PAINT消息的处理,可在此处插入显示在DIALOG的字符
void _cb(WM_MESSAGE *pMsg)
{
  switch(pMsg->MsgId){
    case WM_PAINT:
      //在此处插入那些显示字符、画线、画圆等的代码
      break;
   ......
  }
}
努力,前进。
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-4 21:25:24 | 显示全部楼层
回复【3楼】5498折戟沉沙:
------------------------------
非常感谢,
回复

使用道具 举报

20

主题

562

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
670
金钱
670
注册时间
2012-2-28
在线时间
0 小时
发表于 2014-8-4 22:29:12 | 显示全部楼层
回复【5楼】wang12zhe:
---------------------------------
记得加延时,见3楼完整的回复
努力,前进。
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-6 14:31:18 | 显示全部楼层
回复【6楼】5498折戟沉沙:
---------------------------------
好的 谢谢,慢慢摸索中
回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-12-25
在线时间
0 小时
发表于 2014-8-11 16:35:01 | 显示全部楼层
楼主,我是新手,我想移植ucgui,这个怎么入门啊,你们当初学的时候是只看文档,还是有视频啊,求助啊
回复

使用道具 举报

190

主题

401

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1289
金钱
1289
注册时间
2014-6-15
在线时间
143 小时
 楼主| 发表于 2014-8-11 19:48:53 | 显示全部楼层
回复【8楼】1989despair:
---------------------------------
其实移植UCGUI很简单的,只要你准备好屏幕驱动,就改几个地方就行了 
这是我的博客,转载的有相关的文章
http://blog.csdn.net/niepangu/article/details/38150447

移植好之后,就根据应用需求做相应的开发
回复

使用道具 举报

1

主题

18

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2013-12-25
在线时间
0 小时
发表于 2014-8-12 10:03:29 | 显示全部楼层
回复【9楼】wang12zhe:
---------------------------------
嗯,谢谢楼主
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-1 10:20

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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