图一 : Portenta H7系统板可透过USB Hub连接USB随身碟、透过Vision Shield子板连接SD记忆卡(图片来源:Arduino官网) |
|
目前四片板卡可用储存函式库
Arduino官方在今(2023)年11月释出两套储存相关的函式库,主要供Arduino Pro系列(产业实务应用取向)的板卡使用,目前有4片板卡可用,分别为Arduino Portenta H7、Arduino Portenta C33、Arduino Opta(严格来说是台PLC)以及Arduino Portenta Machine Control。Arduino官方表示後续会让函式库适用到更多板卡上。
注:一般数学方程式的f(x)=y+x称为函数,类似用法在程式设计领域我国一般译为函式,将许多函式集中在同一群以利管理或运用者称为函式库(library)。
官方举出三种应用情境
有了储存函式库,在开发撰写Arduino板卡存取USB随身碟、SD记忆卡的相关应用就方便许多,对此Arduino官方也设想了些可能会用及随身碟、记忆卡的情境,例如一个放置於户外远处、没有连线的监测装置,用它来监测温度、空气品质等,监测到的数值需要地方存放,这时就需要连接随身碟、记忆卡,而後派人定期去抽换储存媒体,并将储存的资料拿回来研究分析。
或者,同样是不连线的装置,需要更新装置系统的韧体(firmware)时,无法使用无线传输更新韧体(FOTA)的作法,这时也是将要更新的韧体存到记忆卡内,派人到现场连接??卡、操作更新程序。
类似的,装置长期运作也可能出现一些错误,这些错误需要加以记录,以利後续问题分析诊断,甚至预测日後何时可能再发生错误?会在哪些环节发生错误等,这些记录称为日志(log),日志通常以档案方式存放,而给装置??入记忆卡便能用来储存日志档,便於日後带回日志资料进行分析。
为何要有两套储存函式库?
既然函式库用来读写随身碟、记忆卡,官方为何要推出两套?这两套的名字分别是Arduino_POSIXStorage、Arduino_UnifiedStorage,这其实是有原因的。
首先是开发者过去可能已经开发过UNIX、类UNIX(例如FreeBSD、Linux、Mac等)等作业系统上的应用程式,在这类作业系统上为了方便程式移植,也为了维持相容性等,通常依循POSIX介面标准来撰写,如此就可以尽可能减少改动而推出不同作业系统版本的应用程式,包含Windows也是支援POSIX介面。
为了让开发者尽快上手,所以Arduino官方提出相容POSIX的Arduino_POSIXStorage函式库,让开发者用过去习惯来撰写储存相关的程式。不过笔者看了一下技术细节,还是与POSIX有些差异,不全然相同。
图二 : Arduino_POSIXStorage函式库基本范例程式与简单说明(图片来源:GitHub) |
|
另一款储存函式库Arduino_UnifiedStorage是比Arduino_POSIXStorage更方便简易使用的,把一些复杂细节都去除了,如果程式设计师过去没有开发依循POSIX介面标准的应用程式的经验,是可以直接使用Arduino_UnifiedStorage,Arduino_UnifiedStorage也比较合??过往Arduino官方函式库的命名、叁数风格。
此外,两套函式库还是有一些异同,例如都支援热??拔、USB随身碟、SD记忆卡,档案格式可以是FAT32、LittleFS等,但Arduino_UnifiedStorage还支援QSPI(Queued SPI)介面的读写,在资料管理与操作上也比较方便,例如存取USB、SD、内部储存等的方式一致、更方便确认资料是否可移动、在不同储存媒体上搬移资料也比较方便,或者资料的覆写管理也比较好、提供资料夹结构导览可让档案操作管理更直觉等。
既然如此为何还要有POSIX版?主要是因为Arduino Pro是产业实务应用取向的,支援与相容过往就有开发经验的职业、专业程式设计师是必要的,如此才能更快让Arduino Pro有更多的产业实务应用。
最後,官方文件也提到一些细节,毕竟随身碟、记忆卡厂牌型款多又多,函式库的开发者也无法全部都测试验证,目前官方主要测试Kingston、Samsung、SanDisk等厂牌;USB Hub集线器也是有限度测试,一些进阶型的USB Hub(整合RJ-45、HDMI等)通常还没测试。
(本文由VMAKER授权转载;连结原文网址)
延伸阅读:
[1] Arduino_POSIXStorage函式库网址:https://github.com/arduino-libraries/Arduino_POSIXStorage
[2] Arduino_UnifiedStorage函式库网址:https://github.com/arduino-libraries/Arduino_UnifiedStorage