11-ESP8266SDK開発の基本はじめに-ソフトウェアとハードウェアのタイマー

https://www.cnblogs.com/yangfengwu/p/11094009.html

タイマーには、ソフトウェアタイマーとハードウェアタイマーの2種類があります。

ソフトウェアタイマーは内部のタスク遅延によって実装されるため、タイマーは実際には不正確です。

ハードウェアタイマーはハードウェア割り込みタイマーです、私たちは皆マイクロコントローラーを学びました、割り込みは正確です

 

最初にソフトウェアタイマーを見てください

 

 詳細は以下をご覧ください

したがって、最初のステップはタイマー変数を定義することです

あなたはこのファイルを見ることができます、このヘッダーファイルを使いましょう

 

 

 os_timer_t os_timer_one; //グローバルタイマー構造変数を定義する

 

 

 

 

 

パラメータを見てみましょう

 

 

 

void * XXXは、任意のポインター変数を受け取ることができることを意味します

 

コードをコピーする

//タイマーのコールバック関数を定義します
voidos_timer_one_function(void * parg)
{ 
    printf( "parg:%s \ n"、parg); //渡されたパラメーターを
    出力しますGPIO_OUTPUT_SET(5、1-GPIO_INPUT_GET(5)); // GPIO5出力反転
}

コードをコピーする

 

 

os_timer_setfn(&os_timer_one、os_timer_one_function、 "yang"); //コールバック関数に渡されるタイマータイマー構造変数コールバック関数パラメーターを構成します
    os_timer_arm(&os_timer_one、500,1); //タイマーを有効にしますos_timer_one--タイマー変数500--500ms入力します1回1-サイクルイン

 

 ダウンロード

500msオン500msオフ

 

 

実際、このパラメータは

os_timer_setfn(&os_timer_one、os_timer_one_function、 "yang");
この時点で渡されますが、ローカル変数の値がyangに設定されている場合を除いて、今回のみ渡されます。このパラメーターは、後で割り込みが入力されたときに設定されません。

 

 

 

パラメータなしでは話さない

誰もが自分でテストします。エラーを報告する場合は、公式の最下層がどのように書き込むかによって異なります。

 

 

 

 次に、ハードウェア割り込みタイマーを見てください

 

 

 

 

 

 

 

 

それから...当局者は例を挙げました

 

 

コールバック関数を少し変更してみましょう

 

 

 

 

 

 プログラムがハングします...実行できません、常に=再起動します

 

それから私は置きます

 

 プログラムはまた良いです

このタイマーは私たちレベルのタイマーだと思います

1000のみ1ms

1msに1回実行printfprintfはまだ実行を終了しておらず、割り込みが再び到着したため、プログラムがクラッシュしました

 

 

コードをコピーする

u32 cnt = 0; 
void hw_test_timer_cb(void)
{ 
    cnt ++; 
    if(cnt> 1000)
    { 
        cnt = 0; 
        printf( "1111111111111:%s \ n"); //打印
    } 
}

コードをコピーする

 

 

 

 

 

 

 

 忘れました..削除し忘れたのに%sを追加したのはなぜですか

 

 

 

 

 https://www.cnblogs.com/yangfengwu/p/11100552.html

おすすめ

転載: blog.csdn.net/qq_14941407/article/details/93985223