usleep을 이용해서 간단하게 프로그램을 짰는데요...

leo~~~~의 이미지

안녕하세요~^^
제가 초보라 모르는게 많은데요
QnA 게시판에 질문 올릴때마다
답변해 주시는 분들 감사드립니다~
정말 KLDP 없었으면 어찌했을지....ㅡㅡ
다름이 아니구요.....
전에 타이머에대한 질문을 올렸을때
많은 분들이 sleep을 사용하라고 하셔서
usleep을 사용해서 했습니다...
근데 교수님꼐서 sleep은 정확한 시간이 아니라는데요...
그래서 타이머를 사용해서 하라고 하시더군요.....ㅡ,.ㅡ;;
타이머 사용법이 어떻게 되는지 알고 싶어서요....
시리얼 통신 프로그램이구요...
usleep써서 0.1초에 하나씩 시리얼을 통해
데이터를 보내는 프로그램입니다..
제가 usleep 이용해서 짠 프로그램 소스가 필요하다면
소스 올리라고 말씀해주세요~
허접한거지만....^^;;
그래두 실력을 늘리려면 그 정도 창피함(?)은
감수해야겠죠.....
부탁드립니다~

elien의 이미지

교수님께서 말씀하시는 타이머는 타이머 인터럽트가 아닐까 싶네요.
인터럽트의 사용방법은 개발환경마다 조금씩 차이가 있을 수 있습니다.
임베디드 보드를 이용하여 개발하신다면 보드의 매뉴얼 및 예제들을 살펴보시는 것이 좋을 것 같아요.
범용 프로세서에서도 인터럽트를 쓸 수 있을 것 같은데요, 그 방법은 잘 모르겠네요

훗, 못 믿겠나?

익명 사용자의 이미지

오차의 한계는 어디까지인가요?
오차는 작을수록 좋겠으나, 비실시간 운영체제에서 오차는 어쩔 수 없는 것입니다.

현재 시간 보고, 다음 시간까지 usleep()하여 코딩하는 것에도 오차가 있고,
다른 방법을 동원해도 오차는 있기 마련입니다.
적어도 시스템 호출하는데 걸리는 시간, 실제 시스템호출에 대한 처리시간, 리턴하는데 걸리는 시간, 또한 글로벌하게 컨텍스트 스위치하는데 걸리는 시간등이 그 오차로 작용할 것입니다.

* 동일 컴퓨터에서 테스트
setitimer()는 커널이 주기적으로 알람시그널을 유저프로세스에게 줍니다.(알람핸들러가 주기적으로 불리겠지요) 이경우에도, 시간을 찍어보면 수밀리초 오차가 발생함을 알 수 있습니다.(테스트 머신에 따라 차이가 있음)
=> 0.00xxxx

usleep()으로 코딩하면 약 수십밀리초 오차가 발생했습니다.
=> 0.0xxxxx

select()로 코딩하면 약 수백마이크로초의 오차가 발생했습니다.
=> 0.000xxx

* 결론:
- 비실시간 운영체제에서는 이와 같은 방법으로 코딩할 경우, 시간을 보정해 주는 루틴이 필수적이다.
- 실시간 운영체제를 검토해본다.(리눅스 변종도 있음)

* 참고 : 위 주제와 다소 차이 있으나, 분산된 장치들의 시간 동기화에서, 시간을 GPS장치로 부터 받는 방법이 있다. 시간 동기화에서는 현재 방법중 가장 훌륭하다고 알려진것으로 알고 있다(GPS살 돈 없음). 단, GPS수신가능위치(지하실? 건물 속?)에 안테나가 있어야 한다는...

익명 사용자의 이미지

음 우연인지 모르지만, 내가 예전에 올린 글이 있는 쓰레드에 비교적 빈번하게 이런 해괴한 댓글이 달리는 군요.
글올리지 말라는 경고인지... ㅎㅎ

아님 스토킹? ㅋㅋ

lifthrasiir의 이미지

Anonymous wrote:
음 우연인지 모르지만, 내가 예전에 올린 글이 있는 쓰레드에 비교적 빈번하게 이런 해괴한 댓글이 달리는 군요.
글올리지 말라는 경고인지... ㅎㅎ

아님 스토킹? ㅋㅋ

스팸봇입니다. 그나저나 너무 심각하네요 저거 -_-

- 토끼군

댓글 달기

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