OpenEdv-开源电子网

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

求助enwim软键盘问题,系统不是hardfault就是被复位

[复制链接]

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
发表于 2018-5-17 16:56:53 | 显示全部楼层 |阅读模式
10金钱
最近因为需要,移植了原子的历程,emwin扩展历程40软键盘实验,前后调试了好几天,实在是想不出问题原因了发帖求助大神
说下问题:我是用button按钮控制调出一个framewin窗口,然后窗口里有multiedit多文本控件,调这个窗口同时软键盘也被调用出来,当我什么也不变,关闭键盘和界面后再打开就没问题,因为默认是英文输入法,当我换成符号输入或者数字输入或者中文输入时,不打字在退出界面和关闭键盘,再打开就会出现卡死,系统进入hardfault
很奇怪

我认为问题应该出现在键盘这里,不调用键盘怎么整都没事,调用键盘,键盘的按钮一个也不按,退出再进来就没问题,一旦切换输入模式,退出再进来就完蛋,不知各位坛友有没有遇到过这种问题,也求助论坛大佬给个指点建议,我可以多多尝试,感谢感谢。

最佳答案

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

最后问题还是自己解决了,因为实在是找不到为何切换输入法就死机或者复位的原因,这个我说一下不是抱怨历程代码,只是说一下实际测试,我实际测试实验40软键盘实验,在里面加了控制键盘的开关之后,程序同样会死机,所以说应该是原子团队在制作实验DEMO的时候仅是实现了实验效果,毕竟是免费提供的历程,已经非常感激非常仁义尽致了,况且每个人都有每个人的用法,有的人用键盘也就是一直开着的不去关闭它,有的就需要关闭,这个先 ...
qq1950361006,互帮互助,共同进步。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-5-17 16:56:54 | 显示全部楼层
最后问题还是自己解决了,因为实在是找不到为何切换输入法就死机或者复位的原因,这个我说一下不是抱怨历程代码,只是说一下实际测试,我实际测试实验40软键盘实验,在里面加了控制键盘的开关之后,程序同样会死机,所以说应该是原子团队在制作实验DEMO的时候仅是实现了实验效果,毕竟是免费提供的历程,已经非常感激非常仁义尽致了,况且每个人都有每个人的用法,有的人用键盘也就是一直开着的不去关闭它,有的就需要关闭,这个先不说了,说我最后解决的方式是修改了一下键盘的方式,由原来的切换页面,改成了不切换页面,我只需要汉字和数字,不要字母和符号,所以我就把字符符号都去掉了,把9宫格汉字键盘和数字整合到一起一个页面,这样就避免了切换页面带来的异常,最后还有一个问题说一下,因为发现9宫格也是用数字2到9来辨别字母的,和数字重复,这里我用一个巧妙方式避开了这个问题,1到9用a到i来表示,在调用的时候减去0x30,查询ASCII码表会知道原因,就是数字1到9啦,其实这个问题并没有实际的解决,还是因为我对ucos系统不是很了解,大神就会完美的解决切换键盘的问题,我只能暂用技巧避开了一下
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-5-17 17:42:13 | 显示全部楼层
自顶   
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-5-17 19:08:21 | 显示全部楼层
试了隐藏键盘,同样也是不好使啊,放上代码,求助[mw_shl_code=c,true]static void _cb7Dialog(WM_MESSAGE * pMsg)
{   
          WM_HWIN hFrame;
    WM_HWIN hItem;
          WM_MESSAGE Msg;
                WM_HWIN hWin = pMsg->hWin;
          u8 dbuf[50];
          int datalen=0;
          int     NCode;
    int     Id;
    switch (pMsg->MsgId)
                {
                                case WM_PAINT:                       

                                break;
        case WM_INIT_DIALOG:
            hItem = pMsg->hWin;
                                                FRAMEWIN_SetFont(hItem, &GUI_FontHZ24);
            FRAMEWIN_SetTextColor(hItem,0x0000FFFF);
            FRAMEWIN_SetTextAlign(hItem,GUI_TA_HCENTER |GUI_TA_VCENTER);
            FRAMEWIN_SetText(hItem,"¼èë3éÔ±DÅÏ¢");
                               
                       
                                                GUI_SetTextMode(GUI_TM_TRANS);
                                                TEXT_SetTextColor(WM_GetDialogItem(hWin,ID_TEXT_14), GUI_RED);
                                                TEXT_SetFont(WM_GetDialogItem(hWin,ID_TEXT_14), &GUI_FontHZ24);
       
                               
                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_14);
                                                BUTTON_SetFont(hItem, &GUI_FontHZ32);
                                                BUTTON_SetText(hItem, "íË3ö");
                               
                                                hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_15);
                                                BUTTON_SetFont(hItem, &GUI_FontHZ32);
                                                BUTTON_SetText(hItem, "è·èÏ");
                               
