国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

【ioqueue】 IO序列化操作全解析

合宙LuatOS ? 來源:合宙LuatOS ? 作者:合宙LuatOS ? 2026-02-24 19:22 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

從內存對象到可存儲或可傳輸的字節流,IO序列化操作完成了數據形態的轉化。這一過程不僅涉及編碼與解碼邏輯,還需處理版本兼容、安全性與性能開銷等問題。全面掌握這一技術路徑,有助于構建更加健壯的應用系統。

一、概述

ioqueue 模塊提供了 IO 序列操作的功能,可以通過硬件定時器精確控制 GPIO 的操作時序。

注意事項:

對于 Air700EXX 系列、Air780EXX 系列、Air8000 系列模組,硬件定時器有如下要求:

硬件定時器 id:0-5,六個硬件定時器,

定時器精度:20 微秒,為硬件支持的最小時間單位。

3 和 5 固定被底層占用不可使用

pwm 功能依賴硬件定時器,ioqueue 不可與 pwm 功能同時使用

pwm0 對應 0

pwm4 對應 4

以此類推

注意:Air6101/Air8101 不支持此功能

1.1 使用場景

ioqueue 主要是輸出一些特殊的電平序列,捕獲自定義協議。

如果有以下需要就可以使用該庫:

精確控制多個 GPIO 的開關時序

循環執行固定的 GPIO 操作序列

捕獲 GPIO 邊沿變化的精確時間戳

模擬非標準通信協議

1.1.1 輸入捕獲場景(以 DHT11 數據讀取為例)

單總線協議要求嚴格的時序控制、主機需要先發送特定啟動信號、傳感器響應時間精確到微秒級、數據通過脈沖寬度編碼

使用流程:

wKgZPGmdh0yAFKFhAAE68rZIxqQ333.png

下面演示使用硬件定時器精確控制 DHT11 通信時序,通過捕獲下降沿時間戳解碼溫濕度數據,實現微秒級精確通信:

dht11 通訊協議介紹:

數據分為小數部分和整數部分,一次完整的數據傳輸為 40bit,高位先出

數據格式:8bit 濕度整數數據 +8bit 濕度小數數據 +8bit 溫度整數數據 +8bit 溫度小數數據 +8bit 校驗

8bit 校驗 = 8bit 濕度整數數據 +8bit 濕度小數數據 +8bit 溫度整數數據 +8bit 溫度小數數據

校驗可以判斷數據是否正確發送

DHT11 工作時序:

主機發送起始信號以后,DHT11 發送響應信號,然后發送 40bit 的數據,高位在前

總時序圖如下:

wKgZPGmdh5KAJXzDAAH9gg6zCYY212.png

起始信號:總線空閑狀態由 DHT11 內置上拉電阻拉高,主機拉低總線至少 18ms釋放總線 20-40us

DHT11 響應:存在的 DHT11 會及時響應主機,同時拉低總線 80us 后,釋放總線 80us,然后拉低總線,表示開始傳送數據

wKgZPGmdh_6AMhzsAAIgx_fZ7aw067.png

發送數據:當總線是低電平是表示開始發送數據,同時存在 50us 低電平時隙,之后拉高總線,高電平的持續時間表示發送 0 或者 1,當高電平持續時間為 26us-28us 表示發送 0,高電平持續時間為 70us 時,表示發送 1

數據發送完畢,由上拉電阻拉高,置回空閑高電平狀態

wKgZO2mdiCOAc5QPAAZHD43t0do013.pngwKgZPGmdiEuAaXClABD-Rjn8z_0963.png

具體波形如下:

wKgZO2mdiHGAQtHSAAGuwaFZ4eg935.pngwKgZPGmdiIuAVu1KAAHMskpm_qY479.pngwKgZO2mdiJiAUZ6zAASOrpCsZ7o967.pngwKgZO2mdiKOAMMVnAAH28PQ01eA791.png

1.1.2 輸出精確脈沖場景

