初级会员
- 积分
- 69
- 金钱
- 69
- 注册时间
- 2019-6-19
- 在线时间
- 14 小时
|
20金钱
新手求助,在跟着原子哥的教程学习LVGL,现在卡在使用外部字体。
使用LvglFontTool V0.5生成了一个宋体字体,将生成的lv_font_song_16.bin存在了SD卡的Font目录下面;
在SDRAM中开辟了一个10M的缓冲区(字体文件大小9M多),在main线程中把字体文件读入缓冲区,
但是没有字符(包括英文字符)显示出来,恳请高手帮忙指点一二。
相关代码如下:
uint32_t bytes_read;
FIL f_font;
uint8_t font_data[1024*1024*10] __attribute__((at(0XC0000000+ 800*480*6)));
main()
{
...
// load font file into sdram
res = f_open(&f_font, "0:/Font/lv_font_song_16.bin", FA_READ | FA_OPEN_EXISTING);
if(res == FR_OK)
{
rt_kprintf("打开文件成功。\r\n");
file_size = f_font.obj.objsize;
res = f_read(&f_font, font_data, file_size, &bytes_read);
if(res == FR_OK)
{
rt_kprintf("文件读取成功,读到字节数据:%d\r\n", bytes_read);
}
else
{
rt_kprintf("文件读取失败:(%d)\n", res);
}
}
else
{
rt_kprintf("打开文件失败。\r\n");
}
f_close(&f_font);
lv_init();
lv_port_disp_init();
lv_port_indev_init();
...
}
lv_font_song_16.c中修改的内容:
extern uint8_t font_data[];
static uint8_t *__user_font_getdata(int offset, int size){
//如字模保存在SPI FLASH, SPIFLASH_Read(__g_font_buf,offset,size);
//如字模已加载到SDRAM,直接返回偏移地址即可如:return (uint8_t*)(sdram_fontddr+offset);
return (uint8_t*)(font_data + offset);
}
测试函数内容:
LV_FONT_DECLARE(lv_font_song_16)
void lv_mainstart(void)
{
lv_obj_t* label = lv_label_create(lv_scr_act());
lv_obj_set_style_text_font(label, &lv_font_song_16, LV_STATE_DEFAULT);
lv_label_set_text(label, "世界你好!Hello, world!");
lv_obj_center(label);
}
测试线程:
static void lvgl_thread_entry(void* parameters)
{
lv_mainstart();
while (1)
{
rt_mutex_take(&lvgl_mutex, RT_WAITING_FOREVER);
lv_timer_handler();
rt_mutex_release(&lvgl_mutex);
rt_thread_delay(5);
}
}
|
|