안녕하세요
졸작을 준비중인 이경준이라고 합니다.
이솝보드에 관한 사항이 아닌데 이렇게 올려도 실례가 안되는지 모르겠네요.
저기.. 졸작때문인데요.. ㅠㅠ
uCOS + uCTCPIP로 졸작을 준비하는중 원인을 도저히 알수가 없어서 헤메던중 고도리 형님 및 여기 운영자분들이 RTOS 많이 해보셨다는게 기억나서 찾아왔습니다.
저희 작품은 부트로더인데요 전원을 인가하자 마자 특정 서버 아이피로 TCP/IP 접속을 시도 하는데요
한 40%의 확율로 접속이 됩니다. --;;
net_err = Net_Init();
if(net_err != NET_ERR_NONE)
{
Printf("Net_Init() failed.n");
}
3 초동안 루프를 돌며 사용자가 키입력을하면 App_InitTCPIP 함수 호출
App_InitTCPIP(); // MAC 및 IP 세팅
// 그리고 접속 시도..
conn = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
저 connect 함수에서 계속 무한정 멈춰있거나 아니면 40%확율로 성공입니다.
그래서 connect 함수의 timeout 을 한 1초정도로 주고 루프를 돌면서 접속 될때까지 계속 돌렸더니... 안되는 경우에는 계속 무한 루프 돕니다. ㅠ.ㅠ
while(conn == -1)
{
conn = connect(sock, (struct sockaddr*)&serv_addr, sizeof(serv_addr));
Printf(".", timeout--);
if(timeout == 0)
{
Printf("n Failed.n");
close(sock);
return;
}
}
아마도 전원이 인가되었을때 뭔가가 잘되었다면 잘접속이 되고 뭔가가 잘되지 않았다면 계속 접속이 안되는것같습니다.
net_err = Net_Init();
이 함수인가... 해서 접속이 안되면 다시 Net_Init을 호출하도록 했는데 Net_Init을 또 다시 호출할경우 net_err 가 납니다.
이런 경우에 어떻게 해볼수 있을까요? 고수님들도 이러한 경험이 있으실꺼같습니다.
고수님들의 값진 경험을 좀 나누어 주세요. ㅠ.ㅠ
읽어주셔서 감사합니다.
좋은하루되십시요.
ethernet chip의 컨넥터에 둘 다 불이 들어옵니까?
즉, link led(링크 okay)와 속도 led 가 둘 다 들어오는 경우인지요?
제 생각엔 둘 다 불이 안들어오거나, 아니면 속도 led에 불이 안 들어올겁니다.
첫번째의 경우는 ethernet쪽의 mac혹은 phy가 reset이 안되었음
두번째의 경우는 auto negotiation의 fail
물론 두번째의 경우는 auto negotiation을 지원하는 칩의 경우에 한해서고요.
두가지 경우인지만 파악되면 답은 의외로 쉬울 듯 하네요...^^