X5 보드와 컴퓨터 간의 통신 프로그램 구현 중, 오류가..
2009.02.19 07:16
소켓을 이용하여
보드와 컴퓨터 간에 서로 통신하고 클라이언트(컴퓨터)로 부터 받은 몇 가지 명령어를 서버(보드)가
수행하도록 프로그래밍 하였습니다.
터미널간 소통에서는 아무런 문제가 없었고, 또 다른 컴퓨터와의 소통에서도 문제가 없었는데,..
보드에서 실행을 시키면
몇 몇 명령어 실행시 보드 레지스터(?) 값으로 의심되는 수치들을 출력하면서 서버프로그램이 멈춥니다.
정확히 기억나지는 않지만
pc: 00000 sc:00000 r0: 00000000000 r1:000000000 .....
이런식으로,,
ARM의 레지스터와 카운터값 등을 출력하는거 같은데,,
왜 이런 현상이 나타나는지 모르겠네요 ;
답변 부탁드립니다.
(클라이언트에서 send()를 사용하여 서버로 전송해주고 서버는 받은 char buf를 분석, 어떤 명령어 인지 알아낸 후
보드 터미널 상에 출력, 내지는 클라이언트로 해당 정보를 다시 send()해주는 형태의 단순한 프로그램입니다.
비슷한 소스로 여러명이서 사용했는데요, 어느 명령어에서 그런 현상이 생기는 지도 정확히 같지가 않고, 심지어는
./server.x 로 실행하는 순간에 저러한 메시지를 출력하는 경우도 있었습니다.)
보드와 컴퓨터 간에 서로 통신하고 클라이언트(컴퓨터)로 부터 받은 몇 가지 명령어를 서버(보드)가
수행하도록 프로그래밍 하였습니다.
터미널간 소통에서는 아무런 문제가 없었고, 또 다른 컴퓨터와의 소통에서도 문제가 없었는데,..
보드에서 실행을 시키면
몇 몇 명령어 실행시 보드 레지스터(?) 값으로 의심되는 수치들을 출력하면서 서버프로그램이 멈춥니다.
정확히 기억나지는 않지만
pc: 00000 sc:00000 r0: 00000000000 r1:000000000 .....
이런식으로,,
ARM의 레지스터와 카운터값 등을 출력하는거 같은데,,
왜 이런 현상이 나타나는지 모르겠네요 ;
답변 부탁드립니다.
(클라이언트에서 send()를 사용하여 서버로 전송해주고 서버는 받은 char buf를 분석, 어떤 명령어 인지 알아낸 후
보드 터미널 상에 출력, 내지는 클라이언트로 해당 정보를 다시 send()해주는 형태의 단순한 프로그램입니다.
비슷한 소스로 여러명이서 사용했는데요, 어느 명령어에서 그런 현상이 생기는 지도 정확히 같지가 않고, 심지어는
./server.x 로 실행하는 순간에 저러한 메시지를 출력하는 경우도 있었습니다.)
댓글 4
-
장길석
2009.02.19 16:59
-
초보
2009.02.19 17:53
답변드립니다.
1. PC 에서 실행하였을때는 아무런 문제가 없었습니다.
2. 에러 발생하는 때가 고정적이지 않습니다. 제 생각엔 어떤 변수를 참조할 때 저런 에러가 뜨는게 아닌가,, 싶은데
범인으로 의심되는 놈들이 char 형 포인터 4개가 있습니다. -
오재경
2009.02.19 19:39
에러가 커널에서 나는 것인지 아니면 어플에서 나는 것인지 궁금합니다.
정확한 에러를 캡쳐해 보여주세요
ARM 코아에서 포인터 관련 주의점이 있습니다.
i386 에서는 int 형포인터의 값이 4바이트 정렬이 되있지 않아도 문제가 없지만
ARM 에서는 shot 형포인터나 int 형포인터의 값이 2바이트 또는 4바이트로 정렬이 되어 있어야 합니다. -
jace
2009.02.19 21:14
재경님
포인트 정렬이라는것이 포인터가 가르키는 메모리상의 주소를 말씀하시는건가요??
제가 사용하는 어플에도 포인터형을 쓰기때문에 의심이 가는군요..
저의 실력이 모자란탓에 좀더 구체적으로 설명해 주실수 있으신지요?^^




1. 타겟보드에서 실행하는 프로그램을 PC에서 실행했을 때 이상이 없는지요?
2. 에러 발생을 추적하여 어느 행에서 발생하는지 확인하시고,
에러가 발생한 행에서 어떤 명령을 수행하는지를 알아야 원인을 알 수 있습니다.
가장 간단한 방법으로 printf()를 이용하여 에러가 발생하는 행을 추적해 보시기를 권합니다.