//                                                keypad_dev.xpos=0;
//                                                keypad_dev.ypos=160;
//                                                keypad_dev.width=480;
//                                                keypad_dev.height=320;
                                  if(aa==0)
                                         {
                                                                keypad_dev.padtype=ENGLISH_KEYPAD;                                //ĬèÏÎaó¢ÎļüÅì
                                                                keypad_dev.signpad_flag=0;       
                                                                keypad_dev.signpad_num=2;
                                                                keypad_dev.inputlen=0;
                                                                keypad_dev.pynowpage=0;
                                                                keypad_dev.cur_index=0;
                                                                keypad_dev.sta=0;
                //                                               
                                                                //éèÖÃkeypadËùê1óÃμİ′Å¥μÄÆ¤·ô
                                                                BUTTON_SetDefaultSkin(_DrawSkinFlex_BUTTON);         //éèÖÃBUTTONμÄÆ¤·ô
                                                                //′′½¨keypad
                                                                keypad_dev.hKeypad = WM_CreateWindowAsChild(0,160,480,320, WM_HBKWIN, WM_CF_SHOW | WM_CF_STAYONTOP, _cbKeyPad, 0);
                                                               
                                                                //éèÖÃnotepadêôDÔ
                                                                BUTTON_SetDefaultSkin(BUTTON_SKIN_FLEX);
                                                                FRAMEWIN_SetDefaultSkin(FRAMEWIN_SKIN_FLEX);
                                                                FRAMEWIN_SetDefaultTextAlign(GUI_TA_HCENTER);
                                                 aa=1;
                                         }
                                         if(aa==1)
                                                 WM_ShowWindow(keypad_dev.hKeypad);

                                                //3õê¼»ˉEDIT
                                                hMulti = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_0);
                                                MULTIEDIT_EnableBlink(hMulti,500,1);                        //¿aÆô1a±ê,ÖüÆú500ms
                                        //        MULTIEDIT_SetInsertMode(hMulti,1);  //¿aÆô2åèëÄ£ê½
                                        //        MULTIEDIT_SetMaxNumChars(hMulti,20);
                                                MULTIEDIT_SetFont(hMulti, &GUI_FontHZ24);
                                        //        MULTIEDIT_SetFocussable(hMulti,1);
                                  //         MULTIEDIT_SetText(hMulti, "ÄãoÃÄã»1\r\nÄãoÃÄãoÃ");
            break;
        case WM_NOTIFY_PARENT:
                                                 Id = WM_GetId(pMsg->hWinSrc);
                                                 NCode = pMsg->Data.v;
                                                 switch(Id)
                                                 {                         
                                                                case ID_BUTTON_14:
                                                                                //hItem = WM_GetDialogItem(pMsg->hWin, ID_BUTTON_14);
                                                                                switch(NCode)
                                                                                {                                       
                                                                                        case WM_NOTIFICATION_CLICKED:
                                                                                                break;
                                                                                        case WM_NOTIFICATION_RELEASED: //°′Å¥±»°′ÏÂ2¢êí·Å               
                                                                                                    hMulti = WM_GetDialogItem(pMsg->hWin, ID_MULTIEDIT_0);
                                                                                                    MULTIEDIT_SetText(hMulti,NULL);
                                                                                                                WM_DeleteWindow(hMulti);
                                                                                                    WM_HideWindow(keypad_dev.hKeypad);                                                                       
                                                                                                                Msg.MsgId=WM_DELETEWIN;
                                                                                                                Msg.hWinSrc=pMsg->hWin;                                                                                          
                                                                                                                WM_SendMessage(WM_HBKWIN,&Msg);                                                                                                                                       
                                                                                         break;       
                                                                                }
                                                                                break;
                                                                case ID_MULTIEDIT_0:        //EDIT¿Ø¼tí¨ÖaÏûÏ¢
                                                                                switch(NCode)
                                                                                {
                                                                                        case WM_NOTIFICATION_CLICKED:
                                                                                                break;
                                                                                        case WM_NOTIFICATION_RELEASED:
                                                                        //        keypad_dev.hKeypad = WM_CreateWindowAsChild(keypad_dev.xpos,keypad_dev.ypos,keypad_dev.width,keypad_dev.height, WM_HBKWIN, WM_CF_SHOW | WM_CF_STAYONTOP, _cbKeyPad, 0);

                                                                                                break;
                                                                                        case WM_NOTIFICATION_VALUE_CHANGED:
                                                                                                break;
                                                                                }
                                                                                break;
                                                                case ID_BUTTON_15:
                                                                                switch(NCode)
                                                                                {
                                                                                        case WM_NOTIFICATION_CLICKED:
                                                                                                break;
                                                                                       
                                                                                        case WM_NOTIFICATION_RELEASED:
                                                                                                   hItem=WM_GetDialogItem(pMsg->hWin,ID_MULTIEDIT_0);
                                                                                             datalen=MULTIEDIT_GetTextSize(hItem)+1;
                                                                                                   MULTIEDIT_GetText(hItem,(char*)dbuf,datalen);
                                                                                                         TEXT_SetText(WM_GetDialogItem(hWin,ID_TEXT_14), (const char *)dbuf);
                               
                                                                                                break;
                                                                                }       
                                                                                break;
                                                               
                                                }
                                break;
        default:
            WM_DefaultProc(pMsg);
            break;
    }
}[/mw_shl_code]
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165475
金钱
165475
注册时间
2010-12-1
在线时间
2115 小时
发表于 2018-5-18 01:20:13 | 显示全部楼层
帮顶
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-5-18 12:48:45 | 显示全部楼层
自顶,键盘只要切换数字符号或者汉字,在返回英文,关闭键盘在打开键盘就会复位,切换后不返回英文模式,关闭键盘再打开就会进入hardfault
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-6-22 18:37:58 | 显示全部楼层
贴个图,后来需要英文,又改了个英文+数字的键盘,比中文+数字的好弄多了
IMG_20180622_183604.jpg
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

