STEMWIN开发记录指南 |
您所在的位置:网站首页 › flash中导入图片为什么图片不出现在工作区域 › STEMWIN开发记录指南 |
最近想使用emwin用于stm32的GUI界面开发、现在记录一些遇到的问题,以及一些解决、未解决的方法。 不定期更新汇总。 目前开发平台正点原子的STM32F103ZET6,野火的STM32F429 前景描述:想将图片存储在外部存储器,使用板载spi flash。使用Image2LCD将bmp图片转化成bin,然后通过SD更新到flash中 问题一: 在从外部调用该图片用于显示的过程中,发现一个有趣的事情。 一般emwin显示bmp图片是使用emwin自带工具BmpCvtST.exe生成.C或者流位图(dta)。生成C数组一般类似这样: extern GUI_CONST_STORAGE GUI_BITMAP bmniao100; static GUI_CONST_STORAGE unsigned short _acniao100[] = {...}; GUI_CONST_STORAGE GUI_BITMAP bmniao100 100, // xSize 100, // ySize 200, // BytesPerLine 16, // BitsPerPixel (unsigned char *)_acniao100, // Pointer to picture data NULL, // Pointer to palette GUI_DRAW_BMP565 }; 然后加载到工程里面,用GUI_DrawBitmap(&bmniao100 , 0, 0);调用即可正常显示。这种方法加载图片很快,但是遇到图片多的GUI,单片机RAM不够,根本扛不住,只能放在外部存储器。 我在从外部flash调用bin显示的时候发现。 用于F103: 有意思的来了: 使用emwin自带 GUI_ALLOC申请动态内存 /*申请一块内存空间 并且将其清零*/ hMem = GUI_ALLOC_AllocZero(size); /*把申请到内存的句柄转换成指针类型*/ _acBuffer = GUI_ALLOC_h2p(hMem); bindBmpFileData_flash(_acBuffer, (uint8_t *)pName); bitmap.pData = _acBuffer; GUI_DrawBitmap(&bitmap,0,0); GUI_ALLOC_Free(hMem);显示结果如下: 显示如下: 显示正常。 有点意思。 移植到野火的F429上面,使用GUI自带的 GUI_ALLOC_ 我测试是正常的。 我觉得的问题点是在哪,是在GUIConf.c内存分配方面。原子的内存分配使用如下: //GUI_X_Config //初始化的时候调用,用来设置emwin所使用的内存 void GUI_X_Config(void) { if(USE_EXRAM) //使用外部RAM { U32 *aMemory = mymalloc(SRAMEX,GUI_NUMBYTES); //从外部SRAM中分配GUI_NUMBYTES字节的内存 GUI_ALLOC_AssignMemory((void*)aMemory, GUI_NUMBYTES); //为存储管理系统分配一个存储块 GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //设置存储快的平均尺寸,该区越大,可用的存储快数量越少 GUI_SetDefaultFont(GUI_FONT_6X8); //设置默认字体 }else //使用内部RAM { U32 *aMemory = mymalloc(SRAMIN,GUI_NUMBYTES); //从内部RAM中分配GUI_NUMBYTES字节的内存 GUI_ALLOC_AssignMemory((U32 *)aMemory, GUI_NUMBYTES); //为存储管理系统分配一个存储块 GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE); //设置存储快的平均尺寸,该区越大,可用的存储快数量越少 GUI_SetDefaultFont(GUI_FONT_6X8); //设置默认字体 } }使用mymalloc内存管理。 而野火的内存分配 void GUI_X_Config(void) { #ifdef USE_EXTMEMHEAP GUI_ALLOC_AssignMemory(HeapMem, GUI_NUMBYTES); #else GUI_ALLOC_AssignMemory(extMem, GUI_NUMBYTES); #endif }没用内存管理,直接映射到SDRAM.。 当然,如果配合WM窗口等控件显示时,则不会有重影现象,如果单独显示,还是用的正点原子模板,就要注意一下。 问题二:关于bmp转bin文件格式问题。 使用LSB低位在前,对于emwin,显示是正常的 如果使用MSB格式: |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |