战舰STM32F103ZET6开发板+emWin无法GUI_Init()

发布于 2020-12-25 16:09:17

本人此次基于正点的战舰STM32F103ZET6开发板,使用外部SRAM给emWin分配内存空间,最开始分配的是60K的内存空间,外部SRAM的内存是1M字节。首先测试外部SRAM是可以使用的,然后下载程序后,直接死机。错误提示如下图所示:
error.png

其中,SRAM的初始化用的是INIT_ENV_EXPORT(SRAM_FSMC_Init);进行初始化的。在SRAM_FSMC_Init()最后用的是rt_memheap_init(&system_heap, "sram", (void *)Bank1_SRAM3_ADDR, SRAM_SIZE);进行内存管理,且

#define SRAM_SIZE       ((uint32_t)0x40000) //256k

在GUIConf.c文件中,修改GUI_X_Config()函数如下所示:

void GUI_X_Config(void)
{
    //
    // 32 bit aligned memory area
    //
    U32 *aMemory = rt_malloc(GUI_NUMBYTES);
    
    if(aMemory == RT_NULL)
    {
        rt_kprintf("try to get memory failed!!!\n");
    }
    else
    {
        rt_kprintf("try to get memory successed!!!\n");
        // Assign memory to emWin
        //
        GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);
        GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);
        //
        // Set default font
        //
        GUI_SetDefaultFont(GUI_FONT_6X8);
    }
    
}

如果GUI_NUMBYTES是60K,那么程序就会死在函数_Init(GUI_DEVICE * pDevice)中,错误提示如上图所示;如果GUI_NUMBYTES是30K,那么程序编译通过,但是不会显示字符。显示程序如下图所示:
code.png
结果显示图如下图所示:
ppp.png

通过结果图,可以看出,GUI_SetBkColor(GUI_RED);这一行代码是执行成功的,全屏被刷新为红色。但是在屏幕上我们可以看到有一条竖直的蓝色线条,如果我将GUI_DispString("www.armfly.com navailable");代码屏蔽掉,那么线条就会消失;如果不屏蔽,线条就会出现。而且即便我从CPU内部将30K空间分配给emWin,结果也是一样的。

后来多次测试也发现,只要有字符串/字符的显示,都会在不同位置出现不同长短的线条。

所以,我的问题就是第一:为什么1M的外部SRAM,我分配60K空间给emWin就会死机,但是30K却不会?

第二:为什么当有文本内容显示的时候,都会显示成不一样的线条?

               ----望各位兄弟姐妹帮忙解答一下,在下不胜感激,谢谢

查看更多

关注者
1
被浏览
383
1 个回答
james_s
james_s 2021-04-12

可以检查一下链接脚本, 看看是否和链接脚本有关系.

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览