野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16996|回复: 9

emWin例程的一些不理解

[复制链接]
发表于 2015-7-17 13:01:11 | 显示全部楼层 |阅读模式
你好,火哥,我在您的链接中http://pan.baidu.com/s/1mgrbfGs中下载的例程,把它烧写到MINI板中,发现那些例程第一章界面能够很好的显示,但是点击ICONVIEW工件后进入下一个界面时发现工作区没有任何的部件(代码中是添加了部件的),切勿任何的操作,请问这是为什么呢??同时我想问下,每一个ICONVIEW部件的之类函数中,例如OnICON4Clicked(),都有while()函数,这样做是否可以????
回复

使用道具 举报

发表于 2015-7-17 13:55:48 | 显示全部楼层
使用使用这些例程之前必须先运行制作外部Flash文件系统,烧写字库等程序(0.Preparatory Work文件夹里边的),不知你运行了吗??并且保证运行结果正确。。
即使没有运行准备工作的例程,例程的第一张界面是可以正常显示的,当点击进去就会卡死的。。。。
如果已经运行了准备工作的例程,运行其他例程应该是可以的。
while()函数不是还有ONICON4这些条件吗??在关闭界面时ONICON4就被赋值为0,这样就退出while循环了,你把代码看完整就明白了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-17 14:34:20 | 显示全部楼层
弱弱的问火哥一句:我们的MINI板有外部的Flash吗??
回复 支持 反对

使用道具 举报

发表于 2015-7-17 14:57:32 | 显示全部楼层
有的,看原理图去吧,w25q64
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-17 15:17:43 | 显示全部楼层
火哥,我模仿您的文件来写自己的程序,我在第一章界面中也是使用WM_CreateWindowAsChild()来一个建立背景窗口的子窗口,在这子窗口中添加了ICONVIEW的几张图片,每点击一张图片就使用GUI_CreateDialogBox()来新建一个窗口,我其中的一个新窗口的代码如下:

void LED_Box(void)
{
        OS_ERR  err;
        WM_HWIN LED_HWIN;
        printf("\r\n  已经进入创建LED_Box窗口函数  \r\n"); //打印信息

        LED_HWIN=GUI_CreateDialogBox(_aDialogCreateLED,
                                                GUI_COUNTOF(_aDialogCreateLED),
                                                _cbDialogLED,
                                                WM_HBKWIN,
                                                0,
                                                0);

        printf("\r\n  LED窗口的句柄=%d  \r\n",LED_HWIN); //打印信息
        while(Widget1_LED)
        {
               
                GUI_Delay(20);       
                printf("\r\n  在LED窗口中 \r\n");                  //打印信息
        }
}
当我不写while()函数时,界面能很好的显示与切换,每个界面的功能都能实现,
问题就在于:当我加了while()函数后出现如下情况:
1、        从第一章切换进来时,第一章界面的ICONVIEW图片任然可见
2、        进入新界面的功能不能实现,卡在那里
3、        在串口中没打印while()中的“printf("\r\n  在LED窗口中 \r\n");        ”信息

我想问下大体是哪方面出问题呢??从第一张ICONVIEW界面进入下一张时,需要对ICONVIEW这个界面做删除操作吗???谢谢火哥
回复 支持 反对

使用道具 举报

发表于 2015-7-17 15:43:50 | 显示全部楼层
把第一张界面的程序贴上来看看吧
类似例程的app.c文件内容的程序
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-17 15:52:53 | 显示全部楼层
在App中的
void Task_GUI(void *p_arg)
{
        OS_ERR err;
        WM_HWIN hWin;
        WM_HWIN hItem;
        (void)p_arg;

        WM_SetDesktopColor(GUI_WHITE);
        WM_SetCreateFlags(WM_CF_MEMDEV);



           printf("\r\n  背景窗口的句柄=%d \r\n",WM_HBKWIN);
        CreateMidWin();               //创建中间的窗口

        while(1)
        {
                GUI_Delay(100);
                printf("\r\n  在这  \r\n");
        }
}

在CreateMidWin()函数中
void CreateMidWin(void)
{
        WM_HWIN MIDWIN;
        uint8_t i;

        printf("\r\n 将要创建中间用户窗口 \r\n");
        hMidWin=WM_CreateWindowAsChild(0,20,320,200,
                                                                  WM_HBKWIN,
                                                                  WM_CF_SHOW|WM_CF_MEMDEV,
                                                                  _cbMidWin,
                                                                  0);

        printf("\r\n  中间部件窗口的句柄=%d   \r\n",hMidWin);
          
        MIDWIN=ICONVIEW_CreateEx(4,  0,  320-4,  3*(80+10),
                                                         hMidWin,
                                                         WM_CF_SHOW| WM_CF_HASTRANS,
                                                         0,
                                                         GUI_ID_ICONVIEW0,
                                                         75,  75);

        for(i=0;i<GUI_COUNTOF(_aBitmapItem1);i++)
        {
                ICONVIEW_AddBitmapItem(MIDWIN,_aBitmapItem1[i].pBitmap,_aBitmapItem1[i].pText);
                ICONVIEW_SetTextColor(MIDWIN,i,GUI_BLUE );
        }
        ICONVIEW_SetBkColor(MIDWIN, ICONVIEW_CI_SEL, GUI_WHITE | 0x80000000);
        ICONVIEW_SetSel(MIDWIN,-1);            //设置最开始的pMsg->Data.v=-1 ,
        ICONVIEW_SetSpace(MIDWIN, GUI_COORD_X, 5);
        ICONVIEW_SetSpace(MIDWIN, GUI_COORD_Y, 5);
        ICONVIEW_SetIconAlign(MIDWIN, ICONVIEW_IA_HCENTER|ICONVIEW_IA_TOP);
}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-17 16:11:39 | 显示全部楼层
如果火哥有时间的话,可以在这找到完整的代码:http://pan.baidu.com/s/1gd4d0dl     只要下载到MINI版上就能看到你结果了,谢谢火哥!
回复 支持 反对

使用道具 举报

发表于 2015-7-17 19:40:37 | 显示全部楼层
app.h文件中:
#define STARTUP_TASK_STK_SIZE   256
#define        TASK_GUI_STK_SIZE                          1024
#define TASK_GUI_Refresh_STK_SIZE   256
GUIConf.c文件中:
#define GUI_NUMBYTES  1024*30       
改一下试试,你那程序太乱了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-7-17 20:57:54 | 显示全部楼层
谢谢火哥,程序已经解决了,的确是内存分配问题,谢谢!!!我会整理这程序代码的,谢啦!
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2025-1-9 17:10 , Processed in 0.034238 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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