awtk/docs/hardware_req.md
2023-12-26 19:03:51 +08:00

112 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#AWTK 硬件资源需求评估
## 一、CPU
CPU 的要求与 LCD 的尺寸关系很大如果不启用动画对于320x240x16的 LCD52M的32位CPU应该够用。
目前我们测试过的最低硬件配置是STM32F103(Cortex-M3内核 CPU 72 MH)更低的CPU只能支持更低尺寸的LCD了。
## 二、Flash 的需求
AWTK 基本代码(包括常用控件),在 STM32上编译之后大概 150K。字体、图片和输入法要看具体的应用了。
一般来说,至少要 256K FLASH不包括裸系统和输入法以及图片字体等资源
下列模块为 AWTK 可增加模块STM32F103等低端平台会禁止下列模块故无此FLASH开销
| 模块名称 | FLASH大小 | 备注 |
| :------------------------: | :---------: | :--------------------------: |
| PNGJPG 和 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 | |