電子工作日記、その他

趣味の電子工作製作の記録、その他思った事

warningをとる(外す)には

2012-04-16 05:33:29 | 日記
../ADCm328P.c:231:1: warning: control reaches end of non-void function

warning:が出るのですが、どの様にしたらとれますか?

mainの中にb16toLED();を記述すると、とれるのですが。

int b16toLED()
{
unsigned char tbup,tblow,msk,n;
msk = 0x01;

tbup=0xAA; tblow=0x55;

for(n=0;n<8;n++)// 0 1 2 3 4 5 6 7
{
tblow = tblow>>n;//0111 0111-->0011 1011

if(tblow &= msk)
{
PORTB |= _BV(0);//b0=1

PORTB &= ~_BV(1);//Clk ↓
PORTB |= _BV(1); //Clk ↑
}
else
{
PORTB &= ~_BV(0);//b0=0

PORTB &= ~_BV(1);//Clk ↓
PORTB |= _BV(1); //Clk ↑
}
tblow = tblow >> 1 ;
}//n=0 --> n<8
}

//***************************
int main(void)
{

port_init();//

unsigned int BADC0,BADC1,BADC2,BADC3,BADC4,BADC5;
//------------------------------------

while(1)
{

while( (ADCSRA & 0x40) != 0 );// Wait Conversion End (ADSC=0 ?) 0b0100 0000

ADMUX = 0x00;// REFS1 REFS0 ADLR ----- MUX3_ MUX2_ MUX1_ MUX0_ ref=AREF ADLR=0(Right)

_delay_us(1);

ADCSRA = 0xC0;// ADEN_ ADSC_ ADATE ADIF_ ADIE_ ADOS2 ADPS1 ADPS0 ADEN=1,ADSC=1 ADC0 Start ADC

while( (ADCSRA & 0x40) != 0 );// Wait Conversion End (ADSC=0 ?) 0b0100 0000

//* ADSC=0 *
BADC0 = ADC;

b16toLED();
}
}


最新の画像もっと見る

28 コメント

コメント日が  古い順  |   新しい順
Unknown (gcc)
2012-04-16 09:21:32
warning: control reaches end of non-void functionでネット検索しましょう。
返信する
Unknown (gcc)さん ありがとう (kawana)
2012-04-16 10:03:25
解りました。
返信する
16bitLED表示器のメドが立った (kawana)
2012-04-17 09:14:17
Warning外しにおかげさまで成功したので、
Codingしdebugしている。
74HC595を2個使用した。Latchの組み込みを忘れていたのでCodeを追加した。
どんなERRORが出るか?これの解決が醍醐味かも知れない。
返信する
32.768KHz+74HCU04 OSC (kawana)
2012-04-17 09:53:26
何度も製作し、質問をして顰蹙をかっていた事
思い出すが、電源ON直後の安定度に問題が
有る事が解った。
32.768KHz--74HCU04--74LS393--74LS393--LED
配線は、長いし、C=22Pで大きい、Xtalの固定
ア-ス無しなので作りかえる事にした。

FREQUENCY COUNTERで計ると+10KHz位を表示している事も有る、
(FREQUENCY COUNTERも電源ON直後、1年も前に校正しただけ)

発振回路
http://www.tamadevice.co.jp/pdf/32.768KHz-osc-circuit(revA).pdf
返信する
Unknown (k)
2012-04-18 10:40:10
Warningを話題にして、解決したなら
 なぜ出たのか
 どういう意味だったのか
 どうしたら解決したのか
を書いてください。
それが公開の意味ではないでしょうか。
「わかりました。解決しました。」だけでは自己本位過ぎないでしょうか。
返信する
Unknown (k)さんご意見有難う (kawana)
2012-04-18 11:56:11
私は、感謝の意で有難う、解決しました。の
返礼で由と考えていましたが、自己本位過ぎの考えは、思い浮かびませんでした。いたらなさ
すみません。

下記に回答致します。
何故出たか
Subroutineの最後にreturn 0;が無かった。

どういう意味だったか
Subroutineの処理の結果をmainに渡して完結するが、結果0を渡していず、suburoutineが終了
していない。(少し表現が悪い?グロ-バル変数使用?)

どうしたら解決したか
return 0;を追加記述した。
おおざっぱに、この様に考えています。
返信する
Unknown (k)
2012-04-18 14:10:09
return 0;を返すことでwarningが出なくなり解決したこと、了解しました。
でも、b16toLED()はそもそも何かを返す必要のあるfunctionなのでしょうか。
返信する
Unknown (k)
2012-04-18 15:19:17
わかりました。

Cのサブルーチンは関数です。
関数へは通常はデータを渡して結果の値を受け取るので、int型、char型などになります。
数値を渡さず、LED点灯などの動作をするだけでは戻り値が不要ですから、サブルーチンの型を「何も戻さない」void型とするのが普通のように思います。
返信する
b16toLED() ? (kawana)
2012-04-18 15:29:59
b16toLEDは、debug用として、mainで数回使用を
考え、subroutineとした。functionでは無く
単純に8(16)bitdataをLED表示するため。
void b16toLED(void または、dbuf)と
すれば、良かったかも知れない。後で
TESTしてみます。
返信する
void b16toLED() (kawana)
2012-04-18 15:59:45
void b16toLED()でreturn 0;を削除しても
Warning無しに成りました。
返信する

コメントを投稿