全局掌控
- 确定新項目的目錄
- 用VSCode建立項目
- 重新打開SDK目錄
- 簡單修改新項目的模闆
- 編譯,燒寫,檢視結果
- AliOS Things 的Yloop排程
新項目的目錄
我們将從Git上面下載下傳的源碼,稱之為SDK。
這個檔案夾,就是存放SDK的檔案夾。
SDK的路徑你随意放。

在零妖的電腦上,SDK的路徑是:F:AliOS_SourceAliOS-Things
建立的項目,需要放到SDK裡面的一個叫做 example 的目錄。
這個目錄裡面已經有一些參考項目了。
咱們要做的,就是在這個目錄裡面建立自己的項目。
比如零妖要建立一個 led1 的項目,那就建立一個檔案夾,名字叫做 led1 。
建立的項目路徑是:F:AliOS_SourceAliOS-Thingsexampleled1
VSCode建立項目
打開VSCode,點選這個符号就可以建立項目。
你提前複制好你的項目路徑。
零妖的電腦上,這個路徑是:F:AliOS_SourceAliOS-Thingsexampleled1
點過之後,這裡會有一個預設路徑,删除掉。
粘貼上自己的項目路徑後,敲回車。
OK,這一步完成後,你就可以關閉VSCode了。
打開剛才建立的項目檔案夾,發現裡面多了許多檔案。
重新打開SDK的目錄
需要用VSCode,重新打開SDK檔案夾。
看到了吧。剛才建立的項目已經能找到了。
建立的項目,是一個Helloworld的模闆項目。
簡單修改一下。
編譯之前要選擇對應的項目,選擇對應的硬體。
選擇好之後,編譯一下。
編譯OK。
燒寫OK。
打開序列槽。
輸出的調試資訊和咱修改的一緻。
Yloop實作原理
Yloop是AliOS Things的異步事件架構。
每個Yloop執行個體(aos_loop_t)與特定的任務上下文綁定。
AliOS Things的程式入口application_start所在的上下文與系統的主Yloop執行個體綁定,該上下文也稱為主任務。當底層的OS初始化完畢後,會第一個執行 application_start 這個函數。
主任務以外的任務也可以建立自己的Yloop執行個體。
Yloop實作了對資源的的統一排程管理,比如:
- IO:最常見的是Socket,也可以是AliOS Things的vfs管理的裝置
- timer:即常見的定時器
- callback:特定的執行函數
- event:包括系統事件,使用者自定義事件
當調用aos_loop_run後,目前任務将會等待上述的各類事件發生。
程式講解
application_start裡面做了兩件事情:
- 調用aos_post_delayed_action建立了一個1秒的定時器(Yloop裡面隻有oneshot timer)
- 調用aos_loop_run進入事件循環
1秒後,定時器觸發,app_delayed_action被調用,而app_delayed_action裡面
- 調用LOG列印
- 再次建立一個5秒的定時器,重而實作定期執行app_delayed_action
這裡注意到,程式并不需要aos_loop_init()去建立Yloop執行個體,因為系統會預設自動建立主Yloop執行個體。
OS内的API參考:
https://github.com/alibaba/AliOS-Things/wiki/AliOS-Things-API-YLOOP-Guide#6-aos_post_delayed_action解釋一個函數的原型:
int aos_post_delayed_action(int ms, aos_call_t action, void *arg)
作用:
比如:aos_post_delayed_action(5000, test, NULL);
系統定時5000ms,然後時間到了之後,運作 test() 這個函數。
//當OS初始化完成1S之後,系統會執行一次此函數
static void app_delayed_action(void *arg)
{
LOG("你好零妖 %s:%d %s\r\n", __func__, __LINE__, aos_task_name());//序列槽列印一些資訊
aos_post_delayed_action(5000, app_delayed_action, NULL);//告訴系統,5S後執行一下這個函數
}
//主任務。OS初始化完成後,會第一個執行的函數。
int application_start(int argc, char *argv[])
{
LOG("初始化完成,應用程式開始:");//序列槽輸出OS完成資訊
aos_post_delayed_action(1000, app_delayed_action, NULL);//1S後,觸發 app_delayed_action 函數
aos_loop_run();//OS開始等待各個事件是否發生,并随時準備執行對應的函數
return 0;
}
結束
- 建立的項目,一定要放到SDK裡面,example的檔案夾裡。
- 一定要重新打開VSCode,然後打開SDK檔案夾。
- example檔案夾裡面有很多參考項目,非常大的參考價值。
- 自己的項目,可以邊參考例程,邊自己修改。
微信公衆号 偶爾更新