chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

3天內(nèi)不再提示

解鎖:LuatOS框架的使用(下篇)

合宙LuatOS ? 來源:合宙LuatOS ? 作者:合宙LuatOS ? 2026-01-28 13:18 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

接上一篇

2.3 LuatOS定時器timer)

對于 LuatOS 應用程序來說,定時器本質(zhì)上也算是一種特殊的消息,因為定時器太常用了,所以把他單獨拎出來,單獨的一個章節(jié)進行講解;

2.3.1 基本概念

LuatOS 定時器的分類如下:

wKgZPGl4kkSAKY5BAAQq2_3lukg008.png

LuatOS 定時器管理的 API 列表如下:

(1) 單次定時器創(chuàng)建并且啟動:sys.timerStart(cbfunc, timeout, ...)

(2) 循環(huán)定時器創(chuàng)建并且啟動:sys.timerLoopStart(cbfunc, timeout, ...)

(3) 單個定時器停止并且刪除:sys.timerStop(timer_id)

(4) 單個定時器停止并且刪除:sys.timerStop(cbfunc, ...)

(5) 多個定時器停止并且刪除:sys.timerStopAll(cbfunc)

(6) 阻塞等待一段時間(只能在 task 中使用):sys.wait(timeout)

(7) 阻塞等待全局消息或者阻塞等待一段時間(只能在 task 中使用):sys.waitUntil(msg, timeout)

(8) 阻塞等待定向消息或者阻塞等待一段時間(只能在 task 中使用):sys.waitMsg(task_name, msg, timeout)

2.3.2 定時器消息處理的完整周期

wKgZPGl5iMiAF_lXAAIElVSjPsQ069.png

2.3.3 sys.timerStart(cbfunc, timeout, ...)

功能

創(chuàng)建并且運行一個單次定時器;

注意事項

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);

有兩種方式可以唯一標識一個定時器:

1、定時器 id;如果使用 sys.timerStart(cbfunc, timeout, ...)創(chuàng)建定時器成功,會返回定時器 id

2、定時器回調(diào)函數(shù) cbfunc 和可變參數(shù)...,此種方式的說明如下:

如果 cbfunc 和...相同,重復調(diào)用 sys.timerStart(cbfunc, timeout, ...)接口創(chuàng)建并且運行定時器;

在 sys.timerStart 內(nèi)部會自動停止并且刪除已經(jīng)存在的重復定時器;

例如執(zhí)行如下三行代碼后:

sys.timerStart(led_on_timer_cbfunc, 1000, "red")

sys.timerStart(led_on_timer_cbfunc, 2000, "red")

sys.timerStart(led_on_timer_cbfunc, 3000, "red")

最后只有 sys.timerStart(led_on_timer_cbfunc, 3000, "red") 這個定時器在運行,前面創(chuàng)建的兩個定時器都被自動刪除了,沒有完整運行;

參數(shù)

cbfunc

wKgZPGl5iWmAe8oJAAPseoBLxbs548.png

timeout

wKgZO2l5iayACiXlAALsEkIIc_Y795.png

關于定時器精度的問題,我們再來看下面這張圖來理解:

1、FreeRTOS中的一些任務優(yōu)先級比Lua虛擬機任務優(yōu)先級高,尤其是4G網(wǎng)絡中斷的任務優(yōu)先級最高,這些高優(yōu)先級的任務的搶占執(zhí)行,會直接影響Lua虛擬機任務執(zhí)行的實時性,進而導致sys.run()調(diào)度器的運行實時性也不會很高;

2、在Lua虛擬機任務內(nèi)部的sys.run()調(diào)度器中,首先是遍歷并且分發(fā)處理用戶全局消息隊列中的所有消息,這些消息全部處理完,才會去執(zhí)行內(nèi)核消息隊列中的第一條消息,定時器事件到達的消息是存儲在內(nèi)核消息隊列中的,如果用戶全局消息隊列中的消息處理耗時較長,或者內(nèi)核消息隊列中在定時器消息之前還有其他消息(例如串口消息,mqtt消息等),定時器消息都要排隊才能執(zhí)行,所以整個項目的業(yè)務越復雜,系統(tǒng)負載就越重,消息數(shù)量就越多,定時器消息處理的實時性就越低;

wKgZO2l5ifmABS5kAAH6MFes2Iw393.pngwKgZPGl5ihqAZJVMAAGAlnCBXRk834.png


