嵌入式裝置網頁控制解決方案之動態結構體與Spath

2021-09-02 09:51:07 字數 1691 閱讀 8798

具有網路功能的嵌入式產品的控制一般是通過傳送命令完成的,命令對應的值一般分為單值命令和結構體塊資料兩類。舉例如下:

/*define two commands*/

#define cmda 0x0f

#define cmdb 0x0e

/*define a value*/

int a = 0;

/*define a struct*/

struct bb;

/*send cmda with a single value*/

send(cmda, &a, sizeof(int));

/*sendcmdb with struct data*/

send(cmdb, &b, sizeof(struct b));

如果我們要設計乙個網頁控制系統,需要滿足以下需求:

需求1:網頁上的控制項與裝置裡面的引數一一對應,無論是單值還是結構體中的成員;

具體情況如下:

/*

假設網頁上有乙個輸入框,它繫結乙個命令號,如果該命令號是單值,直接繫結該值;

如果該命令號是個結構體,我們需要尋求一種方法將結構體成員與該網頁控制項對應,更改該控制項的值就可以直接反應到結構體的成員中。

*/

在這裡,我把我設計的解決方案分享一下。

首先,指定結構體中的成員變數,我採用了類似xpath的概念,此處我就把它簡稱為spath(struct member  path),與xpath相區別。

那麼spath是怎麼樣指定結構體中的成員的呢?

以前面結構體b為例,spath舉例如下:

/*represent member b*/

/b/b

/*represent member c*/

/b/c

/*represent member d*/

/b/d

以/開始緊跟結構體名,直到最終成員結束。

此時,我們可以用cmd和spath區別開不同的結構體成員了,如果我們將cmd和spath提交給cgi程式處理,/b/c這個spath指定了結構體的第二個成員變數,那麼我們可以更新或者讀取b結構體二進位制資料中的對應的值。但是,這一過程是人工去判斷的,具體說是cgi程式設計人員去判斷的,那麼這個工作量是相當大的,而且如果結構體變化,cgi也會修改並重新編譯。一點都不靈活。

為了優化這個過程,使全程自動化,我引入了動態結構體的概念。

什麼是動態結構體?

/*

簡單點說,動態結構體的成員是在執行時確定的,不是在編譯時確定的。我們都知道c/c++結構體都是宣告後在編譯時記憶體大小和成員位置就已經確定好了,我們不能在執行時去動態的為結構體新增乙個成員,當然開闢一塊新記憶體去操作也是可以做到的,這個辦法不在此次討論之內。我這裡說的動態結構體就是可以在執行時增刪改查結構體成員。

*/

動態結構體的原理是什麼?

/*動態結構體的核心是乙個hash表,將結構體的成員名字,型別定義到乙個配置檔案中,我選擇的是json格式。

, ,

]}注意:這裡結構體定義需要按照成員的順序定義

執行時,程式讀取配置,將配置資訊存在hash表中,生成結構體,這時解析spath就可以找到對應成員在結構體中的位置。即使結構體更改,也不用重新編譯程式,更改結構體配置檔案就可以。

*/

板級嵌入式開發解決方案SOB

板級嵌入式開發的概念 相信大家對於soc system on chip 一定不陌生 片上系統,意指它是乙個產品,是乙個有專用目標的積體電路,其中包含完整系統並有嵌入軟體的全部內容。下面我為大家介紹乙個新的概念板級嵌入式系統 sob system on board 何為板級嵌入式系統 sob 基於不同...

嵌入式裝置之 MIPS Uboot移植

mips uboot移植 網上 有很多arm的uboot分析文章,看了 之後發現受益良多,但是對mips的uboot移植這塊欠缺,但是都大同小異,原理相差 不大。背景思路 由於採用rtl8382l 晶元,該晶元外圍 並沒有ddr,所以我們想做一款沒有ddr的基於rtl8382l晶元的switch。由...

AGV智慧型無人搬運車嵌入式解決方案

a 無人搬運車,在現代倉儲體系中的作用越來越重要,具有自動化程度高 靈敏 安全等優勢,目前可在智慧型倉儲中發揮重要作用。目前a 無人搬運車 在倉儲物流領域主要應用於貨物的分揀和搬運。a 代替了傳統的人工搬運的方式,大為提高了企業的生產效率,改善了作業環境,提高了企業自動化生產水平,減輕企業人力成本壓...