emwin加载xbf字体出现段错误
我这里根据安富莱的教程通过FontCvt生成了xbf全字库,然后将两个字库合并成了一个font.bin文件,并通过U盘烧录进了spi flash中,字库加载方式和调用代码如下图所示一旦进入了调用该字库的界面,就会出现段错误,是什么原因导致的呢,大家有没有遇到过这个问题啊?_cbGetXbfFontNewSong24()和_cbGetXbfFontNewSong12()这两个函数也只有上电的时候进入了一次
显示屏是800*480, 我配置的GUI_NUMBYTES为70*1024, GUI_BLOCKSIZE = 0x80
堆和栈别为0x4000和0x6000
进入该界面后,执行完InitDialog_Option(pMsg)就出现段错误,如果不设置pfont = &XBF_FontNewSong12;就没有问题
调试下XBF从外部SPI Flash读取的接口函数,是不是正常返回值了
STM32F407 EMWIN 加载xbf字库出现段错误
eric2013 发表于 2023-7-6 09:16调试下XBF从外部SPI Flash读取的接口函数,是不是正常返回值了
这个函数sf_ReadBuffer()应该没什么问题,我们的一些仪器信息和项目信息也都是存在spi flash中的,读写都正常。
单步调试发现_cbGetXbfFontNewSong12()和_cbGetXbfFontNewSong24()函数也只是在创建字库的时候GUI_XBF_CreateFont()调用一次,其中NumberBytes都是12(不知道是怎么来的),后面就没有再调用了。 如果是U盘烧录的话,你的地址是不是对。这个不是直接的源文件写入了。 本帖最后由 circlegan 于 2023-7-7 20:18 编辑
eric2013 发表于 2023-7-7 09:26
如果是U盘烧录的话,你的地址是不是对。这个不是直接的源文件写入了。
我的U盘烧录程序是调用下面函数,这个有什么问题没
void copy_font(uint32_t flash_addr)
{
u32 total = 0;
u32 i = 0;
FRESULT res_flash;
u8 buff = {0};
FIL fnew;
UINT br = 0;
u32 fwaddr = flash_addr; //写入的地址,0x00000000
res_flash = f_open(&fnew,"0:update/font.bin", FA_READ);
if(res_flash != FR_OK)
return;
else if(fnew.fsize > 4 * 1024 * 1024)// 只有4M空间
{
return;
}
for(i=0;i<fnew.fsize/4096+1; i++)
{
res_flash = f_read(&fnew, buff, 4096, &br);
if(br == 0)// 没有读取到数据
break;
sf_WriteBuffer(buff, fwaddr+total, br);
total += br;
if(br < 4096)// 已经读完
break;
}
f_close(&fnew);
} circlegan 发表于 2023-7-7 19:42
我的U盘烧录程序是调用下面函数,这个有什么问题没
void copy_font(uint32_t flash_addr)
这种的,你这个局部变量这么大u8 buff = {0};
如果使用了RTOS,你的任务栈空间要够,如果使用的裸机,xxx.S文件的stack大小要够。
别的看着没什么问题,可以考虑全部复制完毕后,做个读取对比校验。
eric2013 发表于 2023-7-8 09:03
这种的,你这个局部变量这么大u8 buff = {0};
如果使用了RTOS,你的任务栈空间要够,如果使用的 ...
我的这个是裸机,栈设置了64k,堆设置了16k。上面那个图是调试对比的内容,好像是不太一样。我再按你说的写完之后,再读取和源文件对比下看看,谢谢你了哈 找到原因了,是因为spiflash没有初始化好,导致字库没有写入成功,感谢硬汉:lol
页:
[1]