最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

邏輯分析儀 怎么添加自己需要的協(xié)議?

2022-05-16 14:08 作者:夢源科技  | 我要投稿

DSView解碼協(xié)議教程入門

夢源科技 2022-04-08



一、 前言

  在DSView安裝目錄下,有一個decoders文件夾,里面有許多目錄是以各種協(xié)議名稱命名的。每個目錄下有至少2個擴展名為.py的文件,這些都是python代碼文件。在linux系統(tǒng)下,decoders目錄位于”/usr/local/share/libsigrokdecode4DSL”下。
  DSView通過底層python解釋器執(zhí)行python代碼,對邏輯分析儀的數(shù)據(jù)進行解析,按各種算法得出需要的結果。每個協(xié)議目錄下必須存在兩個文件:

  1. __init__.py,用于發(fā)現(xiàn)模塊,這個文件名左右兩邊各有兩個下劃線,這個細節(jié)要注意,否則它不會出現(xiàn)在列表中;

  2. pd.py,用于編寫主要的邏輯代碼;
    這兩個文件如何編寫,請仔細閱讀下面的內容。在1.2.0以上的新版本DSView中,decoders下的有一個名為example目錄為示例代碼。

二、python入門

  python語言是一個解釋執(zhí)行的語言。在官方網(wǎng)站下載并安裝好python,就可以進行開發(fā)了。
