硬汉嵌入式论坛

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

[emWin] TEXT 控件 显示时间最后面异常

[复制链接]

7

主题

20

回帖

41

积分

新手上路

积分
41
发表于 2020-3-1 11:22:55 | 显示全部楼层 |阅读模式
TEXT 控件 显示时间最后面异常
将RTC 时间 转换为字符串后更新到 TEXT 显示  
但是过几秒 后面就跟一个乱码

单步调试 strs 数字第9个单元往后都是0  送到TEXT 显示也有乱码
实在搞不明白怎么回事

RTC 时间转字符串:
                case WM_TIME_REF:
                        memset(strs,0,16);
                        readRtcTimeStrs(strs);
                        TEXT_SetText(WM_GetDialogItem(hWin,GUI_ID_TEXT4),strs);
                        break;


void readRtcTimeStrs(char *pTime)
{
        if(pTime == NULL)
                return;
        if(_timeStruct.hour < 10)
        {
                pTime[0] = '0';
                pTime[1] = _timeStruct.hour + 0x30;
        }
        else
        {
                pTime[0] = _timeStruct.hour / 10 + 0x30;
                pTime[1] = _timeStruct.hour % 10 + 0x30;
        }
        pTime[2] = ':';
        if(_timeStruct.min < 10)
        {
                pTime[3] = '0';
                pTime[4] = _timeStruct.min + 0x30;
        }
        else
        {
                pTime[3] = _timeStruct.min / 10 + 0x30;
                pTime[4] = _timeStruct.min % 10 + 0x30;
        }
        pTime[5] = ':';
        if(_timeStruct.sec < 10)
        {
                pTime[6] = '0';
                pTime[7] = _timeStruct.sec + 0x30;
        }
        else
        {
                pTime[6] = _timeStruct.sec / 10 + 0x30;
                pTime[7] = _timeStruct.sec % 10 + 0x30;
        }
}

TIM截图20200301111837.png
TIM截图20200301111937.png
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107156
QQ
发表于 2020-3-1 12:09:59 | 显示全部楼层
这个看着还不像是Text控件的问题,因为你显示的那个字符已经不是数值了,成了随机字符。

将你的函数readRtcTimeStrs改成sprintf试试。
回复

使用道具 举报

7

主题

20

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2020-3-1 14:11:49 | 显示全部楼层
eric2013 发表于 2020-3-1 12:09
这个看着还不像是Text控件的问题,因为你显示的那个字符已经不是数值了,成了随机字符。

将你的函数read ...

显示还是不正常
                case WM_TIME_REF:
                        memset(strs,0,16);
        //                readRtcTimeStrs(strs);
                        timeStruct_ = readRtcTime();
                        sprintf(strs, "%d:%d:%d", timeStruct_.hour, timeStruct_.min,timeStruct_.sec);
                        TEXT_SetText(WM_GetDialogItem(hWin,GUI_ID_TEXT4),strs);
                        break;

时间 过几秒就变了 "13:20:30   2" 这种   后面跟着尾巴
这会不会是emwin  申请的内存没有做清零处理
这在哪里设置
回复

使用道具 举报

3

主题

34

回帖

43

积分

新手上路

积分
43
发表于 2020-3-2 08:06:45 | 显示全部楼层
你是不是使用了外部全字库的,如果是的话可以参考我在emwinfonttool工具这个帖子我的回复。
回复

使用道具 举报

7

主题

20

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2020-3-3 09:43:42 | 显示全部楼层
zouw96 发表于 2020-3-2 08:06
你是不是使用了外部全字库的,如果是的话可以参考我在emwinfonttool工具这个帖子我的回复。

没有使用外部字库
配置emwin 内存 使用片内 RAM  就没有一些乱七八糟的问题   用外部SDRAM 就时不时有问题
我使用的是16 * 16M SDRAM
不知道问题出在哪
测试SDRAM 读写 都没有问题
回复

使用道具 举报

3

主题

34

回帖

43

积分

新手上路

积分
43
发表于 2020-3-3 11:15:32 | 显示全部楼层
rainsyeah 发表于 2020-3-3 09:43
没有使用外部字库
配置emwin 内存 使用片内 RAM  就没有一些乱七八糟的问题   用外部SDRAM 就时不时有问 ...

你这种现象很像我当时出现的那种情况,也是找了很久很久才解决。出现的字符和概率都是随机的。你可以搜下那个帖子看一下
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107156
QQ
发表于 2020-3-4 00:08:42 | 显示全部楼层
rainsyeah 发表于 2020-3-3 09:43
没有使用外部字库
配置emwin 内存 使用片内 RAM  就没有一些乱七八糟的问题   用外部SDRAM 就时不时有问 ...

你的SDRAM批量测试过没,可以批量测试读写看看。
回复

使用道具 举报

7

主题

20

回帖

41

积分

新手上路

积分
41
 楼主| 发表于 2020-3-12 15:33:42 | 显示全部楼层
eric2013 发表于 2020-3-4 00:08
你的SDRAM批量测试过没,可以批量测试读写看看。

批量测试 没有问题
/*
*********************************************************************************************************
*  函 数 名: sdram_test
*  功能说明: SDRAM测试
*  形    参: 无
*  返 回 值: 读写无误返回1,否则返回0
*********************************************************************************************************
*/
uint32_t sdram_test( void )
{
    volatile uint32_t *wr_ptr;
    volatile uint16_t *short_wr_ptr;
    uint32_t data;
    uint32_t i, j;

    wr_ptr = (uint32_t *)SDRAM_BASE;
    short_wr_ptr = (uint16_t *)wr_ptr;
    /* Clear content before 16 bit access test */
    for (i = 0; i < SDRAM_SIZE/4; i++)
    {
        *wr_ptr++ = 0;
    }

    /* 16 bit write */
    for (i = 0; i < SDRAM_SIZE/0x40000; i++)
    {
        for (j = 0; j < 0x10000; j++)
        {
            *short_wr_ptr++ = (i + j);
            *short_wr_ptr++ = (i + j) + 1;
        }
    }

    /* Verifying */
    wr_ptr = (uint32_t *)SDRAM_BASE;
    for (i = 0; i < SDRAM_SIZE/0x40000; i++)
    {
        for (j = 0; j < 0x10000; j++)
        {
            data = *wr_ptr;
            if (data != (((((i + j) + 1) & 0xFFFF) << 16) | ((i + j) & 0xFFFF)))
            {
                return 0x0;
            }
            wr_ptr++;
        }
    }
    return 0x1;
}
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107156
QQ
发表于 2020-3-13 10:23:04 | 显示全部楼层
rainsyeah 发表于 2020-3-12 15:33
批量测试 没有问题
/*
************************************************************************** ...

试过用内部SRAM做emWin动态内存测试了没。
回复

使用道具 举报

0

主题

1

回帖

1

积分

新手上路

积分
1
发表于 2020-7-16 11:09:59 | 显示全部楼层
请问楼主最后解决了吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 17:14 , Processed in 0.220770 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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