硬汉嵌入式论坛

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

[emWin] emwin 全键盘的问题反馈

[复制链接]

5

主题

35

回帖

50

积分

初级会员

积分
50
发表于 2024-2-21 09:03:24 | 显示全部楼层 |阅读模式
本帖最后由 flying1104 于 2024-2-21 09:12 编辑

首先感谢硬汉和18291005374
第9期:全键盘拼音输入法界面设计
emwin26键输入法

使用过程中有一些问题,在这里反馈一下,不知是否正确
使用keil环境编译
问题1
[C] 纯文本查看 复制代码
char *PYSearch(unsigned char *msg , int *num)

其中 * num为int类型
[C] 纯文本查看 复制代码
static uint16_t  s_Hznum;    
ptr = PYSearch(s_tempbuf, (int *)&s_Hznum);

外部定义为uint16_t
这样会造成PYSearch返回的时候,其他相邻的内存空间
例如
[C] 纯文本查看 复制代码
char s_PyBuf[100]={0};//拼音存放的数组
static uint16_t  s_HzNum; //汉字数量
char s_HzBuf[512]={0};//存放汉字的数组
char  *s_BufView[128]={0};//存放显示汉字的数组

这里定义后内存地址分布如下
[C] 纯文本查看 复制代码
s_HzNum                                  0x2402a22e   
s_PyBuf                                  0x2402a230

这样返回的时候,就会侵占0x2402a230到造成s_PyBuf键盘存储抹掉为0
解决: static uint32_t s_Hznum;


问题2
[C] 纯文本查看 复制代码
/* 以读音为*msg开头的所有拼音检索 */[/size]
        tailpcb = PYRankThreeList[*msg - 'a'];
        
         /* 以读音为*msg+1开头的所有拼音检索 */
        headpcb = PYRankThreeList[*msg - 'a' + 1];
        
        for(; tailpcb < headpcb; tailpcb++)
        {
                
                /* 检查输入的拼音与检索结构体中的拼音是否一致 */
                for(i = 0; i < count - 1; i++)                                
                {        
                        if(*((*tailpcb).PYSerList + i) != msg[i + 1])
                        {
                                break;
                        }
                }
                
                /* 一致,返回指针 */
                if(i == (count - 1))                                                 
                {
                        /* 特别注意下面这个函数,因为UTF-8编码格式的汉字是3个字节 */
                        *num = strlen((const char *)(*tailpcb).PYRankOneList) / 3;
                        return (char *)(*tailpcb).PYRankOneList;
                }

        }

其中tailpcb是需要和headpcb进行对比来确定拼音的检索的
他们是通过存储地址来递增,但编译后的地址如下图
问题在于e和z
end的位置因为是依据字母排序的,因此被放在了e的后面而非z的后面
end.png
造成e和z的对比错误
将PYRankTwoList_end改为PYRankTwoList_zz解决问题
zz.png






回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106649
QQ
发表于 2024-2-21 09:55:34 | 显示全部楼层
谢谢楼主分享。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 20:50 , Processed in 0.165030 second(s), 29 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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