硬汉嵌入式论坛

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

[emWin] 在stemwin中通过xbf外挂flash字库出现显示问题

[复制链接]

3

主题

19

回帖

3

积分

新手上路

积分
3
发表于 2014-11-28 17:46:53 | 显示全部楼层 |阅读模式
软件环境:mdk5.10+stemwin5.22
硬件环境:stm32f407igt6

我通过官方软件fontcvt生成4倍抗锯齿,宋体16*16的字库并载入flash,
然后在TFT上验证显示ADCB四个ASCII码,正好32*16个像素,一切看起来很美好。

然后我给emwin开了一个缓存,用作通过外部SRAM缓存刷新液晶,就出现了问题:
ABCD的背景像素长和高都多出了一个像素,也就是变成了33*17个像素。

我试过将外挂缓存开大一点,或者将堆栈开大,现象依旧。
只要把缓存刷屏一取消,就显示正常了。

请大家帮帮忙,谢谢!
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-11-28 18:10:07 | 显示全部楼层
我看下你开缓存刷屏的代码
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-1 09:55:13 | 显示全部楼层

回 eric2013 的帖子

eric2013:我看下你开缓存刷屏的代码(2014-11-28 18:10)嬀/color]
    RefLCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_NOTRANS);
    GUI_MEMDEV_Select(RefLCD);
   
    LCD_Clear(GUI_BLACK);
    GUI_SetColor(GUI_RED);
    GUI_SetBkColor(GUI_WHITE);
    GUI_DrawLine(100,99,131,99);
   
    GUI_DispStringAt("ABCD",100,100);
    GUI_MEMDEV_CopyToLCD(RefLCD);
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-12-1 09:58:44 | 显示全部楼层

回 kc_cec 的帖子

kc_cec:    RefLCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_NOTRANS);
    GUI_MEMDEV_Select(RefLCD);
    
    LCD_Clear(GUI_BLACK);
....... (2014-12-01 09:55) 
确定你的动态内存够: 480*320*2=307200
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-1 10:10:20 | 显示全部楼层

回 eric2013 的帖子

eric2013:
我看下你开缓存刷屏的代码
        RefLCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_NOTRANS);
        GUI_MEMDEV_Select(RefLCD);

        LCD_Clear(GUI_BLACK);
        GUI_SetColor(GUI_RED);
        GUI_SetBkColor(GUI_WHITE);
        GUI_DrawLine(100,99,131,99);

        GUI_DispStringAt("ABCD",100,100);
        GUI_MEMDEV_CopyToLCD(RefLCD);

没有开缓存

没有开缓存

已经开缓存

已经开缓存
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-1 10:11:23 | 显示全部楼层

回 eric2013 的帖子

eric2013:确定你的动态内存够: 480*320*2=307200(2014-12-01 09:58)嬀/color]
内存是够的,我给了450K,而且之前也一直以这种方式刷屏没有问题的
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-12-1 13:21:24 | 显示全部楼层

回 kc_cec 的帖子

kc_cec:内存是够的,我给了450K,而且之前也一直以这种方式刷屏没有问题的
 (2014-12-01 10:11) 
你开一个100*100的小空间再试试看
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-1 13:53:18 | 显示全部楼层

回 eric2013 的帖子

eric2013:你开一个100*100的小空间再试试看(2014-12-01 13:21)嬀/color]
试过了 现象依旧
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-1 13:56:15 | 显示全部楼层

回 eric2013 的帖子

eric2013:你开一个100*100的小空间再试试看(2014-12-01 13:21)嬀/color]
可否麻烦你在自己的平台上试试看,会不会有我这种现象
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-12-1 14:00:09 | 显示全部楼层

回 kc_cec 的帖子

kc_cec:可否麻烦你在自己的平台上试试看,会不会有我这种现象 (2014-12-01 13:56) 
明天有时间了给你试下,把你的稍完整代码贴上
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-2 11:58:14 | 显示全部楼层

回 eric2013 的帖子

eric2013:

明天有时间了给你试下,把你的稍完整代码贴上
可否麻烦你在自己的平台上试试看,会不会有我这种现象

代码流程:初始化LCD及外部SRAM->初始化GUI->载入字库字体->开缓存->写字符->刷新缓存
代码依次按照上面顺序排列:
LCD及Sram初始化
  1. /*
  2. 功能:LCD底层驱动初始化(外部调用)
  3. */
  4. void LCD_Button_Init(void)
  5. {
  6.     LCD_GPIO_Configuration();
  7.     TIM3_PWM_MODE_Configuration();
  8.     LCD_FSMC_Configuration();
  9.     LCD_Configuration();
  10.     SRAM_Init();
  11. }
复制代码
初始化GUI
  1. void GUI_X_Config(void) {
  2.     #if USE_EXSRAM
  3.     GUI_ALLOC_AssignMemory((u32 *)Bank1_SRAM2_Addr, 400*1024);
  4.     #else
  5.   //
  6.   // 32 bit aligned memory area
  7.   //
  8.   static U32 aMemory[GUI_NUMBYTES / 4];
  9.   //
  10.   // Assign memory to emWin
  11.   //
  12.   GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
  13.     #endif
  14.   //
  15.   // Set default font
  16.   //
  17.   GUI_SetDefaultFont(GUI_FONT_8X16);
  18. }
