在“使用 Node 將 IoT 與嵌入式連接.js第 3 部分”中,我們查看了用于讀取加速度計(jì)的軟件包。在第4部分中,我們將重點(diǎn)介紹ADC寄存器的讀取。
該包演示如何運(yùn)行從 Node.js 調(diào)用的 C 代碼。此代碼通過(guò) CPU 中 i.MX28 ADC 寄存器的存儲(chǔ)器映射來(lái)實(shí)現(xiàn)這些寄存器的讀取。此代碼直接取自技術(shù)系統(tǒng)公司為 TS-7680 提供的樣本代碼。這里的主要補(bǔ)充是將 Node.js 接口到 C 的代碼。
Node.js使用C++接口,因此代碼必須以C++編寫(xiě)。我們的實(shí)施是在。在此文件中,有一個(gè)改編自 的函數(shù),該函數(shù)打開(kāi)并將 CPU ADC 接口的三個(gè)區(qū)域存儲(chǔ)器映射到指針。這些器件可用于訪(fǎng)問(wèn)執(zhí)行ADC功能所需的CPU寄存器。
其次是功能,也改編自其設(shè)置ADC并獲得7個(gè)樣本。對(duì)這些樣本進(jìn)行平均并放置在緩沖區(qū)中。
必須將“Node.js的本機(jī)抽象”或 NAN 的包含文件放在文件的頂部。隨著 Node 的成熟.js,用于創(chuàng)建加載項(xiàng)的界面發(fā)生了變化,NAN 抽象出這些差異,以允許創(chuàng)建適用于 Node .js 版本 0.8、0.10、0.12 和 1-7 的代碼。
用于創(chuàng)建 Node.js加載項(xiàng)的代碼位于函數(shù)中,符合 Node.js加載項(xiàng)的參數(shù)要求。具體來(lái)說(shuō),它有一個(gè)看起來(lái)像這樣的原型:
我們采用一個(gè)名為 的參數(shù)。這是一個(gè)復(fù)雜的NAN類(lèi),我們目前不需要擔(dān)心。
在此函數(shù)中,首先聲明一個(gè)緩沖器來(lái)保存來(lái)自所有 8 個(gè) ADC 的采樣,這些 ADC 由 讀?。?/p>
接下來(lái),如果尚未調(diào)用,則調(diào)用。全局變量用于確定以下內(nèi)容:init
現(xiàn)在調(diào)用以用樣本填充緩沖區(qū):
接下來(lái),構(gòu)造一個(gè)長(zhǎng)度為 8 的 JavaScript 數(shù)組,并將此數(shù)組中每個(gè)元素的值設(shè)置為相應(yīng)的 ADC 示例值:
然后,將數(shù)組設(shè)置為從 JavaScript 調(diào)用函數(shù)所顯示的返回值。這比簡(jiǎn)單的語(yǔ)句稍微復(fù)雜一些,因?yàn)樗鼜腃++橋回JavaScript!
除了函數(shù)之外,還必須定義一個(gè)函數(shù)(注意大寫(xiě)的“I”,這使得它與我們的函數(shù)不同)。此處的兩個(gè)重要部分是 “” 和 。它們定義了為訪(fǎng)問(wèn)函數(shù)而調(diào)用的 JavaScript 端的模塊元素的名稱(chēng),以及C++端被調(diào)用的函數(shù)的名稱(chēng):
現(xiàn)在,調(diào)用一個(gè)宏將函數(shù)與模塊名稱(chēng)相關(guān)聯(lián):
該文件提供了一個(gè)精簡(jiǎn)包裝器,它通過(guò)調(diào)用 中定義的 addin 函數(shù)對(duì) ADC 值進(jìn)行采樣,然后在連接套接字上輸出這些值來(lái)響應(yīng)對(duì) ADC 值的請(qǐng)求。
此行的開(kāi)頭設(shè)置了綁定節(jié)點(diǎn),我們的C++加載項(xiàng):
具體來(lái)說(shuō),該模塊返回一個(gè)函數(shù),該函數(shù)使用二進(jìn)制文件的相對(duì)路徑調(diào)用。這將在構(gòu)建過(guò)程中從C++源代碼創(chuàng)建,并具有“.node”后綴。從調(diào)用返回的是引用加載項(xiàng)的 JavaScript 對(duì)象。由于附加組件定義了一個(gè)函數(shù) ,因此此函數(shù)可作為返回對(duì)象的元素進(jìn)行訪(fǎng)問(wèn)。調(diào)用此函數(shù)實(shí)質(zhì)上是調(diào)用C++代碼。
接下來(lái)是函數(shù)。它是一個(gè)標(biāo)準(zhǔn)的快速處理程序函數(shù),每當(dāng)客戶(hù)端請(qǐng)求終結(jié)點(diǎn)時(shí)都會(huì)調(diào)用它。它記錄條目,將響應(yīng)的內(nèi)容類(lèi)型設(shè)置為 ,然后調(diào)用C++代碼來(lái)檢索 ADC 值。然后,它獲取數(shù)組并將其轉(zhuǎn)換為字符串,每行有一個(gè)數(shù)字:
最后,設(shè)置為初始化函數(shù),該函數(shù)檢查用于更改終結(jié)點(diǎn)字符串的選項(xiàng),并將終結(jié)點(diǎn)與函數(shù)關(guān)聯(lián):
該文件包含編譯C++代碼所需的信息。安裝包時(shí)會(huì)自動(dòng)調(diào)用生成過(guò)程。
在下一期也是最后一期中,我們將構(gòu)建一個(gè)用戶(hù)界面,該界面利用我們已經(jīng)實(shí)現(xiàn)的服務(wù),以便從Web瀏覽器控制開(kāi)發(fā)板。
審核編輯:郭婷
-
寄存器
+關(guān)注
關(guān)注
31文章
5359瀏覽量
120813 -
adc
+關(guān)注
關(guān)注
98文章
6525瀏覽量
545230 -
C++
+關(guān)注
關(guān)注
22文章
2113瀏覽量
73745
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論