需要不同的脈沖寬度、軟件循環無法滿足精度要求、需要連續輸出大量脈沖

使用流程:

wKgZPGmdiQCAH8OlAAFniBE1aRw531.png

下面演示利用硬件定時器生成固定頻率或可變寬度的精確脈沖序列,支持連續和單次延時模式,實現微秒級脈沖控制:

固定間隔脈沖

wKgZPGmemT2AMW75AAOLw23kFFo801.pngwKgZO2memY6AEkKkAAFaiAOdo5s964.png

可變寬度脈沖序列

wKgZPGmembaALzlKAAQ__GUmg34855.pngwKgZO2memdCAQslUAAFlmcSnPmQ991.png

二、核心示例

示例可參考 1.1.1 章節具體使用分析。

三、常量詳解

核心庫常量,顧名思義是由 LuatOS 內核固件中定義的、不可重新賦值或修改的固定值,在腳本代碼中不需要聲明,可直接調用;

ioqueue 模塊沒有常量。

四、函數詳解

ioqueue.init(hwtimer_id, cmd_cnt, repeat_cnt)

功能

初始化一個 io 操作隊列。

參數

hwtimer_id

wKgZO2memjmAJK9XAAHNyxwotE8289.png

cmd_cnt

wKgZO2memlSABz_cAAF_rvEtOOU628.png

repeat_cnt

wKgZPGmemm-AdiDqAAC5ufrwFt0221.png

返回值

無返回值。

示例

wKgZPGmemqCAFt7DAABqjbrEqF4938.png

ioqueue.setdelay(hwtimer_id, time_us, time_tick, continue)

功能

對 io 操作隊列增加延時命令。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

time_us

wKgZPGmemuSASAxUAACp4yrjSE4279.png

time_tick

wKgZO2memv-AVOTXAAFvyJr2bz4172.png

continue

wKgZO2memxqAWSu1AAH5X8fIgkE877.png

返回值

無返回值。

示例

wKgZPGmemz6AcwZVAAF_3_kKyRw268.png

ioqueue.delay(hwtimer_id)

功能

對 io 操作隊列增加一次重復延時,在前面必須有 setdelay 并且是連續延時。

注意事項

必須在前面的 ioqueue.setdelay 設置 continue=true

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

無返回值。

示例

wKgZPGmem8iAI3XmAADjqFeLTKw641.png

ioqueue.setgpio(hwtimer_id, pin, is_input, pull_mode, init_level)

功能

對 io 操作隊列增加設置 gpio 命令。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

is_input

wKgZO2menEyABCP8AADBOmfzreI096.png

pull_mode

wKgZO2menMmADbh_AADyHqc2sng900.png

init_level

wKgZPGmenNmAMSRSAAC2viheLww748.png

返回值

無返回值。

示例

wKgZPGmenPyAOs-GAACkiFwWTeg249.png

ioqueue.input(hwtimer_id, pin)

功能

對 io 操作隊列增加讀取 gpio 命令。

應用場景:在精確時序點讀取 GPIO 電平狀態

使用時必須先調用 ioqueue.setgpio 設置輸入模式,然后通過 ioqueue.get()讀取輸入數據

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenXSAfAv4AADISK908Rg340.png

返回值

無返回值。讀取的數據需要通過 ioqueue.get 獲取。

示例

wKgZPGmenYuAQ5VSAAZFgXvXhAo414.png

ioqueue.output(hwtimer_id, pin, level)

功能

對 io 操作隊列增加輸出 GPIO 命令。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZO2menkyAO6pOAADJrhwh-5A841.png

level

wKgZPGmenmKAZHXlAACcIWe6s1Y291.png

返回值

無返回值。

示例

wKgZO2mennOAWISPAABEQngRiNo568.png


ioqueue.set_cap(hwtimer_id, pin, pull_mode, irq_mode, max_tick)

功能

對 io 操作隊列增加設置捕獲某個 IO 命令。

捕獲的配置命令

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

pull_mode

wKgZO2menqOAMVA0AADGhc1XZ0k696.png

