このコードを書く際に問題があります。私は機能から戻ることにあまり慣れていない。これらの関数の中には、「すべてのパスが値を返すわけではありません」というエラーがあります。
私はz8 Encoreマイクロコントローラを使用してコード化しようとしています。これは、ディップ、スイッチ、およびブレッドボードを介してLEDに接続しています。
基本的に私はZ8ボード上のテストスイッチを押すと、各機能にアクセスし、LEDに1つのカウント出力をインクリメントするようにコードを書こうとしています。
どこが間違っているのか分かりません。私のコンパイラは、button_pushed
、pushed_button
、released_button
に「すべてのパスが値を返すわけではない」と伝えています。誰かが私を助けることができれば、それは非常に高く評価されるだろう!
#include <ez8.h>
#include <STDIO.H>
unsigned char pushed_button();
unsigned char released_button();
unsigned char dip;
void init_ports();
void button_pushed();
void mydelay(unsigned int msec);
void main()
{
char count=0;
init_ports();
while(1)
{
dip=PDIN;
button_pushed();
PEOUT=count;
count++;;
return (0);
}
}
void button_pushed()
{
unsigned char pushed_button;
pushed_button=PCIN;
pushed_button=pushed_button & 0x01;
while(pushed_button==0x00)
{
return (0);
}
}
unsigned char pushed_button()
{
unsigned char pushed_button;
pushed_button=PCIN;
pushed_button=pushed_button & 0x01;
while(pushed_button==0x01)
{
button_pushed();
}
if(pushed_button==0x00)
{
mydelay(2);
}
if(pushed_button==0x00)
{
return (0);
}
}
unsigned char released_button()
{
unsigned char pushed_button;
pushed_button=PCIN;
pushed_button=pushed_button & 0x01;
while (pushed_button==0x00)
{
button_pushed();
}
if(pushed_button==0x01)
{
mydelay(2);
}
while(pushed_button==0x01)
{
return (0);
}
}
void mydelay (unsigned int msec)
{
long int delay;
while(1)
{
for(delay=266666;delay>0;delay--);
}
}
void init_ports(void)
{
PEADDR=0x02;
PECTL=0x00;
PEADDR=0x01;
PECTL=0x00;
PEADDR=0x03;
PECTL=0x00;
PEADDR=0x00;
PDADDR=0x02;
PDCTL=0x00;
PDADDR=0x01;
PDCTL=0xFF;
PDADDR=0x00;
PCADDR=0x02;
PCCTL=0x00;
PCADDR=0x01;
PCCTL=0x01;
PCADDR=0x00;
}
あなたのコンパイラは何が間違っているかを正確に伝えています。これら3つの関数はすべて、値を返すように指定します。たとえば、 'button_pushed'の中で' pushed_button == 0x00'の最初の反復がfalseに評価された場合、プログラムは何の値も返さずに関数の最後にヒットする可能性があります。 – David
Davidに感謝します。 0x00の値は、プログラムの実行中に表示されないことを意味します。私は "0x01"でプッシュボタンをマスクし、戻り値が "0x00"であれば、 "mydelay"関数を呼び出してこのステートメントを繰り返してから、 "released_button"関数を呼び出してください。 – Nman
'char main()'。本当に?????また、 'while'ステートメントを使用すると、ループ本体に' return'ステートメントだけが含まれているときに、難読化が不要になります。単純な '' if''が行います。 – Peter