黑暗模式
AWTK 硬件资源需求评估
一、CPU
CPU 的要求与 LCD 的尺寸关系很大,如果不启用动画,对于320x240x16的 LCD,52M的32位CPU应该够用。
目前我们测试过的最低硬件配置是:STM32F103(Cortex-M3内核 CPU 72 MH),更低的CPU只能支持更低尺寸的LCD了。
二、Flash 的需求
AWTK 基本代码(包括常用控件),在 STM32上编译之后大概 150K。字体、图片和输入法要看具体的应用了。
一般来说,至少要 256K FLASH(不包括裸系统和输入法以及图片字体等资源)。
下列模块为 AWTK 可增加模块(STM32F103等低端平台会禁止下列模块,故无此FLASH开销):
模块名称 | FLASH大小 | 备注 |
---|---|---|
PNG,JPG 和 GIF 图片解码器 | 大约57.64KB | |
Truetype 字体解码器 | 大约27.3KB | |
标准的 UNICODE 换行算法 | 大约49.4KB | |
Google 拼音输入法 | 大约1.15MB | |
加载文件系统资源模块 | 大约7.1KB | |
启用 AGGE 作为矢量画布 | 大约21KB | |
窗口动画 | 大约9.42KB | 窗口动画需要矢量画布功能支持 |
三、内存需求评估指南
假设:
- LCD的宽度为:LCD_W
- LCD的高度为:LCD_H
- LCD的每像素占用的字节数为:BPP
1.Framebuffer
单 framebuffer 需要:LCD_W * LCD_H * BPP
双 framebuffer 需要:2 * LCD_W * LCD_H * BPP
三 framebuffer 需要:3 * LCD_W * LCD_H * BPP
STM32F103等低端平台,无需Framebuffer,故无此内存开销。
2.窗口动画
- 如果启用窗口动画,需要两个 framebuffer 大小的内存,即:2 * LCD_W * LCD_H * BPP
- 窗口动画需要开启矢量画布功能
STM32F103等低端平台,禁用窗口动画,故无此内存开销。
3.图片解码
- 图片解码器解码的时候大约占用 (2 * 图片宽* 图片高 * BPP) 的内存。
- 一般带 alpha 通道的图片解码后,每像素占用4字节。
- 不带 alpha 通道的图片解码后,如果定义 WITH_BITMAP_BGR565,每像素占用2字节,否则占用4字节。
STM32F103等低端平台,直接使用位图,编译到常量中,故无此内存开销。
4.输入法
- 配套的控件
- Google 拼音输入大约占用700KB。
STM32F103等低端平台,不启用输入法,故无此内存开销。
5.字体
- 字体文件本身大小。
- 字体解码器大约200B
- 长度为256的字体图片缓冲区的大约占用4.2KB。
- 字体图片缓存大小(字体图片的大小会根据字号和字体形状来决定一个字体图片的内存大小)。
STM32F103等低端平台,直接使用位图字体,编译到常量中,故无此内存开销。
6.控件
一般控件占用100B左右(64位系统会多一些),一般复杂度的应用程序,控件占用内存的峰值小余100K。
对于低端平台,可以简化界面,关闭后台窗口,以减少内存的需求。
7.AGGE矢量画布
- nanovg 作为前端大约占用18.3KB左右的缓冲区(64位系统会多一些)。
- AGGE 作为后端大约占用300B左右。
- AGGE 在计算时候会根据不同的效果会创建一些大小不等的缓冲区和临时变量,具体需要看效果来决定(一般效果峰值小于10K)。
STM32F103等低端平台,不启用矢量画布,故无此内存开销。
四、附录
1. AWTK 对应模块内存表:
功能名称 | 宏 | ROM | RAM | 说明 |
---|---|---|---|---|
PNG ,JPG 和 GIF 图片解码器 | WITH_STB_IMAGE | 大约57.64KB | 大于(2 * 255KB + 16KB) | 一张16位色分辨率为480 * 272的图片内存为255KB |
Truetype 字体解码器 | WITH_STB_FONT | 大约27.3KB | 4.2KB+18.5KB | 100个方正水云的18号字的内存大约为18.5KB,长度为256的字体图片缓冲区的大约占用4.2KB |
标准的 UNICODE 换行算法 | WITH_UNICODE_BREAK | 大约49.4KB | 大于1.39KB | |
Google 拼音输入法 | 取消定义 WITHOUT_INPUT_METHOD 或者取消定义 WITH_NULL_IM | 大约1.15MB | 大于700KB | |
加载文件系统资源模块 | WITH_FS_RES | 大约7.1KB | 0B | |
启用 AGGE 作为矢量画布 | WITH_NANOVG_AGGE | 大约21KB | 大于(18.4KB + 10KB) | AGGE 计算时候开辟内存保守估计峰值为10KB |
窗口动画 | WITHOUT_WINDOW_ANIMATORS | 大约9.42KB | 大于(2 * 255KB) | 一块16位色分辨率为480 * 272的 framebuffer 为255KB |
裁剪布局算法 | WITHOUT_LAYOUT | 大约3.64KB | 0B | |
裁剪控件动画 | WITHOUT_WIDGET_ANIMATORS | 大约1.3KB | 0B | |
裁剪剪切板算法 | WITHOUT_CLIPBOARD | 472B | 0B | |
裁剪对话框高亮策略代码 | WITHOUT_DIALOG_HIGHLIGHTER | 大约1.46KB | 0B |