硬汉嵌入式论坛

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

[emWin] 在ucosiii中运行stemwin应该怎么互斥访问液晶屏?

[复制链接]

4

主题

17

回帖

29

积分

新手上路

积分
29
发表于 2015-12-24 17:08:23 | 显示全部楼层 |阅读模式
按照版主的技术资料,我已经把stemwin移植完了,而且支持多任务,现在还有一个问题想请教一下:多任务调用stemwin的api时,整个屏都乱作一团了,应该怎么去实现互斥访问呢?
回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2015-12-24 17:08:57 | 显示全部楼层
补充一下,我用的系统是ucosiii。
回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2015-12-24 17:21:20 | 显示全部楼层
现在没有源代码,也不知道stemwin内部有什么机制来进行资源的互斥访问,在移植的代码里,定义的那两个信号量(DispSem和EventSem )是供用户在任务中使用的么?还是STemWin内部自动来进行访问呢?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
117586
QQ
发表于 2015-12-24 18:04:09 | 显示全部楼层
对于uCOS-III,我有写过一个GUI_X_Ex.c文件,专门做互斥访问用的,楼主可以参考。

这个是emWin提供的接口函数,用户在里面实现互斥操作即可。emWin在用户使能OS的情况下,自动调用。
回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2015-12-25 09:01:22 | 显示全部楼层

回 eric2013 的帖子

eric2013:对于uCOS-III,我有写过一个GUI_X_Ex.c文件,专门做互斥访问用的,楼主可以参考。

这个是emWin提供的接口函数,用户在里面实现互斥操作即可。emWin在用户使能OS的情况下,自动调用。 (2015-12-24 18:04)
没有找到GUI_X_Ex.c文件,我参考的是您的那本书。您能给个链接么?另外我在测试多任务调用gui时,在 GUI_X_Config()函数中调用了GUITASK_SetMaxTask(GUI_MAXTASK);其中GUI_MAXTASK=5,使得最多可以运行5个这样的任务,测试代码中有4个任务调用了gui函数进行划线和输出字符,但是任务不定期的死机,可是定时器中断程序周期性发信号给一个任务并且toggle led运行却正常。不知道是哪里出了问题。
回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2015-12-25 10:06:18 | 显示全部楼层

回 fandeshun 的帖子

fandeshun:没有找到GUI_X_Ex.c文件,我参考的是您的那本书。您能给个链接么?另外我在测试多任务调用gui时,在 GUI_X_Config()函数中调用了GUITASK_SetMaxTask(GUI_MAXTASK);其中GUI_MAXTASK=5,使得最多可以运行5个这样的任务,测试代码中有4个任务调用了gui函数进行划线和输出字符,但是任 .. (2015-12-25 09:01)
找到了GUI_X_Ex文件,我改的文件和这个文件一致!那个“死机”的问题能帮我看看么?
回复

使用道具 举报

5

主题

582

回帖

597

积分

版主

Rank: 7Rank: 7Rank: 7

积分
597
发表于 2015-12-25 13:30:14 | 显示全部楼层

回 fandeshun 的帖子

fandeshun:找到了GUI_X_Ex文件,我改的文件和这个文件一致!那个“死机”的问题能帮我看看么? (2015-12-25 10:06) 
stemwin有没有找os版本的呢
回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2015-12-25 16:33:16 | 显示全部楼层

回 myxiaonia 的帖子

myxiaonia:stemwin有没有找os版本的呢 (2015-12-25 13:30)
我改的就是os版本的,显示和事件信号什么的都给加上了。我现在怀疑是进入了gui_delay出不来了,我把gui_delay都改为os_delay就没有问题了。可不用gui_delay也不行啊,没法刷新了。怎么办啊
回复

使用道具 举报

4

主题

17

回帖

29

积分

新手上路

积分
29
 楼主| 发表于 2015-12-26 10:35:26 | 显示全部楼层

回 fandeshun 的帖子

fandeshun:

我改的就是os版本的,显示和事件信号什么的都给加上了。我现在怀疑是进入了gui_delay出不来了,我把gui_delay都改为os_delay就没有问题了。可不用gui_delay也不行啊,没法刷新了。怎么办啊
我只在四个含gui调用的任务中的一个调用了gui_delay延时,而其他的都用os_delay来延时,跑起来好像没什么问题了。但是又出现了一个新的问题,我调用的GUI_DispDecAt(x,700,200,8);函数所显示的数字位置没有固定住,在显示的数字旁边也有和他重叠,代码您帮我看一下。
static  void  App_TaskGUI2         (void  *p_arg)
{
OS_ERR err;
int x=200;
GUI_SetFont(&GUI_Font8x16);
while(DEF_TRUE){
GUI_SetColor(x);
GUI_FillCircle(700, 84, 40);
GUI_DispDecAt(x,700,200,8);
x+=255;
if(x>=16777216){
  x=0;
}
// GUI_Delay(10);
OSTimeDlyHMSM(0u, 0u, 0, 100u,
      OS_OPT_TIME_HMSM_STRICT,
      &err);
}
}
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-16 12:24 , Processed in 0.041750 second(s), 24 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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