irq_mode

wKgZPGmenrOAYRbvAADwzkMfTSM420.png

max_tick

wKgZPGmensKAfxNLAAHlQgVWB04466.png

返回值

無返回值。

示例

wKgZO2mentSAT7y2AAIVhZKSgPQ973.png

ioqueue.capture(hwtimer_id)

功能

對 io 操作隊列增加捕獲一次 IO 狀態命令。

捕獲的執行命令,必須先經過 ioqueue.set_cap 配置后才能使用 ioqueue.capture 來捕獲,一個 set_cap 配置可以被多個 capture 命令復用

參數

hwtimer_id

wKgZO2menz-ARfYoAADcnUdsbg4622.png

返回值

無返回值。捕獲的數據需要通過 ioqueue.get 獲取。

示例

wKgZPGmen0-ANKpJAAAmvyWFqOg648.png


ioqueue.cap_done(hwtimer_id, pin)

功能

對 io 操作隊列結束捕獲某個 IO 命令。

使用場景:

1.捕獲任務完成時 :主動結束,告訴系統數據讀取完成,停止 gpio 捕獲

2.切換捕獲目標時:比如從捕獲 gpio1 切換到捕獲 gpio2,需要先結束捕獲 gpio1。

3.錯誤處理或者提前退出時調用。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

返回值

無返回值。

示例

wKgZPGmen4SAdlZ8AAA7A-yGSlM447.png

ioqueue.get(hwtimer_id, input_buff, capture_buff)

功能

獲取 io 操作隊列中輸入和捕獲的數據。

注意事項

input,set_cap,capture 這三個配置接口配置的功能,緩存到的輸入數據和捕獲數據,都是通過 get 接口來讀取出來

input_buff ← 存儲 ioqueue.input() 的即時電平采樣結果

capture_buff ← 存儲 ioqueue.capture() 的邊沿事件 + 時間戳

input_cnt = 成功的 ioqueue.input() 操作數量

capture_cnt = 成功的 ioqueue.icapture() 操作數量(可能因超時而小于計劃數)

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

input_buff

wKgZO2meoLyAYHDnAAEFs_4x3KE233.png

capture_buff

wKgZO2meoMyAZMi0AAEJElU_tBg594.png

返回值

local input_cnt, capture_cnt = ioqueue.get(hwtimer_id, input_buff, capture_buff)

input_cnt

wKgZO2meoOKAGaN5AABzNIC6xDM624.png

capture_cnt

wKgZPGmeoPKAP9wYAABzvILJ0Vo416.png

示例

wKgZPGmeoQSAHpVzAABLNegMC8w442.png

ioqueue.start(hwtimer_id)

功能

啟動 io 操作隊列。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

無返回值。

示例

wKgZPGmeoW2APevgAAAl7U8ahuo615.png


ioqueue.stop(hwtimer_id)

功能

停止 io 操作隊列,可以通過 start 從頭開始。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

local loop_cnt, cmd_cnt = ioqueue.stop(hwtimer_id)

loop_cnt

wKgZO2meoY-AI-WgAACCMsnAiHU370.png

cmd_cnt

wKgZPGmeoaCAWp1kAADJEUZgAtc651.png

示例

wKgZPGmeobWACAncAAB0I2JYXu4534.png

ioqueue.release(hwtimer_id)

功能

釋放 io 操作隊列的資源,下次使用必須重新 init。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

無返回值。

示例

wKgZPGmeoo6AGn-RAAAl3phtFgE927.png


ioqueue.clear(hwtimer_id)

功能

清空 io 操作隊列。

此接口重置了命令隊列但保留了硬件定時器資源,可以直接添加新的命令。前提是你確信之前隊列的狀態完全被清空,且新的命令序列與之前的結構兼容。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

無返回值。

示例

wKgZPGmeoraAMPv4AAAlj7Myy1Y955.png


ioqueue.done(hwtimer_id)

功能

檢測 io 操作隊列是否已經執行完成。

