1. This forum section is a read-only archive which contains old newsgroup posts. If you wish to post a query, please do so in one of our main forum sections (here). This way you will get a faster, better response from the members on Motherboard Point.

Want a 1ms tick from Linux without modifying Linux Kernel

Discussion in 'Embedded' started by Like2Learn, Dec 7, 2010.

  1. Like2Learn

    Like2Learn Guest

    I need to develop an embedded application running on Linux, to be more
    specific, Wind River Linux 4.0 is my favorite for now. My application
    requires a timer, or scheduler, which is required to tick my
    application for about every 1ms. I say "about" because there is no
    strict timing requirements, and either 1.01ms or 0.98ms would be
    acceptable. In my application, written in C++, I will implement
    OBSERVER pattern and Listener paradigm to get a full-featured
    scheduler to dispatch events to processes at variable rates, say 5ms,
    10ms, etc.

    I would like to know if I can accomplish the above design without
    modifying the linux kernel, since under GPL, having a kernel module in
    my application will cause my application to be GPLed. At this moment I
    don't want to go that far yet. If there is something in the kernel
    already available, and can tick my application every 1ms, I would like
    to use it directly in my application. I hope this way will save me
    from the GPL license issue. Any thoughts? Thank you in advance!
     
    Like2Learn, Dec 7, 2010
    #1
    1. Advertisements

  2. Like2Learn

    Cesar Rabak Guest

    Em 6/12/2010 22:33, Like2Learn escreveu:
    [snipped]ยน

    this version of Linux has HRTs what are the resolutions available?
     
    Cesar Rabak, Dec 7, 2010
    #2
    1. Advertisements

  3. Like2Learn

    Dennis Guest

    If it is close to standard Linux check the timer resolution. If it will
    handle 1ms resolution use setitimer() and handle the SIGALRM signal when
    it expires. If you just want to wait use nanosleep()

    The base time unit is 1usec but actual implementations may be more
    coarse than that.
     
    Dennis, Dec 7, 2010
    #3
  4. Like2Learn

    Arlet Ottens Guest

    No, applications running on top of a linux kernel do not have to be GPL,
    and it doesn't matter if you've modified the linux kernel, or added a
    kernel module.

    Anyway, before you start modifying the kernel, check out setitimer(), poll
    () or select().
     
    Arlet Ottens, Dec 7, 2010
    #4
  5. Like2Learn

    Like2Learn Guest

    This sounds a good solution since I don't have to poll the timer with
    the SIGALRM signal. Thanks!
     
    Like2Learn, Dec 7, 2010
    #5
  6. SIGALRM is what you do it you *don't* want to poll the timer.
    You do need to use the advanced sigaction API though, not just signal(),
    or you change the semantics of other system calls that might be running.

    nanosleep works fine if you don't need to be doing anything else while
    waiting for the time to expire.

    Remember that you will miss ticks (be activated late, etc), so if you
    want to avoid accumulating timing errors, you need to check gettimeofday
    each time you pause to decide how long to sleep.

    Clifford Heath
     
    Clifford Heath, Dec 8, 2010
    #6
  7. Like2Learn

    Like2Learn Guest

    How about epoll or epoll_wait? It will trigger a signal after timeout.
    I am not sure if it is based on the polling mechanism, if so I won't
    touch it. I think polling takes more resource and slow down the
    performance 9possibly I am superstitious). I am actually looking for a
    software interrupt-like.
     
    Like2Learn, Dec 9, 2010
    #7
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.