基于STM32的uCGUI移植和优化文档格式.docx

上传人:b****7 文档编号:22116745 上传时间:2023-02-02 格式:DOCX 页数:46 大小:36.47KB
下载 相关 举报
基于STM32的uCGUI移植和优化文档格式.docx_第1页
第1页 / 共46页
基于STM32的uCGUI移植和优化文档格式.docx_第2页
第2页 / 共46页
基于STM32的uCGUI移植和优化文档格式.docx_第3页
第3页 / 共46页
基于STM32的uCGUI移植和优化文档格式.docx_第4页
第4页 / 共46页
基于STM32的uCGUI移植和优化文档格式.docx_第5页
第5页 / 共46页
点击查看更多>>
下载资源
资源描述

基于STM32的uCGUI移植和优化文档格式.docx

《基于STM32的uCGUI移植和优化文档格式.docx》由会员分享,可在线阅读,更多相关《基于STM32的uCGUI移植和优化文档格式.docx(46页珍藏版)》请在冰豆网上搜索。

基于STM32的uCGUI移植和优化文档格式.docx

14#defineGUI_ALLOC_SIZE5000//这里讲的是动态内存机制

15                    //这里rgb接口模式的可能会有用到,uCGUI就是在我们的ram开辟一块空间,

                      //然后uCGUI把运算好的每个点都放进我们主控ram里面的空间

16                    //所以,这里就相当于把写进液晶gram里面的操作变成了写进主控ram里面,

                      //那么大家可能就会问了,干嘛这么多次一举,直接写进去不就可以了

17

18/*原理:

一般来说,在大的屏幕上面(4.0以上吧,印象中),都是没有控制器,(像我的液晶屏就是spfd5420,当然,

19不同的屏幕的液晶主控都是不一样的,但是寄存器操作都是差不多的,

20所以有些初始化配置还是能互用的.)所以呢,这时候我们要用到的就只有RGB接口了,

21RGB要求我们要不断的刷新屏幕,刷新率越高,效果就越好,因为一般这种用来做动态的,uCGUI就是属于静态类型的

22像如果我们要用stm32主控做视频应用的时候,就是动态的,我们需要不断的刷新屏幕,但是当我们主控一边运算,

23一边往液晶接口送数据的时候,会有明显刷屏的感觉(运算->

画点->

运算->

画点....,这个运算

24->

运算.......画点->

画点...是不一样的,因为对屏幕一直画点,填充,而中间不用插入运算,

25刷一个屏幕时间时间倍速差别是非常巨大的,后面大家也会见识到这种差别.),所以,用GUI申请的空间里面

26边运算,边填充,填充完再一次性运出去(这里可以通过DMA控制FSMC总线,不断的从外置SRAM往GRAM自动搬运数据,

27这是不用主控去插手的,所以,主控大部分时间是负责运算,其他时间可以空闲出来,

28让DMA自己去忙活),同理,因为dma跟cpu的分工,所以,这里同样的把画点,画点,运算,运算不完全的分开了,

29屏幕刷新速度非常之可观(DMA的速度相比大家还是非常了解的,它就是为速度而生的.),*/

30

31//#defineGUI_ALLOC_SIZE1024*1024

      /*Sizeofdynamicmemory...ForWMandmemorydevices*/

32

33/*********************************************************************

34*

35*Configurationofavailablepackages

36*/

37

38#defineGUI_WINSUPPORT1//这个是窗口支持,一般开始开着的

39#defineGUI_SUPPORT_MEMDEV1//内存控制,开

40#defineGUI_SUPPORT_AA0//抗锯齿,为了性能着想,还是关了比较好

41

42#endif/*Avoidmultipleinclusion*/

复制代码

  GUITouchConf.h是有关于触摸屏配置的,这里我们就略过了.

1#ifndefLCDCONF_H

2#defineLCDCONF_H

4/*********************************************************************

5*

6*GeneralconfigurationofLCD

7*

8**********************************************************************

9*/