參數

hwtimer_id

wKgZPGmemseAB4xVAAC3guTmCC0380.png

返回值

local is_done = ioqueue.done(hwtimer_id)

is_done

wKgZPGmeot-AQ5FoAABs4C4zxps860.png

示例

wKgZPGmeou2AXmEBAACa1FRgBfQ671.png

ioqueue.exti(pin, pull_mode, irq_mode, onoff)

功能

啟動/停止一個帶系統 tick 返回的外部中斷。

ioqueue.exti 是一個獨立的外部中斷接口,與 ioqueue 隊列系統完全分離,提供簡單的 GPIO 邊沿事件捕獲功能。

使用場景:簡單的按鍵檢測、傳感器狀態監控、旋轉編碼器計數

參數

pin

wKgZPGmenC6AdPnjAACuxCrszac672.png

pull_mode

wKgZO2mepY2AF1p9AADEvpwMe9I475.png

irq_mode

wKgZO2mepZyAchscAADvAwqzrHY186.png

onoff

wKgZO2mepayAeZbeAACrMWOHUB4938.png

返回值

無返回值。

示例

wKgZPGmepb-ALWiYAAGfZJHHmdI870.png

五、模組支持說明

僅支持 Air700EXX 系列、Air780EXX 系列、Air8000 系列模組,Air6101/Air8101 不支持此功能。


