../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();
}
}
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();
}
}
Codingしdebugしている。
74HC595を2個使用した。Latchの組み込みを忘れていたのでCodeを追加した。
どんなERRORが出るか?これの解決が醍醐味かも知れない。
思い出すが、電源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
なぜ出たのか
どういう意味だったのか
どうしたら解決したのか
を書いてください。
それが公開の意味ではないでしょうか。
「わかりました。解決しました。」だけでは自己本位過ぎないでしょうか。
返礼で由と考えていましたが、自己本位過ぎの考えは、思い浮かびませんでした。いたらなさ
すみません。
下記に回答致します。
何故出たか
Subroutineの最後にreturn 0;が無かった。
どういう意味だったか
Subroutineの処理の結果をmainに渡して完結するが、結果0を渡していず、suburoutineが終了
していない。(少し表現が悪い?グロ-バル変数使用?)
どうしたら解決したか
return 0;を追加記述した。
おおざっぱに、この様に考えています。
でも、b16toLED()はそもそも何かを返す必要のあるfunctionなのでしょうか。
Cのサブルーチンは関数です。
関数へは通常はデータを渡して結果の値を受け取るので、int型、char型などになります。
数値を渡さず、LED点灯などの動作をするだけでは戻り値が不要ですから、サブルーチンの型を「何も戻さない」void型とするのが普通のように思います。
考え、subroutineとした。functionでは無く
単純に8(16)bitdataをLED表示するため。
void b16toLED(void または、dbuf)と
すれば、良かったかも知れない。後で
TESTしてみます。
Warning無しに成りました。