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

2021-08-25 10:32:17 浏览数 (1)

【懒人的需求也是需求】


经常关注我公众号的读者一定对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/1110000000204649)。

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

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

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

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

【有钱的懒人怎么玩】


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

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

【青春版的懒人怎么玩】


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

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

https://www.waveshare.com/wiki/Pico-LCD-1.3

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

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

或是

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

使用方法:

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

代码语言:javascript复制
Program Size: Code=51200 RO-data=476676 RW-data=776 ZI-data=119988  
After Build - User command #1: .axf2uf2.bat
E:gitEndpointAIKernelsResearchArm-2Dexamples[pico][watch_panel][bare-metal][pfb]projectmdk>"....toolelf2uf2.exe" .Objectstemplate.axf .template.uf2 
".Objectstemplate.axf" - 0 Error(s), 0 Warning(s).

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

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

3、将template.uf2拖放到U盘中即可。

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

【白嫖党的懒人怎么玩】


“我是白嫖我自豪!”

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

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

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


该开发板具有以下特点:

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

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

https://developer.arm.com/tools-and-software/development-boards/fpga-prototyping-boards/mps2


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

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

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

它们中的大部分都保存在Keil_v5的安装目录下(C:Keil_v5ARMFVPMPS2_Cortex-M),我们需要根据当前工程所使用的Cortex-M内核选择正确的可执行文件(比如,Arm-2D FastModel工程配置模拟的是一个Cortex-M4F处理器,因此应该在路径中选择FVP_MPS2_Cortex-M4_MDK.exe。)

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

如果你的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/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps

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

默认情况下,Corstone-300的 FastModel会被安装在 C:Program FilesARMFVP_Corstone_SSE-300 路径下。

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

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

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

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

在弹出的窗口中选择FastModel所在的路径(C:Program FilesARMFVP_Corstone_SSE-300modelsWin64_VC2017):

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

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

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

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


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

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


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

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

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

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

代码语言:javascript复制
Program Size: Code=29456 RO-data=454908 RW-data=516 ZI-data=46860  

【说在后面的话】


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


原创不易,

如果你喜欢我的思维、觉得我的文章对你有所启发,

请务必 “点赞、收藏、转发” 三连,这对我很重要!谢谢!

欢迎订阅 裸机思维

0 人点赞