硬汉嵌入式论坛

 找回密码
 立即注册
查看: 8694|回复: 8
收起左侧

[emWin] STemWin5.28和emWin5.30里面新增的一个坑人bug,大家使用要特别注意

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
发表于 2016-1-11 18:58:13 | 显示全部楼层 |阅读模式
这个问题出现在emWin多任务的情况下,已经证实确实是个bug。
================================================
bug描述:
1. 当用户在一个emWin任务A里面通过函数GUI_SetColor设置了前景色后,如果
    还有一个emWin任务B执行了emWin本身的API函数,那么当返回这个任务A后
    前景色的数值就变成了0xffffff,即白色。
    简单的说,就是emWin多任务会将前景色数值改成白色。。。
================================================
测试平台:
1. V5开发板,uCOS-III +  STemWin5.28 + FatFS的工程。
2. V6开发板,RTX + emWin5.30  + FlashFS。
================================================
测试软件:
任务A里面调用一个简单画板功能:

void MainTask(void)
{
    GUI_PID_STATE PIDState;

    GUI_Init();                                  /* 初始化    */
    GUI_SetDrawMode(GUI_DM_NORMAL);
    GUI_SetBkColor(GUI_WHITE);   /* 设置背景色 */
    GUI_SetColor(GUI_BLUE);         /* 设置前景色,特别注意这里----------*/
    GUI_Clear();
    GUI_SetFont(&GUI_Font24B_1);
    GUI_DispStringAt("Draw Panel", 0, 0);

    /*
        连续读取5次,因为emWin的PID输入管理器含有一个FIFO缓冲器,
    默认情况下最多可以保存5个PID事件,下面连续读取5次相当于清空FIFO.
    防止触摸校准的时点击的点显示到画板上面。
    */
    GUI_PID_GetState(&ampIDState);
    GUI_PID_GetState(&ampIDState);
    GUI_PID_GetState(&ampIDState);
    GUI_PID_GetState(&ampIDState);
    GUI_PID_GetState(&ampIDState);

    while(1)
    {
        GUI_PID_GetState(&ampIDState);
        if (PIDState.Pressed == 1)
        {
            GUI_SetPenSize(5);
            /* 为了防止游标不显示或者不跟着移动,这里添加如下函数 */
            GUI_CURSOR_SetPosition(PIDState.x, PIDState.y);
            GUI_DrawPoint(PIDState.x, PIDState.y);
        }
        GUI_Delay(1);
    }
}
任务B里面调用一下函数:
printf("K3键按下,GUI_GetColor = %x\r\n", GUI_GetColor());
此时前景色的数值已经变成0xffffff了。。
=====================================================
对于这个bug,暂时还没有找到根本原因,怀疑是多任务的时候前景色的全局变量被修改了。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
 楼主| 发表于 2016-1-11 19:14:36 | 显示全部楼层
当前的解决办法是,如果用户使用了emWin多任务,那么在需要绘制前景色的API函数前一定要再次设置一下前景色。
回复

使用道具 举报

2

主题

10

回帖

16

积分

新手上路

积分
16
发表于 2016-1-11 20:56:50 | 显示全部楼层
如何下载emwin,我用atmel的芯片,不会下载emwin
回复

使用道具 举报

7

主题

69

回帖

90

积分

初级会员

积分
90
发表于 2016-1-11 23:10:56 | 显示全部楼层
保存环境
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
 楼主| 发表于 2016-1-11 23:12:26 | 显示全部楼层

回 peterlao 的帖子

peterlao:保存环境 (2016-01-11 23:10) 
[s:142]谢谢提点。
回复

使用道具 举报

3

主题

4

回帖

13

积分

新手上路

不想变好的大坏蛋

积分
13
发表于 2016-1-16 13:19:33 | 显示全部楼层
求一个ucosIII+STemWin5.28的demo,我用裸机能跑,加上ucosIII就出问题,还想还是内存的问题。
不想变好的大坏蛋
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115804
QQ
 楼主| 发表于 2016-1-17 15:15:28 | 显示全部楼层

回 sunxing0210 的帖子

sunxing0210:求一个ucosIII+STemWin5.28的demo,我用裸机能跑,加上ucosIII就出问题,还想还是内存的问题。 (2016-01-16 13:19) 
V5开发板网盘里面STemWin教程配套的例程都是。
回复

使用道具 举报

218

主题

1106

回帖

1770

积分

至尊会员

More we do, more we can do.

积分
1770
发表于 2016-1-19 09:34:11 | 显示全部楼层
可以使用GUI_GetColorIndex()检查是否是同一个值。
回复

使用道具 举报

5

主题

16

回帖

31

积分

新手上路

积分
31
发表于 2017-3-14 20:31:53 | 显示全部楼层
正在学,mark一下
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-19 19:15 , Processed in 0.291054 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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