int aintHeap[GUI_ALLOC_SIZE/4]; /* required for proper alignement */ U8 abHeap[GUI_ALLOC_SIZE]; } GUI_HEAP; extern GUI_HEAP GUI_Heap; /* Public for debugging only */ 以上几点是内存管理的关键数据结构. GUI_Heap是一个联合体结构, 其内数据可以以INT整型, 一次以四个字节来访问; 也可以...
它的大小是即是在GUIConf.h中预定义的GUI_ALLOC_SIZE个字节,但同时通过GUI_HEAP这个联合,以abHeap来访问是基于1字节,[aintHeap]则是基于4字节。 aBlock是用于记录所有内存分配块的数组,大小是GUI_MAXBLOCKS,GUI_MAXBLOCKS=(2+GUI_ALLOC_SIZE/32),每一个元素记录一个内存分配块的信息,只要知道了内存分配块的...
若使用窗口对象,则在GUI_Conf.h中定义GUI—WINSUPPORT为1。 在GUIConf.h中定义GUI_ALLOC_SIZE为动态内存的大小,应根据需要合理选择。窗口对象(如按钮)的创建需要申请内存,若申请不到内存则无法创建,相应地创建函数值为0。可由此判断GUI_ALLOC_SIZE已经不能满足需要,一方面可以考虑增加GUI_ALLOC_SIZE(受制于芯片内存...
GUI_ALLOC_Free() { (1)从数组的角度,根据指定的内存句柄,将对应的控制块Size参数清零; (2)从链表的角度,将该节点从链表中删除; (3)更新GUI_ALLOC中的统计参数。 } 参考资料: UCGUI 技术文集:《UCGUI的动态内存分配的原理深入分析》 《几种动态内存分配策略的比较分析》 gliethttp博客:浅析μC/GUI-v3.98...
GUI_ALLOC_SIZE指定UCGUI可自己动态使用的内存量,默认的是12500, 差不多是12K左右.UCGUI中使用动态内存管理是类似NEW,DELETE的,原理是一样的,但 比较简单一点.使用的是双向链表,在整 个内存(12500)没有使用之前,链表中只有一个节点,当申请过一次后,就会变成两个节点, ...
GUI_ALLOC_SIZE表示可用于可分配的动态内存的大小。IM12屏幕分辨率为800x600,用于存储屏幕数据的最小值为(800+7)/8*600*16 = 960,000,在其它地方也会耗费一些内存,所以为GUI_ALLOC_SIZE指定值为10*1024*1024。 2.2修改LCDConfig.h LCDConfig.h文件的主要内容如下: 注意:LCD_SWAP_RB会影响到颜色的正确性,...
rLCDSADDR3 = (LCD_XSIZE/4) | ( ((SCR_XSIZE-LCD_XSIZE)/4)<<9 ); rLCDCON1 = (1)|(1<<5)|(MVAL_USED<<7)|(0x3<<8)|(0x3<<10)|(CLKVAL_G16<<12); } 二UCGUI 的移植 移植的思路是使用UCGUI 支持的buffer 型的LCD 控制器EPSON 1375 我想就是这样一个使用双口RAM 的LCD ...
有些情况下,可能没有足够的有效存储器空间能够立刻用于所有输出区域的存储,这依赖于在GUIConf.h中对GUI_ALLOC_SIZE宏的配置。一个分片存储设备将需要绘制的LCD区域分成几个片段,在每一个片段里面用尽可能多占用当前可用的存储空间。 不同于普通存储设备的是分片存储设备的使用更加简洁,只需要用GUI_RECT声明一个需要...
#define GUI_ALLOC_SIZE 5000 //修改内存空间改大一点,防止编译不过 效果图: 3.2 打开GUITouchConf.h文件,替换成下边代码。 #ifndef GUITOUCH_CONF_H #define GUITOUCH_CONF_H #define GUI_TOUCH_AD_LEFT 0 //屏幕左边尺寸 #define GUI_TOUCH_AD_RIGHT 240 //屏幕右边尺寸 ...
#define GUI_ALLOC_SIZE 5000 //动态内存的大小 #define GUI_WINSUPPORT 1 //窗口控件支持 #define GUI_SUPPORT_MEMDEV 1 //支持内存设备 #define GUI_SUPPORT_AA 1 /* Anti aliasing available */ #endif /* Avoid multiple inclusion */ 第四步:最关键的一步。那就是让GUI能够找到你的LCD驱动。修改LCD...