复制代码
载入字库:
  1. /* GUI_FONT structure in RAM */
  2. static GUI_FONT xbf16_16Font;
  3. /* GUI_XBF_DATA structure in RAM */
  4. static GUI_XBF_DATA XBF16_16Data;
  5. //16_16字库地址
  6. static const    uint32_t TTF16_16Addr=EXROM_ADDR_16_16_TTF;
  7. /*
  8. 功能:从字库中获取字体
  9. */
  10. static int _cbGetData(U32 Off, U16 NumBytes, void * pVoid, void * pBuffer)
  11. {
  12.     uint32_t u32_StartAddr=*((uint32_t *)pVoid);
  13.    
  14.    SPI_BufferRead(pBuffer,u32_StartAddr + Off,NumBytes);
  15.    
  16. //    for(uint16_t i=0;i<NumBytes;i++)
  17. //    printf("Read data=%#x\\r\\n",(uint8_t)pBuffer[i]);
  18.    return (0);
  19. }
  20. /*
  21. 功能:创建字库结构
  22. */
  23. static void CreateXBF_Font(void)
  24. {
  25.     const uint32_t *TtfAddr=&TTF16_16Addr;
  26.     //创建16_16
  27.     GUI_XBF_CreateFont(&xbf16_16Font,            /* Pointer to GUI_FONT structure */
  28.                                          &XBF16_16Data,           /* Pointer to GUI_XBF_DATA structure */
  29.                                          GUI_XBF_TYPE_PROP_AA4_EXT,   /* Font type to be created */
  30.                                          _cbGetData,          /* Pointer to callback function */
  31.                                          (void *)TtfAddr);               /* Pointer to be passed to callback */
  32. }
  33. /*
  34. 功能:在系统中载入中文字库
  35. */
  36. void LoadTTF(void)
  37. {
  38.     CreateXBF_Font();
  39.     GUI_UC_SetEncodeUTF8();
  40. }
  41. /*
  42. 功能:设置为外置16*16汉字库
  43. */
  44. void SetXbfFont16_16(void)
  45. {
  46.     GUI_SetFont(&xbf16_16Font);
  47. }
复制代码
主函数运行:
  1. //初始化LCD
  2.     LCD_Button_Init();
  3.     //初始化GUI
  4.     GUI_Init();
  5.     //载入自定义字库
  6.     LoadTTF();
  7.     //分配绘图缓存
  8.     RefLCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_NOTRANS);
  9.     GUI_MEMDEV_Select(RefLCD);
  10. GUI_SetColor(GUI_RED);
  11. GUI_SetBkColor(GUI_WHITE);
  12. GUI_DrawLine(0,0,31,0);
  13. SetXbfFont16_16();
  14.    
  15. GUI_DispStringAt("ABCD",0,1);
  16. GUI_MEMDEV_CopyToLCD(RefLCD);
  17. while(1);
复制代码
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-12-2 22:18:29 | 显示全部楼层

回 kc_cec 的帖子

kc_cec:可否麻烦你在自己的平台上试试看,会不会有我这种现象

代码流程:初始化LCD及外部SRAM->初始化GUI->载入字库字体->开缓存->写字符->刷新缓存
代码依次按照上面顺序排列:
....... (2014-12-02 11:58) 
把这里的参数改下试试:
  RefLCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_NOTRANS);
改为:
  RefLCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_HASTRANS);
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-3 09:42:48 | 显示全部楼层

回 eric2013 的帖子

eric2013:把这里的参数改下试试:
刀攀昀LCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_NOTRANS);
改为:
刀攀昀LCD=GUI_MEMDEV_CreateEx(0,0,480,320,GUI_MEMDEV_HASTRANS);
.......(2014-12-02 22:18)嬀/color]
之前就试过了,现象依旧
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
107101
QQ
发表于 2014-12-3 21:49:59 | 显示全部楼层

回 kc_cec 的帖子

kc_cec:之前就试过了,现象依旧 (2014-12-03 09:42) 
那这个问题的确是不太好解决了。。。
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-9 14:27:22 | 显示全部楼层

回 eric2013 的帖子

eric2013:那这个问题的确是不太好解决了。。。(2014-12-03 21:49)嬀/color]
同样的使用环境下,你的不会出现这种情况吗?

这个应该不是stemwin的本身BUG吧?
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-9 14:56:41 | 显示全部楼层

回 eric2013 的帖子

eric2013:那这个问题的确是不太好解决了。。。(2014-12-03 21:49)嬀/color]
排出flash的问题,我直接在SD卡中读字库 依然是这个现象
回复

使用道具 举报

3

主题

19

回帖

3

积分

新手上路

积分
3
 楼主| 发表于 2014-12-9 15:00:06 | 显示全部楼层

回 eric2013 的帖子

eric2013:那这个问题的确是不太好解决了。。。(2014-12-03 21:49)嬀/color]
也排除缓存的问题,直接用单片机内存分配一个小空间  显示现象依旧
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-18 10:07 , Processed in 0.329742 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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