今天的內容就分享到這里了~

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • IO
    IO
    +關注

    關注

    0

    文章

    510

    瀏覽量

    42525
  • 存儲
    +關注

    關注

    13

    文章

    4791

    瀏覽量

    90058
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    深度解析DS1830/A復位序列器:特性、操作與應用

    深度解析DS1830/A復位序列器:特性、操作與應用 在電子系統設計中,復位序列器是確保系統穩定啟動和可靠運行的關鍵組件。今天我們就來深入探討DALLAS SEMICONDUCTOR(
    的頭像 發表于 02-28 15:10 ?112次閱讀

    JSON:簡潔代碼高效搞定序列化與反序列化

    面對頻繁的數據交互需求,用最簡方式實現JSON序列化與反序列化已成為開發者必備技能,借助主流庫,輕松實現零負擔數據轉換。JSON(JavaScriptObjectNotation)是一種輕量級
    的頭像 發表于 02-25 19:04 ?90次閱讀
    JSON:簡潔代碼高效搞定<b class='flag-5'>序列化</b>與反<b class='flag-5'>序列化</b>

    IO序列化操作:提升系統互操作性的關鍵技術

    在異構系統并存的今天,IO序列化操作成為實現系統間互操作性的核心技術。通過標準的數據格式(如JSON、Protobuf、Hessian等)
    的頭像 發表于 02-25 16:02 ?47次閱讀
    <b class='flag-5'>IO</b><b class='flag-5'>序列化</b><b class='flag-5'>操作</b>:提升系統互<b class='flag-5'>操作</b>性的關鍵技術

    極簡代碼,搞定JSON序列化與反序列化

    快速實現JSON數據的生成(序列化)與解析(反序列化)。 目前json庫已全面支持LuatOS開發系列產品,開發者可根據項目實際需求,靈活選用并進行快速集成與開發。 一、 JSON基礎要點 在
    的頭像 發表于 02-23 21:46 ?327次閱讀
    極簡代碼,搞定JSON<b class='flag-5'>序列化</b>與反<b class='flag-5'>序列化</b>

    掌握 LuatIO:GPIO 復用模式初始配置流程解析

    在使用 LuatIO 進行嵌入式應用開發時,合理配置 GPIO 的復用功能是實現外設控制的前提。本文全面解析 GPIO 引腳由普通 IO 轉換為復用功能引腳的初始流程,包括時鐘使能、模式選擇、速度
    的頭像 發表于 01-23 15:28 ?1126次閱讀
    掌握 LuatIO:GPIO 復用模式初始<b class='flag-5'>化</b>配置<b class='flag-5'>全</b>流程<b class='flag-5'>解析</b>

    深入剖析LMH0030:SMPTE標準數字視頻序列化器的卓越之選

    深入剖析LMH0030:SMPTE標準數字視頻序列化器的卓越之選 在當今數字的時代,數字視頻處理技術日新月異。對于電子工程師而言,選擇一款性能卓越、功能豐富的數字視頻序列化器至關重要。今天,我們
    的頭像 發表于 12-30 14:00 ?288次閱讀

    深入解析LM2512A:高性能RGB顯示接口序列化

    深入解析LM2512A:高性能RGB顯示接口序列化器 在電子設備的顯示領域,如何高效、穩定地傳輸高質量的圖像數據是一個關鍵問題。TI的LM2512A作為一款專門的移動像素鏈路(MPL - 1)24位
    的頭像 發表于 12-26 11:30 ?409次閱讀

    SN65HVS885:工業自動的理想數字輸入序列化

    SN65HVS885:工業自動的理想數字輸入序列化器 在工業和建筑自動領域,對于高通道密度數字輸入模塊的需求日益增長。德州儀器(TI)的SN65HVS885作為一款八通道數字輸入序列化
    的頭像 發表于 12-25 11:00 ?443次閱讀

    深度解析DS90UH929-Q1:720p HDMI 到 FPD-Link III 橋接序列化

    深度解析DS90UH929-Q1:720p HDMI 到 FPD-Link III 橋接序列化器 在電子工程師的日常工作中,選擇一款合適的器件來實現特定功能至關重要。今天,我們聚焦于德州儀器(TI
    的頭像 發表于 12-22 15:50 ?352次閱讀

    DS90UH947-Q1:1080p OpenLDI至FPD - Link III序列化器的深度解析

    DS90UH947-Q1:1080p OpenLDI 至 FPD - Link III 序列化器的深度解析 在當今的電子設備領域,視頻傳輸技術的發展日新月異,對于高質量、高速率視頻傳輸的需求也越來越
    的頭像 發表于 12-22 15:40 ?320次閱讀

    探索DS90UH981-Q1:4K DSI到FPD-Link IV橋接序列化器的卓越性能

    探索DS90UH981-Q1:4K DSI到FPD-Link IV橋接序列化器的卓越性能 在當今的電子設備設計領域,對于高速、可靠且功能強大的視頻傳輸解決方案的需求與日俱增。DS90UH981-Q1
    的頭像 發表于 12-17 11:15 ?442次閱讀

    GraniStudio:IO初始以及IO資源配置例程

    IO資源配置.gsp文件,點擊打開,完成導入。 2.功能說明 實現連接格拉尼控制器IO塊以及配置輸入輸出IO點。 2.1通過初始IO算子連
    的頭像 發表于 08-22 17:34 ?936次閱讀
    GraniStudio:<b class='flag-5'>IO</b>初始<b class='flag-5'>化</b>以及<b class='flag-5'>IO</b>資源配置例程

    TaskPool和Worker的對比分析

    TaskPoolWorker內存模型線程間隔離,內存不共享。線程間隔離,內存不共享。 參數傳遞機制采用標準的結構克隆算法(Structured Clone)進行序列化、反序列化,完成參數傳遞。 支持ArrayBuffer
    發表于 06-18 06:43

    鴻蒙5開發寶藏案例分享---跨線程性能優化指南

    程直接卡?。?二、寶藏工具:DevEco Profiler 序列化檢測 1??開啟步驟 打開DevEco Studio → Profiler → 選擇Frame模板 點擊錄制 → 操作應用觸發跨線程通信
    發表于 06-12 17:13

    快手上線鴻蒙應用高性能解決方案:數據反序列化性能提升90%

    普通對象(如 JSON 數據)與類實例進行互轉,是實現面向對象編程與數據序列化解耦的核心工具。隨著業務復雜度的提升,該庫在反序列化過程中逐漸暴露出性能瓶頸,影響用戶核心體驗。因此
    發表于 05-15 10:01