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