返回值

local timer_id = sys.timerStart(cbfunc, timeout, ...)

有一個返回值為 timer_id

timer_id

wKgZPGl5ikeADv-sAAClwSd4-m4181.png

示例

wKgZO2l5inuAdUnlAANr_qigtoI384.png

2.3.4 sys.timerLoopStart(cbfunc, timeout, ...)

功能

創(chuàng)建并且運行一個循環(huán)定時器;

注意事項

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);

有兩種方式可以唯一標識一個定時器:

1、定時器 id;如果使用 sys.timerLoopStart(cbfunc, timeout, ...)創(chuàng)建定時器成功,會返回定時器 id

2、定時器回調(diào)函數(shù) cbfunc 和可變參數(shù)...,此種方式的說明如下:

如果 cbfunc 和...相同,重復調(diào)用 sys.timerLoopStart(cbfunc, timeout, ...)接口創(chuàng)建并且運行定時器;

在 sys.timerLoopStart 內(nèi)部會自動停止并且刪除已經(jīng)存在的重復定時器;

例如執(zhí)行如下三行代碼后:

sys.timerLoopStart(led_on_timer_cbfunc, 1000, "red")

sys.timerLoopStart(led_on_timer_cbfunc, 2000, "red")

sys.timerLoopStart(led_on_timer_cbfunc, 3000, "red")

最后只有 sys.timerLoopStart(led_on_timer_cbfunc, 3000, "red") 這個定時器在運行,前面創(chuàng)建的兩個定時器都被自動刪除了,沒有完整運行;

參數(shù)

cbfunc

wKgZO2l5irWAE9AYAAPlzZ-Khbk623.png

timeout

wKgZO2l5it6ABWDTAAK8O1bGW8U715.png

...

wKgZPGl5ihqAZJVMAAGAlnCBXRk834.png

返回值

local timer_id = sys.timerLoopStart(cbfunc, timeout, ...)

有一個返回值為 timer_id

timer_id

wKgZPGl5ikeADv-sAAClwSd4-m4181.png

示例

wKgZPGl5i3mATNC9AAOua9L2Zfg360.png

2.3.5 sys.timerStop(timer_id)

功能

根據(jù)定時器 id 停止運行并且刪除一個定時器;

注意事項

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);

有兩種方式可以唯一標識一個定時器:

1、定時器 id;如果使用 sys.timerStart(cbfunc, timeout, ...)或者 sys.timerLoopStart(cbfunc, timeout, ...)創(chuàng)建定時器成功,會返回定時器 id

2、定時器回調(diào)函數(shù) cbfunc 和可變參數(shù)...;

參數(shù)

timer_id

wKgZPGl5i66AUwuJAAGx8Kkwvto177.png

返回值

nil

示例

wKgZO2l5i9uADSDBAAJqA3LuyXw638.png

2.3.6 sys.timerStop(cbfunc, ...)

功能

根據(jù)定時器的回調(diào)函數(shù) cbfunc 和可變參數(shù)...停止運行并且刪除一個定時器;

注意事項

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);

有兩種方式可以唯一標識一個定時器:

1、定時器 id;如果使用 sys.timerStart(cbfunc, timeout, ...)或者 sys.timerLoopStart(cbfunc, timeout, ...)創(chuàng)建定時器成功,會返回定時器 id;

2、定時器回調(diào)函數(shù) cbfunc 和可變參數(shù)...;

參數(shù)

cbfunc

wKgZPGl5jBaAdxHGAAHYVn8Evfo984.png

返回值

nil

示例

wKgZO2l5jD-AORGnAAKDJqKLMZ4883.png

2.3.7 sys.timerStopAll(cbfunc)

功能

停止運行并且刪除回調(diào)函數(shù)為 cbfunc 的所有定時器;

注意事項

可以在能夠執(zhí)行到的任意代碼位置使用此函數(shù);

參數(shù)

cbfunc

wKgZPGl5jJGAJlhFAAHV8UC37Ms927.png


返回值

nil

示例

wKgZPGl5jMCARM5fAAJHA0zHVkA257.png

2.3.8 sys.wait(timeout)

功能

在 task 中阻塞等待一段時間;

注意事項

只能在基礎 task 和高級 task 處理函數(shù)的業(yè)務邏輯中使用此函數(shù);

參數(shù)

timeout

wKgZPGl5jP6AbCEuAALj4_dAryo003.png

