硬汉嵌入式论坛

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

[emWin] 测试发现MultiEdit控件添加了垂直滚动条后,搞着搞着就卡死了【已解决】

[复制链接]

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
发表于 2017-2-7 17:34:38 | 显示全部楼层 |阅读模式
做了一个RL-CAN的界面,用于滚动显示接收到的数据,发现接收着就卡死在这个控件上面了。
不使用垂直滚动条是没有问题的,KEIL里面带的emWin和STemWin都测试了。
=======

//    MULTIEDIT_SetAutoScrollV(hItem, 1);
//    hScrollbar = SCROLLBAR_CreateAttached(hItem, SCROLLBAR_CF_VERTICAL);
//    SCROLLBAR_SetWidth(hScrollbar, 18);

有时间了再测试下吧。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2017-2-8 11:32:10 | 显示全部楼层
解决办法:
   这里的工作方式比较特殊,涉及到emWin的多任务通信。CAN总线数据接收是一个单独的任务,
接收到数据后给emWin任务发消息,为了方便起见,直接用emWin的消息传递函数发送消息。问题
就出在这个地方了,emWin接收到消息后,在回调函数里面执行这个消息,也就是调用multiedit的
MULTIEDIT_AddText函数,很容易导致系统死机。


   解决办法就是,在这个消息里面开启一个定时器,比如设置1ms,时间到后,在定时器的WM_TIMER消息
里面调用函数MULTIEDIT_AddText就没有任何问题了。
============================
为什么要这么解决,最根本的原因是emWin的消息传递函数不是直接跳转到emWin任务里面执行的,而是直接
在当前任务里面调用窗口的回调函数,并执行相应消息,bug就是这么来的。其实不光multiedit,listview也是同样的问题。
回复

使用道具 举报

3

主题

24

回帖

33

积分

新手上路

积分
33
发表于 2017-2-8 15:09:30 | 显示全部楼层
emwin支持多任务的, 加大can任务的堆栈应该就可以了
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115728
QQ
 楼主| 发表于 2017-2-8 15:10:48 | 显示全部楼层

回 abl 的帖子

abl:emwin支持多任务的, 加大can任务的堆栈应该就可以了 (2017-02-08 15:09)
看二楼的回复即可,与堆栈无关,这个问题要深入早期UCGUI3.98的源码,才能够发现端倪。
没有源码的痛苦就着这个地方了。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-14 21:02 , Processed in 0.344990 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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