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を追加したのはなぜですか