<C言語入門/車載ソフト> while文
こんにちは、レオハルです。
車載ソフトで利用するC言語入門シリーズ「while文」です。
※通常のC言語解説とは、異なり組込み・車載ソフトに特化した記載があります。ご注意ください。
基本的な使い方
今回は、C言語の「反復」を実現する1つであるwhile文です。
同じ処理を複数回繰り返し実行するために使う構文になります。
「反復」を実現できるもう一つの構文にfor文があります。大体の参考書では、for文が先に紹介されているかと思いますが、組込み・車載ソフトをメインとしている自分はwhile文を先に紹介したいと思います。
まず、while文の使い方は、以下のようになります。
while( 条件式 ){
実行処理;
}
条件式が「真」の間、{ }内の処理が実行されます。
while文では、条件式の判定がまず行われます。そのため、最初から条件式が非成立の場合には、{ }内の処理は、一回も実行されないまま、処理を終えることもあります。
組込みに必要な無限ループの実現方法:while(1)
車載ソフトを含めた組込みソフトの場合、電源投入後は、電源が切られるまでずっとプログラムが実行されている必要があります。これを実現するために、無限ループが用いられ、while(1)で記述されてるのをよく見ます。使い方の中でも説明しましたが、条件が「真」の場合、ループが繰り返されます。「真」というのは、イコール1であることを示します。なので、while(1)の記述では、ずっとループを抜けることはなくなるわけです。
while文を利用したLチカサンプルプログラム
while文、while(1)を利用した、サンプルプログラムを示してみます。
/* 関数プロトタイプ宣言 */ static void vos_wait_TimrCnt( void ) ; /* グローバル変数定義 */ u1 u1g_output_LED ; /* メイン関数 */ void vog_main( void ){ u1g_output_LED = 0 ; /* メインループ */ while(1){ /* 待機関数 */ vos_wait_TimrCnt() ; /* LED反転 */ if( 0 == u1g_output_LED ){ u1g_output_LED = 1; } else{ u1g_output_LED = 0 ; } } } /* 待機関数 */ static void vos_wait_TimrCnt( void ) { u2 u2a_cnt ;
u2a_cnt = 0 ; while( u2a_cnt <= 1000 ){ u2a_cnt++ ; } }
上記プログラムは、一定時間毎にLEDの点灯・消灯を繰り返すプログラムをイメージして作成しています。
vog_main内には、while(1)で無限ループをつくっています。これにより、このwhile内の処理が電源が投入されている限りずっと続くようになっています。
vos_wait_TimrCnt内のwhile文では、u2a_cntが、1000を超えるまでループを繰り返し、ループ内で1ずつ加算する処理を行っています。
組込みの"Hello World"的なLEDチカチカ=Lチカをwhile文で試してみましょう!
C言語学習におススメの書籍
【C言語/プログラミング初心者の方】
【入門卒業レベルの方】
【組込み向け】