이 코드를 작성하는 데 문제가 있습니다. 나는 함수에서 돌아 오는 것에 익숙하지 않다.일부 함수에서 "모든 경로가 값을 반환하지 않습니다"라는 오류가 있습니다 - 해결 방법은 무엇입니까?
저는 브렌드 보드를 통해 dip, switch 및 led가 인터페이스 된 z8 Encore 마이크로 컨트롤러로 코드를 작성하려고합니다.
기본적으로 Z8 보드의 테스트 스위치를 누르면 각 기능에 액세스 한 다음 LED에 단일 카운트 출력을 증가 시키도록 코드를 작성하려고합니다.
어디서 잘못 될지 잘 모르겠습니다. 내 컴파일러는 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;
}
컴파일러가 무엇이 잘못 되었습니까? 이 세 함수는 모두 값을 반환하도록 지정합니다. 예를 들어'button_pushed'에서'pushed_button == 0x00'의 첫 번째 반복이 false로 평가되면 프로그램은 아무 값도 반환하지 않고 함수의 끝에 도달 할 수 있습니다. – David
데이비드에게 감사드립니다. 0x00 값은 프로그램이 실행되는 동안 볼 수 없다는 의미입니다. 푸시 버튼을 "0x01"로 마스크하고 반환 값이 "0x00"인 경우 "mydelay"함수를 호출 한 다음이 문을 반복하고 "released_button"함수를 호출합니다. – Nman
'char main()'. 정말????? 또한'while' 문을 사용하면 루프 본문에'return' 문만 포함될 때 불필요한 난독 화가 발생합니다. 간단한''if''가 할 것입니다. – Peter