FreeMASTER 是一個界面友好的,可用于實時觀察目標系統(tǒng)中變量內容的數據可視化軟件??梢酝ㄟ^多種通信方式將 PC 機和微控制器電路板連接,實時捕獲和配置微控制器中(存放變量)的內存信息,并顯示在 PC 機的軟件窗口中。
FreeMASTER 軟件最早用于汽車電子相關的軟件開發(fā)中,后被廣泛應用在多種開發(fā)環(huán)境,用以提供友好的人機交互界面。
從筆者的開發(fā)經歷中,特別是分析例如觸摸感應等模擬傳感器信號時,常用 FreeMASTER 實現一個簡易的示波器,將單片機中實時采集的傳感器信息繪制成時域曲線,顯示在電腦界面上,從而便于分析數據,尋找其中的變化規(guī)律,進而提取特征信息用于特定的模式匹配。在進行最近比較火熱的嵌入式 AI 開發(fā),在海量的數據處理過程中,通過 FreeMASTER 的可視化界面,監(jiān)控計算過程中間某些關鍵變量的變化過程,簡直不要太方便了,就是在給領導和客戶演示的時候也是逼格滿滿 .
筆者之前在本公眾號中,發(fā)表過一篇關于基本使用 FreeMASTER 的短文,可以幫助嵌入式工程師在 5 分鐘內上手使用 FreeMASTER v2.0 工具,見: 使用 FreeMASTER 捕獲采樣記錄并導出重現曲線。
近期,NXP 官方發(fā)布了 FreeMASTER v3.0,據說進行了很大的更新,在本文中,筆者對新版本的 FreeMASTER 進行了試用,并同大家分享使用體驗。
安裝過程
在下載頁面中還能看到,官網仍然開放了歷史版本 v2.0 和 v2.5 的下載鏈接。筆者常用的是 v2.0 版本。
比較驚喜的是,FreeMASTER 終于開始能夠跨平臺了,本次更新提供了 Linux 系統(tǒng)的安裝包。但是根據說明,在 Linux 上只支持 FreeMASTER Lite 服務和相關的文檔,大家熟悉的桌面版沒有提供 Linux 平臺的支持。
從安裝包的大小來看,新版的安裝包整整增大了一個數量級,從 v2.x 的 40MB 左右,一下子劇增到近 300MB,筆者不禁腦補了一下,最近到底給它喂了些什么。
安裝
下載之后雙擊安裝包安裝。安裝過程也是全新的,用了 InstallAnywhere 打包工具對整個軟件包進行打包。界面看起來更可愛一些,但略顯簡單。筆者作為一個資深的嵌入式系統(tǒng)工程師,還是更喜歡之前版本使用 InstallShell 打包工具簡潔干練的工業(yè)風。
這里特別注意,在安裝過程中,如果不是明確需要使用"FreeMASTER Lite 服務",而只是使用原有大家熟悉的使用 FreeMASTER 桌面版提供的功能,可以在安裝過程中勾選掉相關的選項。否則會需要提供專門的激活碼 .
一開始安裝的時候由于疏忽跳過了激活碼,由于不知道怎樣獲得"激活碼",本打算先安裝試用部分功能,但沒想到沒有激活碼竟然直接回滾安裝,FreeMASTER 的基本功能也被卸載了。后來詢問其它同事才知道,這個激活碼是在安裝過程中自動創(chuàng)建申請的,最關鍵的,它是免費的。然后筆者重新安裝,注意到了安裝過程中的一個頁面的一段說明:
之前安裝到這個步驟的時候,自動彈出了一個網頁,但是被筆者想當然地給關掉了。
現在看來是自動發(fā)出的申請激活碼的請求。但之前戳"NO"的時候直接回滾了整個安裝,這次選"YES"。
彈出網絡瀏覽器并訪問 NXP 官網,需要 NXP 注冊賬戶授權,然后在網頁中確認軟件使用許可聲明。
最后獲得激活碼。
PS: 筆者仔細閱讀了一下這個激活碼的回單,發(fā)現激活碼是根據 PC 的某種"機器識別碼"生成的,也就是說,它是綁定在 PC 上的。好吧,反正是 free 的,如果換臺電腦就再申請一次就好。
后續(xù)的安裝還出現了不少提示說重復復制文件的問題,這可能是使用新的部署工具沒有處理好文件的解壓順序導致的,不影響最終的安裝功能。另外,安裝過程后來還是通過網絡執(zhí)行了一遍在線激活過程。
安裝之后查了一下安裝根目錄,再一次被驚呆了,FreeMASTER 竟然專門包含了一個 JRE(Jave 運行時環(huán)境),不必自行匹配相應的軟件版本了。
特別注意,如果需要安裝 FreeMASTER Lite 功能,必須確保電腦已經聯(lián)網,并且能夠順利訪問到 nxp.com 的官網。
試用
從 pmp 到 pmpx
按照筆者們對已經熟悉的老版本 FreeMASTER 的使用步驟,創(chuàng)建工程,導入 MCU 端的可執(zhí)行文件解析符號表,根據符號表項創(chuàng)建變量,創(chuàng)建示波器頁面,在示波器頁面中加載變量,開始采樣。一頓操作猛如虎,最終正常工作。這說明新版本確實是能做到兼容老版本用戶的使用習慣。
筆者注意到,v3.0 版本創(chuàng)建工程的擴展名是".pmpx",而不是原來的".pmp",多了一個"x"。難道這是學了 MS Office 套件升級文件擴展名的思路? 筆者用 sublime text 打開工程文件查看其源代碼,果不其然,新版本的工程文件已經換用可讀的 xml 檔案組織格式了,而老版本的工程文件是無法查看源代碼的。這就意味著,在使用新版本的 FreeMASTER 時,可以以修改源文件的方式精細配置工程,這對于開發(fā)工程師來講絕對是一個"有良心"的設計。
另外,筆者還試著在新版的軟件窗口中導入原有二進制編碼的 pmp 工程文件,同老版使用完全一樣,無縫完全兼容??磥?FreeMASTER 的開發(fā)人員在歷史兼容性上下了很大的工夫。(實際上這個變更在 v2.5 中就已經實現了).
ActiveX 控件
FreeMASTER 的 ActionX 控件應該是它在基本功能外的另一個亮點。ActiveX 控件是 Microsoft Windows 系統(tǒng)中的應用功能擴展庫,可用于互聯(lián)網的很小的程序,有時稱為插件程序。
通過使用 ActiveX 控件,在 FreeMASTER 運行框架下,可以使用網頁作為界面,訪問到單片機中內存中的變量。FreeMASTER 的 ActiveX 控件僅提供面向電路板的內存訪問服務,而網頁 UI 的呈現則完全由用戶自由發(fā)揮,這就為創(chuàng)建豐富的 UI 創(chuàng)造了靈活的平臺。
雖然 FreeMASTER 的手冊中幾乎沒有提到如何將 ActiveX 控件用于用戶產品設計的說明,但憑借筆者極強的想象力,還是摸索出一套可行的用法。
實際上,FreeMASTER 安裝包中提供了一個通過 JavaScript 在 htm 網頁中調用 ActiveX 控件的例子。位于"FreeMASTER 3.0/FreeMASTER/examples/scripting/JavaScript-ActiveX"目錄下的"example.htm"文件。但是為了把這個代碼運行起來,需要一波神操作。
首先,從 MCUXpresso SDK 中導出一個 hello_world 工程(基于 lpcxpresso55s69 開發(fā)套件),之后在源代碼中創(chuàng)建全局變量"var16","var16inc"及"arr16"并確保它們不會被編譯器的自動優(yōu)化掉。
volatile uint16_t var16 = 0u;
volatile uint16_t var16inc = 0;
volatile uint16_t arr16[10] = {0,1,2,3,4,5,6,7,8,9};
復制代碼
之后編譯下載工程工程到開發(fā)板。
然后就是 FreeMASTER 的操作了。創(chuàng)建 FreeMASTER 工程,導入之前編譯好的可執(zhí)行程序文件,之后在 FreeMASTER 中創(chuàng)建對應的"var16","var16inc"及"arr16"變量。將 FreeMASTER 安裝目錄下的"example.htm"文件復制到新創(chuàng)建的 FreeMASTER 用戶工程目錄下,然后在 FreeMASTER 工程中引用這個文件:
此時,可以看到網頁上有一些按鈕和一些內容框,試著戳了幾下,會報錯,顯示沒有有效連接。
此時,啟動 FreeMASTER 工程,按這些按鈕,就能讀到和寫入位于單片機內存中的變量了。
查看"example.htm"文件的源代碼可以看到 FreeMASTER 的 ActiveX 讀寫遠程變量基本函數的用法:
function read_variable(name,span_id)
{
/* ReadVariable uses FreeMASTER variable object from current project。Use
* ReadUIntVariable to access the memory directly using a symbol name。*/
if(pcm.ReadVariable(name))
document.getElementById(span_id).innerHTML = pcm.LastVariable_vValue;
else
on_error("Error when reading variable " + name + "。" + pcm.LastRetMsg);
}
function write_variable(name,input_id)
{
var val = document.getElementById(input_id).value;
/* WriteVariable uses FreeMASTER variable object from current project。Use
* WriteUIntVariable to access the memory directly using a symbol name。*/
if(pcm.WriteVariable(name,val))
document.getElementById("status").innerHTML = "Write of the " + name + " succeeded.";
else
on_error("Error when writting variable " + name + "。" + pcm.LastRetMsg);
}
復制代碼
JSON-PRC 輕量級遠程調用協(xié)議
這里暫時略過對 JSON-PRC 協(xié)議的介紹。從實用角度看,它是用于替換 ActiveX 的,同樣能夠提供從網頁到電路板的訪問服務。
在新版 FreeMASTER 的手冊中,將 JSON-PRC 稱之為一種"現代的"技術,特別要配合 Chromium 引擎使用。而 Chromium 引擎就是 Google 旗下大名鼎鼎的 Chrome 瀏覽器使用的內核。相對應地,ActiveX 對應使用的是 Microsoft IE 瀏覽器技術。
同 ActiveX 相似,FreeMASTER 的安裝目錄中也有 JSON-PRC 的樣例代碼,位于"FreeMASTER 3.0/FreeMASTER/examples/scripting/JavaScript-JSON-RPC"目錄下。
將這個目錄整個復制到新創(chuàng)建的 FreeMASTER 工程目錄下。之后在 FreeMASTER 工程中創(chuàng)建一個新的頁面"JS-JSON-PRC"并引用 JSON-PRC 版本的"example.htm"網頁文件。此時啟動 FreeMASTER 工程后會報錯,因為缺少一個關鍵的步驟。
將 FreeMASTER 工程的網頁解釋器換成 Chromium 引擎。選中"project" -> "option",在"option"對話框中,選中"使用 Chromium 引擎"的選項。注意,切換到 Chromium 引擎后,基于 IE 的 ActiveX 控件就不能使用了。
此時再啟動 FreeMASTER 工程,就能看到之前使用 ActiveX 控件實現的操作單片機內存變量的網頁, 戳戳看也能正常讀寫內存了。從功能上看,使用 Chromium 引擎實現的網頁同之前使用 ActiveX 幾乎完全一樣,但是顯示效果看起來好很多,字體比較圓潤。考慮到 Chromium 引擎已經成為眾多流行瀏覽器內核的事實,FreeMASTER 在技術上需要與時俱進,這可能也是 v3.0 的設計初衷吧。
看一下 JSON-PRC 版的示例網頁源碼,可以看到在 javascript 腳本部分引用的關鍵組件:
復制代碼
這是同 ActiveX 方式的關鍵區(qū)別,對應地,在 ActiveX 版的樣例代碼中,在網頁顯示部分引用了 ActiveX 組件:
復制代碼
當然,對變量讀寫函數的使用方式上也有一些不同:
function read_variable(name,span_id)
{
/* ReadVariable uses FreeMASTER variable object from current project。Use
* ReadUIntVariable to access the memory directly using a symbol name。*/
return pcm.ReadVariable(name)
.then((value) => {
document.getElementById(span_id).innerHTML = value.data;
})
.catch((err) => {
on_error(err.msg);
});
}
function write_variable(name,input_id)
{
var val = document.getElementById(input_id).value;
/* WriteVariable uses FreeMASTER variable object from current project。Use
* WriteUIntVariable to access the memory directly using a symbol name。*/
pcm.WriteVariable(name,val)
.then(() => {
document.getElementById("status").innerHTML = "Write of the " + name + " succeeded.";
})
.catch((err) => {
on_error(err.msg);
});
}
復制代碼
FreeMASTER Lite 服務
FreeMASTER Lite 是 v3.0 新增的獨立組件,用于脫離經典的 FreeMASTER 框架提供從桌面到電路板的數據訪問。
實際上,這幾乎是一個并列于 FreeMASTER 桌面版的全新軟件包。它以"服務"的形式運行在系統(tǒng)后臺,提供了 JSON-PRC 接口用于訪問遠程連接的電路板。就像大多數操作系統(tǒng)服務的運行方式一樣,FreeMASTER Lite 沒有用戶窗口,通過命令行和配置文件傳入參數。根據手冊的描述,FreeMASTER Lite 在操作系統(tǒng)中像一個標準的網頁服務器一樣,一方面同遠程的電路板交互,另一方面可以接收來自 python 或者 node.js 腳本中的請求。
由于時間關系,筆者還沒有仔細研究如何使用這個 FreeMASTER Lite 的功能,以后有時間再做介紹。
總結
FreeMASTER v3.0 兼容了經典 FreeMASTER 的所有功能,新增了 Chromium 引擎和 JSON-PRC 協(xié)議組件,用于作為 IE 引擎和 ActiveX 的換代產品。首次引入了 FreeMASTER Lite 軟件包,用于提供命令行版本的連接 PC 機網頁和電路板的服務。
新版的 FreeMASTER 定位于提供運行某些新的 FreeMASTER 應用工程的運行時環(huán)境,而沒打算讓用戶在這個平臺上進行二次開發(fā),設計自己的 FreeMASTER 應用工程。
經過試用,筆者個人建議,經典 FreeMASTER 用戶不用著急遷移到新平臺上。如果你一定想使用 Chromium 引擎,在你的 UI 界面中增加一些炫酷的特效,那么可以試試桌面版的 FreeMASTER v3.0。
如果只是簡單地使用一個數據可視化的工具,v2.5 仍是目前的最佳選擇。(沒錯,借著試用 v3.0 的興致,筆者也試用了 v2.5,然后決定把用了多年的 v2.0 更新到 v2.5 版本)。
審核編輯 黃昊宇
-
數據可視化
+關注
關注
0文章
466瀏覽量
10267
發(fā)布評論請先 登錄
相關推薦
評論