SimonLiuのESP 8266とAliOS Things学習チュートリアルシリーズの8:タイマ実装

2418 ワード

交流群へようこそ:ESP 8266 AliOS Things群番号:107723112すべてのチュートリアルAliOS Things入門チュートリアルシリーズを参照してください.このチュートリアルはSimonLiuのCSDNブログで同期的に更新されています.
AliOSのタイマーについては、ネット上ではまだ専門的な文章が述べられていませんが、yloopの非同期フレームワークに関する文章にはいくつかの関連があります.SimonLiuはAliOS ThingsのAliOS Things API KERNEL Guideに関する内容を読んで、AliOS Thingsでタイマを実現する方法は2つあると結論した.1つ目はyloopフレームワークで実現し、2つ目はaosのタイマapiで実現する.
ここでSimonLiuは、2つのタイマを使用して情報を印刷しながら、インスタンスtimertest(ソースコードの表示とダウンロードをクリック)を書き直した.
1.yloop非同期フレームワークによるタイマーの実現
実際、helloworldルーチンとSimonLiuのGPIO_LEDルーチンとUARTルーチンでは、yloop非同期フレームワークを使用して、タイミング実行のいくつかの関数を実現しています.このインスタンス・コードは次のとおりです.
int application_start(int argc, char *argv[])
{
/*     */                         

    aos_post_delayed_action(1000, printMessage, NULL);
    
    aos_loop_run();

    return 0;
}
}

メインプログラム入口application_startでこのことをしました.
  • 呼び出しaos_post_delayed_actionは、1000ミリ秒の使い捨てタイマー(Yloopには使い捨てタイマーしか入っていない)を作成し、1000ミリ秒後にprintMessage()を実行します.
  • 呼び出しaos_loop_runは、イベントループ
  • に入る.
    1秒後、タイマーがトリガーされ、printMessage()が呼び出され、printMessage()の中で2つのことが行われました.
    static void printMessage(void *arg)
    {
        printf("[%06d]messager from  yloop\r
    " ,(unsigned)aos_now_ms()); aos_post_delayed_action(1000, printMessage, NULL); }
  • 印刷情報
  • は、printMessage()を実行するまで1000ミリ秒のタイマを再作成します.これにより、printMessage()を実行するたびにタイマが作成され、1000ミリ秒後に実行され、タイマが実現されます.

  • 2.AliOS Things kernel apiによるタイマーの実現
    AliOS Thingsのkernel api : AliOS Things API KERNEL Guideには、タイマに関する関数がリストされています.
    aos_timer_new
    aos_timer_free
    aos_timer_start
    aos_timer_stop
    aos_timer_change
    
    ESP8266 non_os SDKをよく知っている人は、その中のタイマーに慣れていないはずです.AliOS Thingsのタイマーapiの使用方法とESP8266 non_os SDKのタイマーの差は多くありません.手順は以下の通りです.
  • タイマ変数
  • を宣言する
  • 宣言タイマコールバック関数
  • タイマコールバック関数は
  • を実現する.
  • タイマ
  • を作成する.
  • 起動タイマ
  • //         
    aos_timer_t timer1; 
    
    //         
    void timer1_cb(void); 
    
    //         
    void timer1_cb(void)  
    {
        printf("[%06d]messager from  timer\r
    " ,(unsigned)aos_now_ms()); }

    次に、メイン・プログラム・エントリでタイマーを作成して起動します.
       //     
        aos_timer_new(&timer1, timer1_cb, NULL, 1000, 1);   
        //     
        aos_timer_start(&timer1);