嵌入式技术论坛
直播中

丁冬芹

8年用户 1382经验值
私信 关注
[问答]

STM32F103ZET6开发板+emWin无法GUI_Init()怎么办呐

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

1.jpg

其中,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,那么程序编译通过,但是不会显示字符。显示程序如下图所示:

1.jpg

2.jpg

结果显示图如下图所示:

1.jpg

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

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

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

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

回帖(1)

王鹏

2022-10-18 10:22:54
可以检查一下链接脚本, 看看是否和链接脚本有关系.
举报

更多回帖

发帖
×
20
完善资料,
赚取积分