生活随笔
收集整理的這篇文章主要介紹了
STEMWIN开发记录指南—-从外部flash显示图片
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
最近想使用emwin用于stm32的GUI界面開發(fā)、現(xiàn)在記錄一些遇到的問題,以及一些解決、未解決的方法。
不定期更新匯總。
目前開發(fā)平臺(tái)正點(diǎn)原子的STM32F103ZET6,野火的STM32F429
前景描述:想將圖片存儲(chǔ)在外部存儲(chǔ)器,使用板載spi flash。使用Image2LCD將bmp圖片轉(zhuǎn)化成bin,然后通過SD更新到flash中
問題一:
在從外部調(diào)用該圖片用于顯示的過程中,發(fā)現(xiàn)一個(gè)有趣的事情。
一般emwin顯示bmp圖片是使用emwin自帶工具BmpCvtST.exe生成.C或者流位圖(dta)。生成C數(shù)組一般類似這樣:
extern GUI_CONST_STORAGE GUI_BITMAP bmniao100
;static GUI_CONST_STORAGE
unsigned short _acniao100
[] = {...};GUI_CONST_STORAGE GUI_BITMAP bmniao100
100, 100, 200, 16, (unsigned char *)_acniao100
, NULL, GUI_DRAW_BMP565
};然后加載到工程里面,用
GUI_DrawBitmap(&bmniao100
, 0, 0);調(diào)用即可正常顯示。
這種方法加載圖片很快,但是遇到圖片多的GUI,單片機(jī)RAM不夠,根本扛不住,只能放在外部存儲(chǔ)器。
我在從外部flash調(diào)用bin顯示的時(shí)候發(fā)現(xiàn)。
用于F103:
有意思的來了:
使用emwin自帶 GUI_ALLOC申請動(dòng)態(tài)內(nèi)存
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
);
顯示結(jié)果如下:
看到?jīng)]有,有重影!!!
如果使用正點(diǎn)原子的mymalloc函數(shù):
_acBuffer
= mymalloc(SRAMEX
,size
);
bindBmpFileData_flash_02(_acBuffer
, (uint8_t
*)pName
);
bitmap
.pData
= _acBuffer
;
GUI_DrawBitmap(&bitmap
,0,0);
myfree(SRAMEX
,_acBuffer
);
顯示如下:
顯示正常。
有點(diǎn)意思。
移植到野火的F429上面,使用GUI自帶的 GUI_ALLOC_ 我測試是正常的。
我覺得的問題點(diǎn)是在哪,是在GUIConf.c內(nèi)存分配方面。原子的內(nèi)存分配使用如下:
void GUI_X_Config(void) {if(USE_EXRAM
) {U32
*aMemory
= mymalloc(SRAMEX
,GUI_NUMBYTES
); GUI_ALLOC_AssignMemory((void*)aMemory
, GUI_NUMBYTES
); GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE
); GUI_SetDefaultFont(GUI_FONT_6X8
); }else {U32
*aMemory
= mymalloc(SRAMIN
,GUI_NUMBYTES
); GUI_ALLOC_AssignMemory((U32
*)aMemory
, GUI_NUMBYTES
); GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE
); GUI_SetDefaultFont(GUI_FONT_6X8
); }
}
使用mymalloc內(nèi)存管理。
而野火的內(nèi)存分配
void GUI_X_Config(void)
{
#ifdef USE_EXTMEMHEAPGUI_ALLOC_AssignMemory(HeapMem
, GUI_NUMBYTES
);#else GUI_ALLOC_AssignMemory(extMem
, GUI_NUMBYTES
); #endif
}
沒用內(nèi)存管理,直接映射到SDRAM.。
當(dāng)然,如果配合WM窗口等控件顯示時(shí),則不會(huì)有重影現(xiàn)象,如果單獨(dú)顯示,還是用的正點(diǎn)原子模板,就要注意一下。
問題二:關(guān)于bmp轉(zhuǎn)bin文件格式問題。
使用LSB低位在前,對于emwin,顯示是正常的
如果使用MSB格式:
這個(gè)需要注意。
總結(jié)
以上是生活随笔為你收集整理的STEMWIN开发记录指南—-从外部flash显示图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。