임베디드환경에서 개발중 에러발생시...

ana0518의 이미지

안녕하세요 피처폰 개발중 문득 궁금한 사항이 있어서 이렇게 질문을 올리는데요

일반적으로 pc환경에서 프로그램을 만들때에는 에러가 발생할 경우 프로그램이 종료되고 마는데

피처폰이나 일반 임베디드 환경에서는 왜 프로그램을 만들때에 에러가 발생하면 리붓이 되는 것일까요? ^^;

임베디드환경의 커널에서는 erro발생시 처리를 해주지 않아서인가요?

아니면 독립적으로 프로세스를 할당하지 못해서일까요?

그냥 막연하게는 그려러니 생각이 들지만서도 명확하게 이유를 알고 싶네요..

많은 고수님들 답변 부탁드립니다.

nthroot의 이미지

watchdog 같은걸 해두신건 아닌지..
보통 에러 내고 뻗어버리는 경우만 봐서..

------식은이 처------
길이 끝나는 저기엔 아무 것도 없어요. 희망이고 나발이고 아무 것도 없어.

ana0518의 이미지

watchdog이 아니고 예를 들어 memory access를 잘못했을 경우에요..
heap으로 10byte를 할당하고 100byte를 쓴다는 식의 그런 에러의 경우에요..^^;

bushi의 이미지

watchdog 은 h/w 입니다.
s/w 가 주기적으로 리셋시켜주지 않으면 CPU를 h/w reset 해버리죠.
어딘가의 어떤 에러로 인해 s/w 가 동작을 멈추게 되면, 얼마 후 CPU 는 reset 되어 버립니다.
이게 watch-dog 입니다.

ana0518의 이미지

제가 알기로 watchdog에 의한 reset은 kick을 해주지 않아 발생하는 것으로 알고 있고요
제가 위에서 예를 든것처럼 memory access오류가 발생하였을 경우 발생하는 reboot을 말하는 것입니다.
pc환경에서 개발할 경우(window application같은) memory access를 잘못 하였을 경우에는 window가 리붓되지 않고 해당 프로세스만 죽고 오류화면 나오는 정도인데
임베디드 환경에서는 왜 reboot이 되는 것인지가 궁금한 것이지요 같은 이유로 에러가 발생했을 경우..
임베디드 환경의 OS에서(단말환경에서의 REX kernel같은) 해당 error에 대해 따로 handling을 하지 않는 것인가 싶어서요..

bushi의 이미지

커널과 응용프로그램이 분리되어 있다면, 응용프로그램의 에러는 응용프로그램의 에러로 끝납니다. 일반적으로는요.

asiawide의 이미지

kick 은 누가 할까요? 보통 SW에서 주기적으로 kick 을 해줘야 합니다. 메모리 access 잘못해서 시스템이 모두 멈추면 당연히 kick 을 못하니까 reset 이 걸리겠죠. 간혹 kick 하는 코드가 아직 살아서 계속 kick 을 한다면 꺼지지는 않겠죠.

ydgoo의 이미지

app 같은데서 간단하게 segmentation fault 같은게 난다고 해서 리붓이 되지는 않겠지요.

다만 그런 에러가 났을 경우 reboot이 되도록 해놓을수는 있습니다.

그러니깐 제 말은 임베디드 환경이라서 해서 에러가 나면 무조건 리붓이 된다는 아니다라는 겁니다.

drinkme의 이미지

윗분들이 말씀하신것처럼 대부분의 경우는 와치독때문입니다.
즉, 리셋되기 전에... 이미 님의 소프트웨어 구동상태는 엉망이 된 것입니다.

왜, 또는 어디서 어떻게 된건지 보시려면
jtag으로 0x00000000에 break 걸고 해 보시면 아실 겁니다.
LR를 보시던지... watch dog의 register를 보시던지....

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.