傻孩子(GorgonMeducer) · 2021年08月25日

懒人玩Arm-2D究竟有几种姿势

image.png

【懒人的需求也是需求】


经常关注我公众号的读者一定对Arm-2D并不陌生,总结来说:

  • Arm-2D是一个Cortex-M环境下的“标准显卡驱动”,是一个硬件抽象层
  • 为常见的嵌入式GUI提供了一系列2D图形加速API
  • 这些2D图形加速API即包含了一个默认的C语言算法实现,
  • 也允许使用芯片所提供的各类2D图形加速器来实现
  • Arm-2D不是GUI,而是为各类嵌入式GUI提供专门的2D图形处理加速
  • 裸机环境下我们可以仅借助Arm-2D就快速的制作出精美的界面。
  • Arm-2D即可以在资源丰富的环境中使用,也可以在资源高度受限的环境下(比如64K Flash, 2K RAM)使用
  • Arm-2D提供通用的Partial Frame Buffer(PFB)支持,允许用户用极小的RAM资源来驱动几乎任意尺寸的屏幕(理论极限是 65535 * 65535)
  • Arm-2D既支持RTOS,也支持裸机。
  • ……

如果你是第一次接触Arm-2D,可以单击这篇文章《为什么说Arm-2D是小资源单片机的GUI人权卡!》来了解大概、或是观看公开课(https://aijishu.com/l/1110000...)。

然而,生命苦短很多小伙伴虽然对Arm-2D非常感兴趣,但总归有这样或者那样的原因迟迟无法动手,比如:

  • 整天996,根本没有时间来搭建硬件平台;
  • 人在大学,刚刚下课”,根本没能力自己来移植Arm-2D到开发板上;
  • 纯粹对Arm-2D的API感到好奇,但在了解Arm-2D的API之前,并不觉得这值得自己亲自动手去做一下移植——如果有一个移植好的平台让自己玩就行了;
  • 纯粹喜欢在各类模拟器上玩硬件……

image.png

说白了就是懒,是拖延症,得治……

其实,从诞生到现在四个月过去了,Arm-2D贴心的为广大懒癌晚期患者提供了多种懒人专属的玩法

【有钱的懒人怎么玩】


如果你是个有钱的懒人,非常推荐购买一个STM32F746G-Discovery 开发板,因为Arm-2D几乎所有例子工程都提供了对这块开发板的直接支持:
image.png

买回来以后,无需多言,连接、编译、下载一气呵成——可谓偷懒界的至尊享受。

image.png

【青春版的懒人怎么玩】


同样是花钱,淘宝上40 RMB包邮的树莓派Pico不可谓不香,配合上一块240*240分辨率、1.3英寸、带游戏十字键的屏幕,不禁让人对未来的无限可能性充满瞎想:

image.png

关于这块屏幕的详细资料可以参考如下的网页,由于不是恰饭软文,这里就不放淘宝链接了:

https://www.waveshare.com/wik...
image.png

Arm-2D的仓库中专门为上述组合提供了MDK工程,获取方法为:

  • 通过Arm-2D官方仓库切换到 main-arm-2d-more-examples 分支;

或是

  • 通过公众号【裸机思维】发送关键字"_arm-2d_"获取网盘连接
  • 在examples目录下找到 [pico][watch\_panel][bare-metal][pfb]目录,在project/mdk下找到MDK工程

使用方法:

1、直接编译工程,如果一切顺利会看到类似如下的结果:

Program Size: Code=51200 RO-data=476676 RW-data=776 ZI-data=119988  
After Build - User command #1: .\axf2uf2.bat
E:\git\EndpointAI\Kernels\Research\Arm-2D\examples\[pico][watch_panel][bare-metal][pfb]\project\mdk>"..\..\tool\elf2uf2.exe" .\Objects\template.axf .\template.uf2 
".\Objects\template.axf" - 0 Error(s), 0 Warning(s).

同时,可以看到,在工程目录下(project/mdk/) 生成了一个名为 template.uf2 的文件——这就是Pico专用的镜像文件:

image.png

2、按住Pico上的白色按钮不放、将Pico的USB接口连接PC。当我们在文件管理其中发现一个新的叫做 PRI-RP2 的U盘时,说明Pico已经成功进入烧录准备状态。

image.png

3、将_template.uf2_拖放到U盘中即可。

偷懒方法不仅简单、便捷,更充满了树莓派开源玩家浓浓的逼格和自豪感——虽无至尊奢华却尽显青春涌动!

【白嫖党的懒人怎么玩】


“我是白嫖我自豪!”

顺手白嫖了MDK的你一定想问问:有没有完全免费的方法来学(bai)习(piao)Arm-2D。答案是肯定的:每一个Arm-2D的工程都提供了一个叫做_FastModel_的配置选项:

image.png

切换到该配置后,直接编译、进入调试模式,会看到一个Cortex-M4的模拟环境弹了出来:

image.png

这个模拟器是由Arm官方提供的,在MDK的Professional License下使用,用于模拟官方开发板MPS2:

image.png


该开发板具有以下特点:

  • 能够任意支持Cortex-M0/M0+/M1/M3/M4/M7/M23/M33 等任意一款处理器内核——想用谁就载入对应的配置文件即可;
  • 通常带有 4M PRAM用于保存代码、4M SRAM用于运行程序
  • 处理器最高运行频率 25MHz
  • 带有一个 320*240 RGB565的SPI屏幕

更多特性可以通过以下页面来了解:

https://developer.arm.com/too...


对于Arm-2D来说,我们最关心的就是FastModel可以模拟这块开发板,不仅拥有一块320*240的彩屏,更重要的是它提供了非常充裕的 ROM和RAM空间供我们霍霍。

如果你很好奇MDK是如何与FastModel连接的,可以打开_Option for Target_窗口、进入_Debug_页面:

image.png

注意这里在调试器的选择列表中,我们使用了“_Models Cortex-M Debugger_”。单击右边的_Settings_按钮,我们注意到FastModel实际上来源于一个外部的可执行程序:

image.png

它们中的大部分都保存在Keil\_v5的安装目录下(_C:\Keil\_v5\ARM\FVP\MPS2\_Cortex-M_),我们需要根据当前工程所使用的Cortex-M内核选择正确的可执行文件(比如,Arm-2D FastModel工程配置模拟的是一个_Cortex-M4F_处理器,因此应该在路径中选择_FVP\_MPS2\_Cortex-M4\_MDK.exe_。)

image.png

如果你是从头开始配置,则在 Command文本框中填写正确路径后,需要单击Target所在栏最右边的按钮“...”:
image.png

如果你的MDK是Professional License,并且FastModel连接正常,就会看到如上所示的一个窗口,此时勾选第一个选项(比如armcortexm4ct)后再单击OK按钮,就完成了FastModel的整个配置过程。

这里需要严正声明一点:

  • 支持正版,人人有责
  • FastModel获得的性能参数完全没有任何可参考性——因为它的设计初衷是为开发者提供一种验证功能的手段,而非性能评估。

实际上为了提高模拟时的运行速度,FastModel使用了各种方法来进行简化,因此产生的CPU Cycle信息基本跟拍脑袋随便给一值无异——不相信的话,你会发现SysTick的值永远是2500的倍数……


使用这种偷懒方式学(bai)习(piao)Arm-2D不仅无需任何硬件(也无需任何移植工作),实现了荷包的0损失,更是将MDK的利用价值发挥到了极致——可谓偷懒界的典范、白嫖界的楷模。

【爱吃螃蟹的懒人怎么玩】


如果你是个爱吃螃蟹的人,觉得最新发布的Cortex-M55处理器和U55神经网络加速器非常香。恭喜你,福利来了!Arm为能够模拟Cortex-M55和U55的开发板MPS3提供了免费的Fast Model(FVP\_Corstone\_SSE-300),而Arm-2D也几乎在每一个例子工程中都提供了对应的工程——只不过你需要手动的对FastModel进行配置。步骤如下:

1、打开如下连接:

https://developer.arm.com/too...

image.png

找到并展开 Corstone-300 Ecosystem FVPs,单击 Download Windows 按钮下载压缩包。解压缩后,找到安装程序,无脑安装即可:

image.png

默认情况下,Corstone-300的 FastModel会被安装在 C:\Program Files\ARM\FVP\_Corstone\_SSE-300 路径下。

image.png

2、打开任意Arm-2D example目录下的例子工程

找到AN547开头的工程配置,比如AN547-Cortex-M55\_r0:

image.png

在Option for Target窗口的Debug选项卡中选择 “_Modes ARMv8-M Debugger_”:

image.png

单击Settings按钮后,单击如图下图所示的按钮"...":

image.png

在弹出的窗口中选择FastModel所在的路径(C:\Program Files\ARM\FVP\_Corstone\_SSE-300\models\Win64\_VC2017):

image.png

单击Open按钮后,我们注意到Command文本框中已经正确的设置了FastModel的路径:

image.png

单击Target文本框右边的按钮"...":

image.png

勾选 "cpu0"后单击OK,我们就完成了对 FastModel的配置。

编译成功后,进入Debug模式,我们就会看到一个熟悉的窗口:

image.png


值得说明的是,FastModel虽然是在PC上模拟一个单片机,但Cortex-M55可非比寻常,它带了一个SIMD加速器Helium,要模拟它对现阶段的FastModel来说还是非常吃力的——你“有可能”会看到模拟运行的结果如同幻灯片一样慢——不要怀疑,实际芯片运行可能会比你在FastModel上看到的快上百倍。这也是为什么我一再强调不要以FastModel的跑分结果作为性能评估的参考——这是完全脱离现实和不靠谱的。

注意上图提示说要跑 1000 个迭代……以FastModel的速度,可能要跑上几分钟了,如果你只是想看看效果,建议在app\_cfg.h中把迭代的数量从1000修改为10:

image.png


至此,恭喜你已经成功的吃到了Cortex-M55的螃蟹。

当然,如果你很不幸,看到的是如下的错误提示,不要慌张。这可能是由于编译后的镜像尺寸过大,超过了Corstone-300所允许的 512K ROM大小所致。

image.png

此时,请打开Options for Target窗口,切换到C/C++(AC6)选项卡,将_Optimisation_等级设置为 -Os balanced (或者 _-Oz_)、勾选 _Link-Time Optimisation_,并检查Misc Controls 有无 -Omax 选项(一经发现格杀勿论)。

image.png

重新编译后,检查ROM尺寸(将Code和RO-data相加)是否小于512KByte即可。例如,这里Code和RO-data的总尺寸为 484364Byte ≈ 484KByte < 512KByte。

Program Size: Code=29456 RO-data=454908 RW-data=516 ZI-data=46860  

【说在后面的话】


如果你只对Arm-2D的使用很感兴趣,但又为“移植”的门槛所困扰,以上的懒人方法必有一款适合您!

首发:裸机思维
作者: GorgonMeducer 傻孩子

专栏推荐文章

如果你喜欢我的思维,欢迎订阅裸机思维
版权归裸机思维(傻孩子图书工作室旗下公众号)所有,
所有内容原创,严禁任何形式的转载。
推荐阅读
关注数
1466
内容数
108
探讨嵌入式系统开发的相关思维、方法、技巧。
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息