임베디드환경에서 개발중 에러발생시...
글쓴이: ana0518 / 작성시간: 목, 2010/11/18 - 12:51오전
안녕하세요 피처폰 개발중 문득 궁금한 사항이 있어서 이렇게 질문을 올리는데요
일반적으로 pc환경에서 프로그램을 만들때에는 에러가 발생할 경우 프로그램이 종료되고 마는데
피처폰이나 일반 임베디드 환경에서는 왜 프로그램을 만들때에 에러가 발생하면 리붓이 되는 것일까요? ^^;
임베디드환경의 커널에서는 erro발생시 처리를 해주지 않아서인가요?
아니면 독립적으로 프로세스를 할당하지 못해서일까요?
그냥 막연하게는 그려러니 생각이 들지만서도 명확하게 이유를 알고 싶네요..
많은 고수님들 답변 부탁드립니다.
Forums:
watchdog 같은걸 해두신건 아닌지.. 보통 에러
watchdog 같은걸 해두신건 아닌지..
보통 에러 내고 뻗어버리는 경우만 봐서..
------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.
watchdog이 아니고요
watchdog이 아니고 예를 들어 memory access를 잘못했을 경우에요..
heap으로 10byte를 할당하고 100byte를 쓴다는 식의 그런 에러의 경우에요..^^;
watchdog 은 h/w 입니다. s/w 가
watchdog 은 h/w 입니다.
s/w 가 주기적으로 리셋시켜주지 않으면 CPU를 h/w reset 해버리죠.
어딘가의 어떤 에러로 인해 s/w 가 동작을 멈추게 되면, 얼마 후 CPU 는 reset 되어 버립니다.
이게 watch-dog 입니다.
watchdog의 경우
제가 알기로 watchdog에 의한 reset은 kick을 해주지 않아 발생하는 것으로 알고 있고요
제가 위에서 예를 든것처럼 memory access오류가 발생하였을 경우 발생하는 reboot을 말하는 것입니다.
pc환경에서 개발할 경우(window application같은) memory access를 잘못 하였을 경우에는 window가 리붓되지 않고 해당 프로세스만 죽고 오류화면 나오는 정도인데
임베디드 환경에서는 왜 reboot이 되는 것인지가 궁금한 것이지요 같은 이유로 에러가 발생했을 경우..
임베디드 환경의 OS에서(단말환경에서의 REX kernel같은) 해당 error에 대해 따로 handling을 하지 않는 것인가 싶어서요..
커널과 응용프로그램이 분리되어 있다면, 응용프로그램의
커널과 응용프로그램이 분리되어 있다면, 응용프로그램의 에러는 응용프로그램의 에러로 끝납니다. 일반적으로는요.
kick 은 누가 할까요? 보통 SW에서 주기적으로
kick 은 누가 할까요? 보통 SW에서 주기적으로 kick 을 해줘야 합니다. 메모리 access 잘못해서 시스템이 모두 멈추면 당연히 kick 을 못하니까 reset 이 걸리겠죠. 간혹 kick 하는 코드가 아직 살아서 계속 kick 을 한다면 꺼지지는 않겠죠.
그건 하기나름입니다.
app 같은데서 간단하게 segmentation fault 같은게 난다고 해서 리붓이 되지는 않겠지요.
다만 그런 에러가 났을 경우 reboot이 되도록 해놓을수는 있습니다.
그러니깐 제 말은 임베디드 환경이라서 해서 에러가 나면 무조건 리붓이 된다는 아니다라는 겁니다.
디버깅을
윗분들이 말씀하신것처럼 대부분의 경우는 와치독때문입니다.
즉, 리셋되기 전에... 이미 님의 소프트웨어 구동상태는 엉망이 된 것입니다.
왜, 또는 어디서 어떻게 된건지 보시려면
jtag으로 0x00000000에 break 걸고 해 보시면 아실 겁니다.
LR를 보시던지... watch dog의 register를 보시던지....
댓글 달기