天天看點

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

全局掌控

  • 确定新項目的目錄
  • 用VSCode建立項目
  • 重新打開SDK目錄
  • 簡單修改新項目的模闆
  • 編譯,燒寫,檢視結果
  • AliOS Things 的Yloop排程

新項目的目錄

我們将從Git上面下載下傳的源碼,稱之為SDK。

這個檔案夾,就是存放SDK的檔案夾。

SDK的路徑你随意放。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

在零妖的電腦上,SDK的路徑是:F:AliOS_SourceAliOS-Things

建立的項目,需要放到SDK裡面的一個叫做 example 的目錄。

這個目錄裡面已經有一些參考項目了。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

咱們要做的,就是在這個目錄裡面建立自己的項目。

比如零妖要建立一個 led1 的項目,那就建立一個檔案夾,名字叫做 led1 。

建立的項目路徑是:F:AliOS_SourceAliOS-Thingsexampleled1

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

VSCode建立項目

打開VSCode,點選這個符号就可以建立項目。

你提前複制好你的項目路徑。

零妖的電腦上,這個路徑是:F:AliOS_SourceAliOS-Thingsexampleled1

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

點過之後,這裡會有一個預設路徑,删除掉。

粘貼上自己的項目路徑後,敲回車。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

OK,這一步完成後,你就可以關閉VSCode了。

打開剛才建立的項目檔案夾,發現裡面多了許多檔案。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

重新打開SDK的目錄

需要用VSCode,重新打開SDK檔案夾。

看到了吧。剛才建立的項目已經能找到了。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

建立的項目,是一個Helloworld的模闆項目。

簡單修改一下。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

編譯之前要選擇對應的項目,選擇對應的硬體。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束
WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

選擇好之後,編譯一下。

編譯OK。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

燒寫OK。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

打開序列槽。

輸出的調試資訊和咱修改的一緻。

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束

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檔案夾裡面有很多參考項目,非常大的參考價值。
  • 自己的項目,可以邊參考例程,邊自己修改。

微信公衆号 偶爾更新

WIN10系統上,建立AliOS Things項目全局掌控新項目的目錄VSCode建立項目重新打開SDK的目錄簡單修改新項目的模闆編譯,燒寫,檢視結果AliOS Things 的Yloop排程結束