新建一個文本文件,里邊輸入一行文字:
print('Hello,world!')
保存為 test.py,然后在命令行里輸入 
python test.py
將會輸出“Hello,world!”
這里的python入門只是為了幫助一些讀者能夠順利閱讀部分協(xié)議代碼,它所講的python知識還不夠全面和深入,需要讀者自行通過其它方式獲得python資料,以便提升自己的python編程能力。

  1. 變量定義
    age = 1
    name = “Tom”

  2. 數(shù)值
    1, 1.11, 1000等都屬數(shù)值型數(shù)據(jù)

  3. 字符串
    以單引號或雙引號括起來的一串字符,表示字符串,如
    ’abc’
    “name”

  4. 列表
    []
    [1,2,3]
    [1,”abc”,”name”,[7,8,9]]
    列表里的元素用逗號隔開,上面的第一個列表是空列表,第二個列表全是數(shù)字,第三個列表有多種類型的元素,有數(shù)值、字符串、列表。
    a = [1,2,3]
    變量a是一個列表,通過a[n]方式讀取列表里的元素。n的取值從0開始到不超過且不等于列表長度的整數(shù)
    a[2] = 666
    將第3個元素設置成666,列表里的內容可修改
    i = a[1]
    取列表a的第二個元素賦給變量i

  5. 字典
    d = {‘a(chǎn)ge’:20, ‘name’:’Tome’, ‘data’:[7,8,9]}
    字典里的每一項用一對鍵和值表示。如’age’:20
    d[‘name’] = ‘Same’
    將字典d的name值設置成’Same’
    s = d[‘name’]
    取字典d的name值賦給變量s
    字典里的鍵名可以是數(shù)字、字符串、元組等類型,如:
    {1:'張三'}
    {'name':''張三"}
    {(1,2,3): "張三"}

  6. 元組
    ()
    (1,2,3)
    (2,’abc’)
    元組跟列表一樣,不同的是用()括起來,元組只能讀,不能修改。
    注意:當元組只有一個項時,要多打一個逗號,如:
    (1,)

  7. 函數(shù)
    def call(): #普通函數(shù)
    def call(self): #類成員函數(shù),第一個參數(shù)是必須的
    def call(a,b,c): #帶三個參數(shù)的函數(shù)

三、新建協(xié)議

  1. 新建協(xié)議目錄
    找到存放所有協(xié)議的decoders目錄。widnows下,它在DSView的安裝目錄里;
    在linux下,它在  
    /usr/local/share/libsigrokdecode4DSL
    打開decoders目錄,新建一個子目錄,并給目錄取名字,要求是能體現(xiàn)協(xié)議名稱的名字。這里,我們的示列協(xié)議名為”lala”。

  2. __init__.py文件
    在bala目錄下新建文件“__init__.py”,加入一行如下代碼并保存:??



  • pd.py文件
    在bala目錄下,建新pd.py文件,用來編寫主要的代碼。

四、框架代碼模板

??以下是解碼協(xié)議代碼框架,寫在pd.py文件里。所有協(xié)議的代碼核心部分是一樣的。
下面從c模塊繼承一個類



到這里,解碼協(xié)議代碼框架模板結束。

五、應用示例

??在上面代碼框架的基礎上,我們接下來實現(xiàn)一個簡單的例子。具體是,通過解碼某一通道的數(shù)據(jù),從一個向上邊沿開始到向下邊沿結束,輸出采樣點差值信息。奇數(shù)次輸出放在第二行,偶數(shù)次輸出放在第一行。具體編碼和說明如下:



?


六、解碼模塊工作原理

??通過c代碼和python代碼的互操作,將采樣數(shù)據(jù)交給python分析。經(jīng)過一系列的處理,最終生成解碼結果,用于顯示以及供給上層協(xié)議作為分析的數(shù)據(jù)來源。解碼模塊的核心主要由以下部分組成:

  • c底層包裝類Decoder
    在c代碼里,給python提供一個經(jīng)過包裝的基類,python可調用基類的一些方法,實現(xiàn)調用c代碼的目的。python端通過以下語句導出c代碼包裝的Decoder類:




python可訪問的Decoder基類的方法有:

  • register方法
    ?用于注冊python輸出到c底層的消息類型,有:
    ?(1) OUTPUT_ANN,數(shù)據(jù)輸出到屏幕
    ?(2) OUTPUT_PYTHON,數(shù)據(jù)輸出到上層協(xié)議
    ?(3) OUTPUT_BINARY
    ?(4) OUTPUT_META

python調用方式:




  • put方法
    ??輸出數(shù)據(jù)到屏幕或上層協(xié)議,python調用方式:?



  • 其中,a、b為采樣點區(qū)間值,self.out_ann為注冊的消息類型,[0,[‘a(chǎn)bc’]], 0為消息類型序號,參考之前的內容;[‘a(chǎn)bc’]為消息內容了

  • wait方法
     ??獲得上一次分析位置后的采樣數(shù)據(jù),可通過參數(shù)指定邊沿查找條件。
    ??調用方式: self.wait()
    ??可指定參數(shù),如:{0,’r’}表示第1個綁定的通道滿足向上邊沿的數(shù)據(jù);{1,’f’}表示第2個綁定通道足向下邊沿的數(shù)據(jù)。其它條件標志還有:h、l、e、n。
    ??可通過多個條件組成并和或的條件。并條件如:{0:’f’,1:’r’},或條件如:[{0:’f’},{1:’r’}]


  • has_channel方法
    用來叛斷某個通道是否綁定,python調用方式:



  • ???
    ??0是通道序號。

  • 屬性
    c底層類給python提供了兩個屬性:
    a. self.samplenum,wait()調用后的采樣數(shù)據(jù)位置;
    b. self.matched,wait()調用后條件參數(shù)的匹配結果信息;

  • python層包裝類Decoder
    繼承至c底層包裝的類,由c底層實例化并調用python類的方法,代碼如下:?



  • 子類Decoder的方法有:


  • reset方法
    這里做一些變量值的重置,以及類的私有變量的定義。變量的定義如:



  • start方法
    ??在解碼任務開始執(zhí)行前,c底層代碼會調用一次start函數(shù),這里主要是做一些初始化工作,比如注冊消息類型,如:



  • decode方法
    ??由c底層調用,在解碼任務開始時,c底層啟動一個線程,然后在線程里調用decode方法。
    在這個函數(shù)里,一直循環(huán)調用wait函數(shù),不斷從c底層讀取符合邊沿條件的數(shù)據(jù),如:




  • (a,b)元組里的變量數(shù)跟聲明的chnnaels里聲明的通道數(shù)一致,包括可選的通道上。

解碼任務執(zhí)行流程:

  • (1) 解碼任務開始啟動;

  • (2) 上層將采樣數(shù)據(jù)分批推送到底層;

  • (3) 底層檢測并啟動一個線程,該線程調用python層的decode函數(shù),不斷處理上層推送的數(shù)據(jù);

  • (4) python層經(jīng)過一系列的計算處理,生成解碼結果,通過put函數(shù)輸出到c底層;

  • (5) 當所有數(shù)據(jù)推送完成并經(jīng)過python層處理,解碼任務結束;

七、框架升級更新記錄

??在DSView版本1.2.0以上,更新以下功能:  

  • end方法
    python層的方法,當所有數(shù)據(jù)處理完成后會被c底層觸發(fā)

  • self.last_samplenum屬性
    c底層提供的屬性,其值為所有數(shù)據(jù)推送完成后最后的數(shù)據(jù)樣位置。當存在end方法時,該屬性將被設置

  • 數(shù)據(jù)多種顯示格式
    顯示的annotation數(shù)據(jù)部分,可以在2進制、16進制、8進制、10進制、ascii格式間轉換。




  • ??put函數(shù)將數(shù)據(jù)輸出c底層,并在屏幕上顯示。其中,value為要顯示的數(shù)據(jù)。在輸出到時需要轉換為16進制的字符串。當需要讓數(shù)據(jù)支持在多種格式間轉換時,代碼修改如下:




  • ??它是通過在數(shù)據(jù)部分前加@符號,告訴c底層這一部分內容是數(shù)據(jù)部分,如:
    '@66FB'
    如果存在前綴文字,需要將格式部分和數(shù)據(jù)部分開,如:
    ['Data:{$}','D:{$}', '@66FB']
    {$}是占位符,系統(tǒng)將數(shù)據(jù)部分格式化后替換掉占位符,就會變成:Data:66FB




邏輯分析儀 怎么添加自己需要的協(xié)議?的評論 (共 條)

分享到微博請遵守國家法律
罗城| 宜宾市| 北宁市| 内江市| 米泉市| 南江县| 泰来县| 阿克| 枣强县| 渝北区| 深泽县| 承德县| 宣化县| 九江县| 江永县| 文登市| 九寨沟县| 双柏县| 阿合奇县| 卓资县| 桂林市| 临高县| 炉霍县| 台南市| 永寿县| 德惠市| 木里| 大余县| 成武县| 右玉县| 澄迈县| 上犹县| 大庆市| 永和县| 湘乡市| 凤冈县| 东兰县| 孝义市| 宜都市| 张家界市| 白银市|