3

主题

8

帖子

0

精华

新手上路

积分
49
金钱
49
注册时间
2018-10-30
在线时间
17 小时
发表于 2018-11-16 09:52:14 | 显示全部楼层
我也遇到这个问题,只是英文键盘没问题,一旦切换其它键盘,不管是对键盘采用关闭,移动或者隐藏,一旦重新进入调用了GUI_Exec()就进入hardfault,跟踪发生异常的位置,是在os_cfg_app文件中的OSCfg_MsgPool函数
回复

使用道具 举报

18

主题

323

帖子

1

精华

高级会员

Rank: 4

积分
935
金钱
935
注册时间
2017-12-11
在线时间
196 小时
发表于 2018-11-16 13:17:38 来自手机 | 显示全部楼层
emwin版块有智能键盘,只需一次移植,终身免调用,免关闭,打开,皮实耐操,找更新版的
回复

使用道具 举报

9

主题

48

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
322
金钱
322
注册时间
2020-7-7
在线时间
113 小时
发表于 2020-7-31 16:57:07 | 显示全部楼层
wlq390934605 发表于 2018-11-16 13:17
emwin版块有智能键盘,只需一次移植,终身免调用,免关闭,打开,皮实耐操,找更新版的

大佬我问一下,这个智能键盘在哪,我找不到
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-4-30 19:16

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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