返回值

nil

示例

wKgZO2l5jSKASzhtAAGW3SMDL94365.png

sys.waitUntil(msg, timeout)

功能

在 task 中阻塞等待一個全局消息;

注意事項

只能在基礎 task 和高級 task 處理函數(shù)的業(yè)務邏輯中使用此函數(shù);

sys.publish(msg, ...) 和 sys.waitUntil(msg, timeout)配合使用時:

在 sys.publish(msg, ...)之前,必須保證 task 正在 sys.waitUntil(msg, timeout)代碼處,處于阻塞等待狀態(tài);

這樣才能保證發(fā)布的 msg 消息可以被 task 處理;

同一個全局消息 msg,可以被多個正在 sys.waitUntil(msg, timeout)代碼處阻塞等待的 task 處理;

參數(shù)

msg

wKgZO2l5jXKAOKtKAAELGtZTi4Q635.png

timeout

wKgZO2l5jb-ATELSAALfu9AnAS8899.png

返回值

local result, arg1, arg2, arg3, argN = sys.waitUntil(msg, timeout)

有數(shù)量不固定的返回值:

第一個返回值為 result

剩余的返回值 arg1, arg2, arg3, argN,表示可變數(shù)量的返回值,只有當?shù)谝粋€返回值 result 為 true 時,這些可變數(shù)量的返回值才有意義,和 sys.publish(msg, ...)中...表示的可變參數(shù)一一對應

result

wKgZPGl5jeqAZuwoAACMNT6uuF0973.png

arg1, arg2, arg3, argN

wKgZO2l5jg-ABU9jAAFLkl6IQRs577.png

正確示例

wKgZO2l5jjSAS44QAAJ8y9jsS8w832.png

錯誤示例

wKgZPGl5jmWAB1yIAAS26S7PyW4542.png

2.3.9 sys.waitUntil(msg, timeout)

功能

在 task 中阻塞等待一個全局消息;

注意事項

只能在基礎 task 和高級 task 處理函數(shù)的業(yè)務邏輯中使用此函數(shù);

sys.publish(msg, ...) 和 sys.waitUntil(msg, timeout)配合使用時:

在 sys.publish(msg, ...)之前,必須保證 task 正在 sys.waitUntil(msg, timeout)代碼處,處于阻塞等待狀態(tài);

這樣才能保證發(fā)布的 msg 消息可以被 task 處理;

同一個全局消息 msg,可以被多個正在 sys.waitUntil(msg, timeout)代碼處阻塞等待的 task 處理;

參數(shù)

msg

wKgZO2l5jvWABEqBAAEEvForwx8734.png

timeout

wKgZPGl5j0WAPtOIAAM3M-ODO78549.png

返回值

local result, arg1, arg2, arg3, argN = sys.waitUntil(msg, timeout)

有數(shù)量不固定的返回值:

第一個返回值為 result

剩余的返回值 arg1, arg2, arg3, argN,表示可變數(shù)量的返回值,只有當?shù)谝粋€返回值 result 為 true 時,這些可變數(shù)量的返回值才有意義,和 sys.publish(msg, ...)中...表示的可變參數(shù)一一對應

result

wKgZO2l5j6KAPkznAACYZ0rjEDM375.png

arg1, arg2, arg3, argN

wKgZO2l5j8SAE5ciAAFeinrIO_Y715.png

正確示例

wKgZO2l5j-6Af4_OAAK-Iqwh464720.png

錯誤示例

wKgZPGl5kBiAUnyCAAU_iZyCDCk829.png

2.3.10 sys.waitMsg(task_name, msg, timeout)

功能

在 task 中阻塞等待名稱為 task_name 的 task 的定向消息;

注意事項

只能在高級 task 處理函數(shù)的業(yè)務邏輯中使用此函數(shù);

sys.sendMsg(task_name, msg, arg2, arg3, arg4)是定向消息的生產(chǎn)者,定向消息有生產(chǎn)就會有消費,不然消息就沒有存在的意義了;

sys.waitMsg(task_name, msg, timeout)所在的 task 是定向消息的消費者;

sys.sendMsg(task_name, msg, arg2, arg3, arg4) 和 sys.waitMsg(task_name, msg, timeout)配合使用;

在 sys.sendMsg(task_name, msg, arg2, arg3, arg4)之前,需要保證名稱為 task_name 的 task 已經(jīng)被創(chuàng)建,否則定向消息也會丟失;