10

11/*

12*这个定义的是你x轴的长度,像我这里的屏幕长为400个像素

13*/

14#defineLCD_XSIZE(400)

15

16/*

17*这里这是屏幕的宽

18*/

19#defineLCD_YSIZE(240)/*Y轴长度*/

20

21/*

22*这里是屏幕的颜色有多少个位

23*/

24#defineLCD_BITSPERPIXEL(16)/*定义数据长度为16bit*/

25

26/*

27*控制器类型,如果你里面有包含这些判断变量,这个最好改成你认识的

28*/

29#defineLCD_CONTROLLER9325/*定义控制器类型*/

31

32#endif/*LCDCONF_H*/

  配置层的东西我们都已经搞定了,接下来我们要修改的是uCGUI开放给我们的用户层的东西,GUI_X.c可以直接拷进去,这个是用户层和系统层的关联文件,一些demo也会用到这个文件的时间函数或者延迟函数,所以这个文件拷进去放着就可以了.

1#include"

GUI.h"

2#include"

GUI_X.h"

6*Globaldata

7*/

8volatileintOS_TimeMS;

9

10/*********************************************************************

11*

12*Timing:

13*GUI_X_GetTime()

14*GUI_X_Delay(int)

16SometimingdependentroutinesrequireaGetTime

17anddelayfunction.Defaulttimeunit(tick),normallyis

181ms.

19译:

一些需要时间的相关函数需要用到gettime和延迟.

20默认时间单位为1ms.

21*/

22

23intGUI_X_GetTime(void){

24return0;

25}

26

27voidGUI_X_Delay(intms)

28{

29}

31/*********************************************************************

32*

33*GUI_X_Init()

34*

35*Note:

36*GUI_X_Init()iscalledfromGUI_Initisapossibilitytoinit

37*somehardwarewhichneedstobeupandrunningbeforetheGUI.

38*Ifnotrequired,leavethisroutineblank.

39*

40*译:

GUI_X_Init()是在gui_init()调用前,gui启动或者运行前准备.

41*如果不是必须的,可以把这个函数留空白.

42*/

43

44voidGUI_X_Init(void)

45{

46

47}

48

49

50

51/*********************************************************************

52*

53*GUI_X_ExecIdle

54*

55*Note:

56*CalledifWMisinidlestate

57*译:

视窗管理器空闲时候调用

58*/

59

60voidGUI_X_ExecIdle(void){}

61

62/*********************************************************************

63*

64*Logging:

OSdependent

65

66Note:

67Loggingisusedinhigherdebuglevelsonly.Thetypicaltarget

68builddoesnotuselogginganddoestherefornotrequireanyof

69theloggingroutinesbelow.Forareleasebuildwithoutlogging

70theroutinesbelowmaybeeliminatedtosavesomespace.

71(Ifthelinkerisnotfunctionawareandeliminatesunreferenced

72functionsautomatically)

73译:

系统日志层应用程序

74

75*/

76

77voidGUI_X_Log(constchar*s){}

78voidGUI_X_Warn(constchar*s){}

79voidGUI_X_ErrorOut(constchar*s){}

  在uCGUI和底层驱动的接口文件时LCDDriver.c,大家打开文件夹可以看到这几个文件:

lcdwin.c,lcdnull.c,lcdDummy.c,这三个文件你随便修改哪个都行,一开始我是直接修改lcdnull.c的,不过一开始没经验,一直不能正常调用我的uCGUI函数,所以,我的队友告诉我,要修改另外一个(lcdwin.c),这次才反应过来,理论上,修改lcdnull.c也是可以的,就是一些细节性的东西可以要多注意点.下面我讲解下怎么修改lcdwin.c这个文件.

源文件我先贴出来:

#ifdefined(WIN32)&

&

!

defined(LCD_SIMCONTROLLER)

#include<

windows.h>

#include"

LCD.h"

