**
這兩天困擾我的問題,emWin調用小工具edit顯示,得到焦點後,文本顯示被光标覆寫,光标為全黑色。
**
*
後來發現是驅動的問題,每次顯示光标的時候,會調用_FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1)函數,這個函數用的是正點原子的代碼,一直沒有懷疑是這塊的問題,以為是emwin系統的問題,
static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
LCD_Fill(x0,y0,x1,y1,LCD_COLORINDEX);
}
後來打開emwin的源碼一看,不是這樣的,前面還有一個異或操作_XorPixel,這個函數對目前像素與黑框異或,就可以反色顯示文本了。
static void _FillRect(GUI_DEVICE * pDevice, int x0, int y0, int x1, int y1) {
LCD_PIXELINDEX PixelIndex;
int x;
PixelIndex = LCD__GetColorIndex();
if (GUI_pContext->DrawMode & LCD_DRAWMODE_XOR) {
for (; y0 <= y1; y0++) {
for (x = x0; x <= x1; x++) {
_XorPixel(pDevice, x, y0);
}
}
} else {
for (; y0 <= y1; y0++) {
for (x = x0; x <= x1; x++) {
_SetPixelIndex(pDevice, x, y0, PixelIndex);
}
}
}
吓得我趕緊檢查了一下其他底層驅動有沒有問題。。。
2019.05.21更新
OLED上使用emwin還是存在很大的問題,比如用廠家給的驅動會重新整理慢啊。。。
_FillRect這個區域重新整理的函數,還是重新整理太慢了,後來把後面的打點函數改了一下,在區域顯示,采用晶片的位址自增功能,對螢幕進行批量重新整理。簡直快的我懷疑人生。。。。。。。