參數(shù)

task_name

wKgZO2l5kF6AEPGlAAFI5TmTkqo339.png

msg

wKgZO2l5kJeAD2wQAAE6EKR7DIE871.png

timeout

wKgZO2l5kMqAFXZuAAOiq9SWfbY254.png

返回值

local message = sys.waitMsg(task_name, msg, timeout)

有一個返回值為 message

message

wKgZO2l5kPiAJ8S8AAFgJIfaSik771.png

示例

wKgZPGl5kR-ABCziAAPFneV50Js273.png

2.3.11 定時器代碼示例

在了解了定時器的 api 之后,我們再看下圖回顧一下定時器消息處理的完整周期

wKgZPGl5kU-ATtEXAAIDT-6tBxU419.png


下面這個例子用來說明定時器的使用方法;

這個例子的完整代碼鏈接:timer.lua

核心代碼片段如下,我們首先分析下這段代碼的業(yè)務邏輯

wKgZPGl5kYeACPgoAAjR6l_S81o706.png

我們在模擬器上實際運行一下看看,輸入命令

luatos --llt=H:Luatoolsprojectluatos_framework_luatos_task_Air8000.ini

運行日志如下:

wKgZO2l5kbWAAgBvAAIsw0j1eww356.png

我們結(jié)合運行日志分析一下代碼的業(yè)務邏輯是否執(zhí)行正常;

2.4 task 內(nèi)部運行環(huán)境 vs task 外部運行環(huán)境

在前文內(nèi)容中,我們提到了應用腳本代碼的兩種運行環(huán)境;當時僅僅對這兩種概念做了一個初步的介紹,并沒有結(jié)合示例來講解,現(xiàn)在我們已經(jīng)學習了 task,msg,timer,可以結(jié)合 task,msg,timer 來舉一些實際的例子,來進一步理解這兩種運行環(huán)境;

2.4.1 基本概念

首先復現(xiàn)一下這兩種運行環(huán)境的概念:

在 LuatOS 應用腳本開發(fā)過程中,我們所編寫的應用腳本代碼,存在兩種業(yè)務邏輯的運行環(huán)境:

1、一種是在 task 的任務處理函數(shù)內(nèi)部的業(yè)務環(huán)境中運行,我們簡稱為:在 task 內(nèi)部運行;

2、一種是在 task 的任務處理函數(shù)外部的業(yè)務環(huán)境中運行,我們簡稱為:在 task 外部運行;

怎么理解這兩種業(yè)務邏輯運行環(huán)境?我們看下面這張圖

看右邊生長出分支的這棵大樹,這棵大樹就是 FreeRTOS 創(chuàng)建的 Lua 虛擬機 task,是一個 FreeRTOS task;

在這個 Lua 虛擬機 FreeRTOS task 上,這棵大樹再分為兩部分:

1、樹干部分:樹干部分運行的業(yè)務邏輯環(huán)境就是 LuatOS task 外部運行環(huán)境;

2、樹枝部分:每個樹枝都是一個獨立的 LuatOS task,樹枝部分運行的業(yè)務邏輯環(huán)境就是 LuatOS task 內(nèi)部運行環(huán)境;

wKgZO2l5kkKAambYAAK7rRi06EA025.pngwKgZO2l5kliAJofzAAH6iI_JlcI964.png

2.4.2 sys api 需要的運行環(huán)境

接下來對 task、msg、timer 的 api 需要的運行環(huán)境做一個說明

wKgZO2l5ksCAaA0WAAD7BUIQ0IA277.png

從以上表格可以看出,sys 核心庫中的 api,從需要的運行環(huán)境來看,分為以下三類:

1、大部分的 api,既可以在 task 內(nèi)部運行,也可以在 task 外部運行;

2、sys.waitUntil,sys.waitMsg,sys.wait,這三個 spi,只能在 task 內(nèi)部運行;

3、sys.run,只能在 task 外部運行;

2.4.3 sys api 的回調(diào)函數(shù)提供的運行環(huán)境

wKgZO2l5kv-AS1WqAABYajvo7d0125.png

從以上表格可以看出,sys 核心庫中的 api,如果支持回調(diào)函數(shù),這些回調(diào)函數(shù)內(nèi)部提供的運行環(huán)境,分為以下兩類:

sys.taskInitEx(task_func, task_name,non_targeted_msg_cbfunc, ...)中的回調(diào)函數(shù)non_targeted_msg_cbfunc,提供的是 task 內(nèi)部運行環(huán)境;

sys.subscribe(msg,msg_cbfunc),sys.timerStart(cbfunc, timeout, ...),sys.timerLoopStart(cbfunc, timeout, ...)中的回調(diào)函數(shù),提供的是 task 外部運行環(huán)境;所以這些回調(diào)函數(shù)內(nèi)部不能調(diào)用“只能在 task 內(nèi)部運行”的 api,例如在 sys.subscribe(msg,msg_cbfunc)的msg_cbfunc內(nèi)部不能調(diào)用 sys.waitUntil,sys.waitMsg,sys.wait;

2.4.4 常犯的錯誤

新接觸 LuatOS 開發(fā)的用戶,經(jīng)常會犯上面黃色背景標注的這個錯誤;

下面這個例子用來說明常犯的這種錯誤;

這個例子的完整代碼鏈接:task_inout_env_err.lua

核心代碼片段如下,我們首先分析下這段代碼的業(yè)務邏輯(實際運行演示時,每次打開三段黃色背景代碼中的其中一段)

wKgZPGl5kzqAGCQHAAY3mfQXB6I297.png

我們在模擬器上實際運行一下看看,輸入命令

luatos --llt=H:Luatoolsprojectluatos_framework_luatos_task_Air8000.ini

運行日志如下:

wKgZO2l5k3GAWcSnAAHQEv7xslw824.pngwKgZPGl5k5OAHaaBAAGcNkYN32U892.pngwKgZO2l5k6mADmNeAACfWDndLks108.png

2.5 sys 核心庫 api 的組合使用關系

我們已經(jīng)學習過了 sys 核心庫中的 task,msg,timer 的 api,在這些 api 中:

1、有些 api 必須在一起組合使用,才能實現(xiàn)完整的業(yè)務流程;

2、有些 api 禁止在一起組合使用,否則會導致業(yè)務出錯;

在這些 api 中,主要是消息的發(fā)送和接收 api 容易混用,組合使用關系參考下表(每一行的兩個單元格所表示的 api 必須組合使用):

wKgZPGl5k-GAWbG7AABD2MLwXII992.png

2.6 LuatOS 應用軟件調(diào)度機制(sys.run()函數(shù))

1、sys 核心庫是 LuatOS 運行框架庫,是 LuatOS 應用程序運行的核心大腦,所有 LuatOS 應用項目都會使用到 sys 核心庫;

2、截止到目前,我們已經(jīng)學習了 sys 核心庫提供的 task,msg,timer 功能;

3、sys 核心庫還剩最后一個功能 api,sys.run();

4、sys 核心庫是 LuatOS 應用程序運行的核心大腦,sys.run()是 sys 核心庫的大腦,負責整個 LuatOS 應用腳本程序的調(diào)度和管理,是 LuatOS 應用程序的調(diào)度器;

sys.run()非常重要,但是 sys.run()使用起來非常簡單,僅僅在 main.lua 的最后一行調(diào)用 sys.run()即可。

雖然 sys.run()使用起來非常簡單,但是如果大家對 sys.run()的運行原理有一個總體性的理解和認識,對開發(fā) LuatOS 應用項目來說,幫助很大。

所以在這里,我先對 sys.run()內(nèi)部的工作原理做一個簡化后的總體介紹,至于更詳細的原理介紹,我們會在后續(xù)的 LuatOS 直播課程中講解;

wKgZO2l5lD6AV3HoAAIPE04WXQk095.png

我們看上面這張圖:

1、LuatOS 內(nèi)核固件中的 FreeRTOS 會創(chuàng)建一個 Lua 虛擬機任務;

2、Lua 虛擬機任務的處理函數(shù)中,首先進行初始化:

(1) 在內(nèi)核固件的 C 代碼中,加載 Lua 標準庫和 LuatOS 核心庫;

(2) 從 LuatOS 的腳本分區(qū)找到 main.lua

(3) 開始逐行嵌套解析執(zhí)行 main.lua 中的腳本代碼(加載必要的擴展庫腳本文件和自己開發(fā)的應用腳本文件,并且運行這些腳本文件的初始化代碼)

3、運行 main.lua 的最后一行代碼 sys.run()

