搜索
bottom↓
回复: 10

求助:请问是用RT-Thread的GUI时,如何将汉字字库放到SD卡中,是使用什么样的格式

[复制链接]

出0入0汤圆

发表于 2010-10-15 00:32:27 | 显示全部楼层 |阅读模式
请问是用RT-Thread的GUI时,如何将汉字字库放到SD卡中,是使用什么样的格式。
显示是使用GUI DEMO,液晶能正常显示,但如果使用汉字 #define RTGUI_USING_FONTHZ 由于无法找到汉字字库,系统进入错误。

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2010-10-15 09:41:29 | 显示全部楼层
#define RTGUI_USING_FONTHZ
#define RTGUI_USING_HZ_BMP

出0入0汤圆

 楼主| 发表于 2010-10-15 22:10:58 | 显示全部楼层
还是不行,在打开上面你提到的两个宏定义后,程序在执行
   rtgui_system_server_init();中,在它调用
void rtgui_font_system_init()
{
        rtgui_list_init(&(_rtgui_font_list));

        /* set default font to NULL */
        rtgui_default_font = RT_NULL;

#ifdef RTGUI_USING_FONT16
        rtgui_font_system_add_font(&rtgui_font_asc16);
#ifdef RTGUI_USING_FONTHZ
        rtgui_font_system_add_font(&rtgui_font_hz16);
#endif
#endif

#ifdef RTGUI_USING_FONT12
        rtgui_font_system_add_font(&rtgui_font_asc12);
#ifdef RTGUI_USING_FONTHZ
        rtgui_font_system_add_font(&rtgui_font_hz12);            -------------》程序进入了硬件错误处理函数
#endif
#endif

#ifdef RTGUI_USING_FONT12
        if (rtgui_default_font == RT_NULL)
                rtgui_font_set_defaut(&rtgui_font_asc12);
#endif
#ifdef RTGUI_USING_FONT16
        if (rtgui_default_font == RT_NULL)
                rtgui_font_set_defaut(&rtgui_font_asc16);
#endif
}



是进入到了void rt_hw_hard_fault_exception(struct stack_contex* contex)
{
        rt_kprintf("psr: 0x%08x\n", contex->psr);
        rt_kprintf(" pc: 0x%08x\n", contex->pc);
        rt_kprintf(" lr: 0x%08x\n", contex->lr);
        rt_kprintf("r12: 0x%08x\n", contex->r12);
        rt_kprintf("r03: 0x%08x\n", contex->r3);
        rt_kprintf("r02: 0x%08x\n", contex->r2);
        rt_kprintf("r01: 0x%08x\n", contex->r1);
        rt_kprintf("r00: 0x%08x\n", contex->r0);

        rt_kprintf("hard fault on thread: %s\n", rt_current_thread->name);
#ifdef RT_USING_FINSH
        list_thread();
#endif
        while (1);
}


如果不使用汉字,使用SVN中提供的GUI_DEMO英文字体能显示,界面也能正常,只是汉字显示的是乱码。

出0入0汤圆

发表于 2010-10-15 22:16:20 | 显示全部楼层
你中文字体没加,当然会出错了。

出0入0汤圆

发表于 2010-10-15 22:19:25 | 显示全部楼层
唔,看错了,你的是要放到SD卡去。得改个宏,用
#define RTGUI_USING_HZ_FILE

然后中文字体放在/resource目录下,参见STM32Radio的目录,里面有中文字体文件的。

出0入0汤圆

 楼主| 发表于 2010-10-16 00:08:11 | 显示全部楼层
多谢你的解答。
我按照你所告诉的进行修改,也将字库存入了SD卡,可问题依旧。
进入错误中断的那一条指令是。ipc.c 中
rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time)
rt_err_t rt_mutex_take (rt_mutex_t mutex, rt_int32_t time)
{
        register rt_base_t temp;
        struct rt_thread* thread;

        RT_ASSERT(mutex != RT_NULL);

        /* disable interrupt */
        temp = rt_hw_interrupt_disable();

        /* get current thread */
        thread = rt_thread_self();

#ifdef RT_USING_HOOK
        if (rt_object_trytake_hook != RT_NULL) rt_object_trytake_hook(&(mutex->parent.parent));
#endif

#ifdef RT_IPC_DEBUG
        rt_kprintf("mutex_take: current thread %s, mutex value: %d, hold: %d\n",
                thread->name, mutex->value, mutex->hold);
#endif

        /* reset thread error */
        thread->error = RT_EOK;

        if (mutex->owner == thread)                                     ------------------------》执行该条指令时进入硬件错误中断
        {
                /* it's the same thread */
                mutex->hold ++;
        }





。}

此处的汇编代码为:
0x08000A74 6A20      LDR      r0,[r4,#0x20]
0x08000A76 42A8      CMP      r0,r5
0x08000A78 D103      BNE      0x08000A82

执行之前,R0 = 0x00000000   R4=0x20001918  R5=0x00000000


另外,我使用的芯片是STM32F103VC  
编译器版本为 MDK-ARM V4.10

出0入0汤圆

 楼主| 发表于 2010-10-16 23:24:06 | 显示全部楼层
问题找到了,是由于在注_册文件系统的时候,我是是用STM32Radio中的实例,但由于没有是用外边FLASH,只是用了SD卡,结果注_册的路径错误,跟 hz16font.c中要求的路径 “"/resource/hzk16.fnt"        /* font_fn                         */”不一致,造成的错误,现将SD卡直接注_册到“/”下,成功。可以正常显示汉字了。

同事也感谢 ffxz 的回答。

出0入0汤圆

发表于 2010-10-17 07:38:02 | 显示全部楼层
:-) 有问题还需要自己多研究研究,我这段时间非常忙,抱歉不能给予非常详细的解释。

出0入0汤圆

发表于 2010-12-13 12:45:46 | 显示全部楼层
我今天也碰到这样的问题,跟你进入错误的情况一模一样. 请问snow_person01 你在哪里更改了一下就成功了?

出0入0汤圆

 楼主| 发表于 2011-1-1 19:28:23 | 显示全部楼层
回复【8楼】zjwznlz 泥鳅
-----------------------------------------------------------------------

看我六楼的回复

出0入0汤圆

发表于 2011-1-4 23:56:16 | 显示全部楼层
搞个SPI的FLASH还方便些,搞成文件系统的SD卡麻烦
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-19 15:02

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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