LCD_Private.h"

/*includeLCDConf.h*/

LCDSIM.h"

GUI_Private.h"

memory.h"

/*********************************************************************

*

*Defines

**********************************************************************

*/

#ifLCD_BITSPERPIXEL<

=8

#definePIXELINDEXU8

#else

#definePIXELINDEXWORD

#endif

#ifdefWIN32

#ifndefASSERT

#defineASSERT(Val)\

if(!

(Val))\

MessageBox(NULL,"

...infile"

__FILE__,"

Assertionfailed..."

MB_OK);

#endif

#ifdefLCD_ASSERT

#undefLCD_ASSERT

#defineLCD_ASSERT(v)ASSERT(v)

#ifndefLCD_DISPLAY_INDEX

#defineLCD_DISPLAY_INDEX0

*Macrosforinternaluse

#ifdef_DEBUG

staticint_CheckBound(unsignedintc){

unsignedintNumColors=LCD_BITSPERPIXEL>

8?

0xffff:

(1<

<

LCD_BITSPERPIXEL)-1;

if(c>

NumColors){

GUI_DEBUG_ERROROUT("

LCDWin:

:

SETPIXEL:

parametersoutofbounds"

);

return1;

}

return0;

}

#defineSETPIXEL(x,y,c)\

_CheckBound(c)){\

LCDSIM_SetPixelIndex(x,y,c,LCD_DISPLAY_INDEX);

\

#defineSETPIXEL(x,y,c)LCDSIM_SetPixelIndex(x,y,c,LCD_DISPLAY_INDEX)

#defineXORPIXEL(x,y)_XorPixel(x,y)

*Staticcode

*_XorPixel

staticvoid_XorPixel(intx,inty){

unsignedintIndex=LCD_L0_GetPixelIndex(x,y);

LCDSIM_SetPixelIndex(x,y,LCD_NUM_COLORS-1-Index,LCD_DISPLAY_INDEX);

*_DrawBitLine1BPP

staticvoid_DrawBitLine1BPP(intx,inty,U8const*p,intDiff,intxsize,constLCD_PIXELINDEX*pTrans){

LCD_PIXELINDEXIndex0=*(pTrans+0);

LCD_PIXELINDEXIndex1=*(pTrans+1);

x+=Diff;

switch(GUI_Context.DrawMode&

(LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)){

case0:

/*Writemode*/

do{

LCDSIM_SetPixelIndex(x++,y,(*p&

(0x80>

>

Diff))?

Index1:

Index0,LCD_DISPLAY_INDEX);

if(++Diff==8){

Diff=0;

p++;

}

}while(--xsize);

break;

caseLCD_DRAWMODE_TRANS:

if(*p&

Diff))

LCDSIM_SetPixelIndex(x,y,Index1,LCD_DISPLAY_INDEX);

x++;

caseLCD_DRAWMODE_XOR:

;

Diff)){

intPixel=LCDSIM_GetPixelIndex(x,y,LCD_DISPLAY_INDEX);

LCDSIM_SetPixelIndex(x,y,LCD_NUM_COLORS-1-Pixel,LCD_DISPLAY_INDEX);

*_DrawBitLine2BPP

#if(LCD_MAX_LOG_COLORS>

2)

staticvoid_DrawBitLine2BPP(intx,inty,U8const*p,intDiff,intxsize,constLCD_PIXELINDEX*pTrans){

LCD_PIXELINDEXPixels=*p;

intCurrentPixel=Diff;

x+=Diff;

(LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)){

if(pTrans){

intShift=(3-CurrentPixel)<

1;

intIndex=(Pixels&

(0xC0>

(6-Shift)))>

Shift;

LCD_PIXELINDEXPixelIndex=*(pTrans+Index);

SETPIXEL(x++,y,PixelIndex);

if(++CurrentPixel==4){

CurrentPixel=0;

Pixels=*(++p);

}else{

(0xC0

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1