4、sys.run()中的實現(xiàn)是一個 while true 循環(huán),在這個循環(huán)內(nèi),不斷地從內(nèi)核消息隊列和用戶全局消息隊列中讀取消息,并且分發(fā)消息給接收者進行處理。

wKgZO2l5lLCAE3R9AAI3YwJuOEs956.png

2.7 分析 mqtt demo 中的 task,msg,timer,run 的使用案例

現(xiàn)在,LuatOS 框架的使用,基本上講完了,接下來,我們來實際看一個完整 mqtt demo 項目代碼,重點分析下這份 demo 項目代碼中,使用到的本章節(jié)講解的知識點;

mqtt demo 代碼路徑:Air8000 mqtt demo;

Mqtt demo 項目的總體設計框圖如下:

wKgZO2l5lRKAeusiAAJo4mDA38M507.png

這份mqtt demo中的readme文件,以及代碼中的注釋都比較詳細,接下來我用vscode直接打開這份demo項目代碼,從以下幾方面講解一下:

1、先總體看一下mqtt demo的readme文件,讓大家對這個demo項目的業(yè)務邏輯有一個總體的認識;

2、從以下幾方面來詳細分析mqtt demo項目代碼:

mqtt demo項目腳本的整體運行邏輯;

mqtt demo項目腳本中使用到的LuatOS task,message,timer,調(diào)度器代碼解讀;

通過分析和本篇文章有關的代碼,讓大家對本節(jié)理解更加深刻;

現(xiàn)在我們開始進入mqtt demo項目中去分析;

三、課后作業(yè)

至少二選一

3.1 開發(fā)代碼,在 LuatOS 模擬器 上驗證可以同時運行的定時器數(shù)量

作業(yè)提交內(nèi)容:

1、 6 個 Lua 文件

(1) main.lua:初始化,加載下面的 5 個 lua 文件功能模塊(每次只打開其中的 1 個進行驗證),執(zhí)行 sys.run;(可以參考本講課程中的 demo)

(2) timer_start.lua:使用 sys.timerStart 接口來驗證可以同時運行的定時器數(shù)量;

(3) timer_loop_start.lua:使用 sys.timerLoopStart 接口來驗證可以同時運行的定時器數(shù)量;

(4) wait.lua:使用 sys.wait 接口來驗證可以同時運行的定時器數(shù)量;

(5) wait_until.lua:使用 sys.waitUntil 接口來驗證可以同時運行的定時器數(shù)量;

(6) wait_msg.lua:使用 sys.waitMsg 接口來驗證可以同時運行的定時器數(shù)量;

2、1 個運行日志文件

3、1 個分析文件,給出可以同時運行多少個定時器的結(jié)論,然后結(jié)合代碼和日志分析出來為什么可以同時運行這么多的定時器;

3.2 開發(fā)代碼,在 Air 系列模組的開發(fā)板或者核心板 上驗證可以同時運行的定時器數(shù)量

作業(yè)提交內(nèi)容:

1、 6 個 Lua 文件

(1) main.lua:初始化,加載下面的 5 個 lua 文件功能模塊(每次只打開其中的 1 個進行驗證),執(zhí)行 sys.run;(可以參考本講課程中的 demo)

(2) timer_start.lua:使用 sys.timerStart 接口來驗證可以同時運行的定時器數(shù)量;

(3) timer_loop_start.lua:使用 sys.timerLoopStart 接口來驗證可以同時運行的定時器數(shù)量;

(4) wait.lua:使用 sys.wait 接口來驗證可以同時運行的定時器數(shù)量;

(5) wait_until.lua:使用 sys.waitUntil 接口來驗證可以同時運行的定時器數(shù)量;

(6) wait_msg.lua:使用 sys.waitMsg 接口來驗證可以同時運行的定時器數(shù)量;


2、 1 個運行日志文件

3、 1 個分析文件,給出可以同時運行多少個定時器的結(jié)論,然后結(jié)合代碼和日志分析出來為什么可以同時運行這么多的定時器;

今天的內(nèi)容就分享到這里了~


