embeded device에서 timer 구현하기

cleo8131의 이미지

어떤 동작을 하는 중에 1분 정도 delay를 주고 그 후에 나머지 동작을 수행하도록 하려고 합니다.
이런 부분이 여러개 있는데 단순히 for문으로 1분 delay를 주면 cpu를 점유하게 되고,
for 문 동작 중에 interrupt같은 게 못 뜰수도 있을 것 같아서 고민이 됩니다.

timer로 1분 주고 1분 후에 interrupt가 뜨는 식으로 해야 될까요?
그럼 timer 를 주어야 되는 부분별로 함수를 나눠야 되는 것인지..

좋은 방법이 없는지 궁금합니다.

tyhan의 이미지

http://hooneyo.tistory.com/entry/실행지연
http://poplinux.tistory.com/122

리눅스 커널안에서는 기본적으로 schedule_timeout() 를 사용하여 프로세스 스케줄링을 일정시간동안 당하지 않게 합니다.
그러나 컨텍스트 스위치하는 시간이 아까울 정도로 짧게 쉬는 경우는 busy loop을 이용합니다.

- 추가 -
* 아 저는 리눅스를 생각했는데 MCU인가요??

jic5760의 이미지

TIMER_INTTERRUPT(1sec)
{
 if(g_timer > 0)
   g_timer--;
}
 
 
 
loop()
{
 switch(g_step)
 {
 case 0:
  samething();
  g_step++;
  g_timer = 60;
  break;
 case 1:
  if(g_timer == 0)
   g_step++;
 case 2:
  ....
  break;
 }
}

대충.. 이런식?

* 아 저는 MCU을 생각했는데 리눅스인가요??

bushi의 이미지

>
> 단순히 for문으로 1분 delay를 주면 cpu를 점유하게 되고,
>

multi tasking 환경이 아니라면 CPU 점유를 따지는 의미가 없으므로 고민할 필요 없습니다.
multi tasking 환경이라면 이미 잘 구현된 타이머 설비가 반드시 있을것이므로 가져다 쓰세요.

>
> for 문 동작 중에 interrupt같은 게 못 뜰수도 있을 것 같아서 고민이 됩니다.
>

인터럽트를 금지시키고나서 그 다음에 for 문 동작시키는 것이라면 확실히 인터럽트는 뜨지 않으며,
인터럽트를 금지시키지 않고 그냥 for 문 동작시키는 것이라면 확실히 인터럽트는 뜹니다.
고민하지 않으셔도 됩니다.

cleo8131의 이미지

답변 감사합니다.
리눅스가 아니라 MCU입니다.
멀티태스킹 환경이라서 구현된 타이머를 한번 찾아볼게요..

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.