審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 定時器
    +關注

    關注

    23

    文章

    3367

    瀏覽量

    123362
  • LuatOS
    +關注

    關注

    0

    文章

    156

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    LuatOS 框架的嵌入式系統(tǒng)架構(gòu)設計原理

    API 接口,使開發(fā)者能用高級語言快速實現(xiàn)底層控制。這一設計顯著提升了開發(fā)效率,同時保持了良好的運行性能。 一、LuatOS框架中的概念 ? 在LuatOS中,有三個核心概念和一個調(diào)度器: 1、三個核心概念:任務(task),
    的頭像 發(fā)表于 02-03 15:57 ?79次閱讀
    <b class='flag-5'>LuatOS</b> <b class='flag-5'>框架</b>的嵌入式系統(tǒng)架構(gòu)設計原理

    LuatOS 系統(tǒng)框架的模塊化設計原理

    裁剪功能,適應不同規(guī)模的嵌入式項目需求。 一、LuatOS框架中的概念 ? 在LuatOS中,有三個核心概念和一個調(diào)度器: 1、三個核心概念:任務(task),消息(message),定時器(timer
    的頭像 發(fā)表于 02-03 15:56 ?97次閱讀
    <b class='flag-5'>LuatOS</b> 系統(tǒng)<b class='flag-5'>框架</b>的模塊化設計原理

    基于LuatOS的MQTT物聯(lián)網(wǎng)通信全解

    在構(gòu)建物聯(lián)網(wǎng)終端設備時,通信協(xié)議的選擇直接決定系統(tǒng)的穩(wěn)定性與擴展性。LuatOS通過內(nèi)置MQTT客戶端支持,使開發(fā)者能以極少代碼實現(xiàn)設備上云。本文將從協(xié)議原理到代碼實現(xiàn),全面解析基于LuatOS
    的頭像 發(fā)表于 01-29 19:42 ?158次閱讀
    基于<b class='flag-5'>LuatOS</b>的MQTT物聯(lián)網(wǎng)通信全解

    輕松掌握——LuatOS socket基礎知識和應用開發(fā)

    對于剛接觸LuatOS開發(fā)的工程師而言,實現(xiàn)設備聯(lián)網(wǎng)往往是第一個重要目標,而Socket編程正是實現(xiàn)這一目標的核心技術路徑。本文以循序漸進的方式,帶領讀者從最基礎的Socket概念入手,逐步掌握在
    的頭像 發(fā)表于 01-28 20:07 ?145次閱讀
    輕松掌握——<b class='flag-5'>LuatOS</b>  socket基礎知識和應用開發(fā)

    LuatOS框架的使用(上)

    在資源受限的物聯(lián)網(wǎng)終端設備中,如何實現(xiàn)快速開發(fā)與穩(wěn)定運行是關鍵挑戰(zhàn)。LuatOS框架通過將Lua語言與底層硬件抽象層深度融合,提供了一套簡潔高效的開發(fā)范式。本文將圍繞LuatOS框架
    的頭像 發(fā)表于 01-27 19:38 ?141次閱讀
    <b class='flag-5'>LuatOS</b><b class='flag-5'>框架</b>的使用(上)

    LuatOS-Air轉(zhuǎn)LuatOS常見故障排查手冊

    LuatOS-Air腳本在LuatOS環(huán)境中運行失敗,問題往往集中在幾個關鍵模塊:任務調(diào)度、外設驅(qū)動、網(wǎng)絡配置和固件版本匹配。本文以故障排查的邏輯為主線,列出常見報錯現(xiàn)象、可能原因及快速修復
    的頭像 發(fā)表于 01-13 19:20 ?120次閱讀
    <b class='flag-5'>LuatOS</b>-Air轉(zhuǎn)<b class='flag-5'>LuatOS</b>常見故障排查手冊

    警惕兼容性陷阱:LuatOS-Air腳本在LuatOS中的運行異常分析

    即使語法正確的LuatOS-Air腳本,在LuatOS環(huán)境中也可能出現(xiàn)“靜默失敗”——程序無報錯但功能未執(zhí)行。這類問題多與系統(tǒng)事件循環(huán)、模塊加載時機或硬件抽象層調(diào)用方式有關。本文通過多個真實
    的頭像 發(fā)表于 01-13 19:20 ?135次閱讀
    警惕兼容性陷阱:<b class='flag-5'>LuatOS</b>-Air腳本在<b class='flag-5'>LuatOS</b>中的運行異常分析

    掌握LuatOS系統(tǒng)消息:新手也能看懂的列表詳解

    視角出發(fā),用通俗語言解析其工作原理與配置方法。此處列舉了LuatOS框架中自帶的系統(tǒng)消息列表。 ? 一、sys ? 文檔鏈接:https://docs.openluat.com/osapi/core
    的頭像 發(fā)表于 01-13 18:12 ?110次閱讀
    掌握<b class='flag-5'>LuatOS</b>系統(tǒng)消息:新手也能看懂的列表詳解

    LuatOS腳本開發(fā)入門:嵌入式運行框架全解析!

    想搞懂LuatOS如何運行Lua腳本?本文深入剖析其嵌入式運行框架,涵蓋虛擬機加載、任務協(xié)程、系統(tǒng)初始化等關鍵環(huán)節(jié),適合初學者。 一、LuatOS 編程起步 1.1 底層固件怎么啟動 Luat
    的頭像 發(fā)表于 09-26 17:45 ?458次閱讀
    <b class='flag-5'>LuatOS</b>腳本開發(fā)入門:嵌入式運行<b class='flag-5'>框架</b>全解析!

    嵌入式開發(fā)新選擇:LuatOS腳本框架入門教程

    LuatOS正成為嵌入式開發(fā)的新趨勢!本教程帶你從基礎入手,全面了解其基于Lua的腳本開發(fā)模式與輕量級運行框架。 一、LuatOS 編程起步 1.1 底層固件怎么啟動 LuatOS
    的頭像 發(fā)表于 09-26 17:34 ?559次閱讀
    嵌入式開發(fā)新選擇:<b class='flag-5'>LuatOS</b>腳本<b class='flag-5'>框架</b>入門教程

    Task任務:LuatOS實現(xiàn)“任務級并發(fā)”的核心引擎

    Task任務通過其強大的并發(fā)處理能力,使LuatOS能夠在單線程環(huán)境中模擬多線程執(zhí)行,通過協(xié)程的掛起與恢復機制,實現(xiàn)任務級的并行操作,顯著提升系統(tǒng)效能。 sys核心庫是LuatOS運行框架庫,也是
    的頭像 發(fā)表于 08-28 13:49 ?495次閱讀
    Task任務:<b class='flag-5'>LuatOS</b>實現(xiàn)“任務級并發(fā)”的核心引擎

    揭秘LuatOS Task:多任務管理的“智能中樞”

    Task任務作為LuatOS的核心組成部分,通過智能化的任務管理機制,實現(xiàn)任務的創(chuàng)建、調(diào)度與協(xié)同運行,讓復雜應用得以高效并行處理,滿足實時場景下的嚴苛需求。 sys核心庫是LuatOS運行框架
    的頭像 發(fā)表于 08-28 13:48 ?625次閱讀
    揭秘<b class='flag-5'>LuatOS</b> Task:多任務管理的“智能中樞”

    解碼LuatOS:短信功能的底層運作機制

    短信功能在LuatOS中的運行并非表面所見那么簡單。本文將深入系統(tǒng)底層,解碼其通信協(xié)議、數(shù)據(jù)處理與系統(tǒng)交互,呈現(xiàn)完整的運作圖譜。 我們這期主要拆解airsms.lua文件,講清楚,短信功能
    的頭像 發(fā)表于 06-27 18:05 ?616次閱讀
    解碼<b class='flag-5'>LuatOS</b>:短信功能的底層運作機制

    解鎖LuatOS新世界:二次開發(fā)必備的3個核心常識

    踏入LuatOS的二次開發(fā)領域,掌握關鍵常識是開啟高效編程之旅的第一步。本文將揭示三個不可或缺的核心要點,助你快速突破技術壁壘,深度挖掘系統(tǒng)潛力,讓開發(fā)效率與創(chuàng)造力同步飆升。 本期一起
    的頭像 發(fā)表于 06-23 16:08 ?356次閱讀
    <b class='flag-5'>解鎖</b><b class='flag-5'>LuatOS</b>新世界:二次開發(fā)必備的3個核心常識

    解鎖LuatOS-log庫:全棧工程師的日志管理實戰(zhàn)課!

    針對全棧開發(fā)者設計的實戰(zhàn)教程,本文聚焦LuatOS平臺log庫的高效使用,從基礎配置到高級調(diào)試策略,手把手教你搭建可擴展的日志系統(tǒng),提升項目維護效率。 今天,我們一起來認識LuatOS的log庫
    的頭像 發(fā)表于 05-12 15:23 ?1501次閱讀
    <b class='flag-5'>解鎖</b><b class='flag-5'>LuatOS</b>-log庫:全棧工程師的日志管理實戰(zhàn)課!