Linux Embarcado vs Timers

Fórum para discussão sobre Linux para processadores ARM

Moderadores: 51, guest2003, Renie, gpenga

Linux Embarcado vs Timers

Mensagempor backitow » 08 Jun 2007 11:18

Olá pessoal, sou novato na área de SO embarcados e estou com uma dúvida e espero que vocês possam me ajudar. Vou trabalhar com um Linux embarcado em um OMAP (ARM9 + DSP) e eu preciso que o ARM faça o debounce de alguns sinais de entrada digitais e para isso vou precisar configurar os timers. A minha dúvida é se eu consigo configurar os timers "por cima" do Linux para fazers os debounces. Eu consigo configurar prioridades para usar os timers para eu utiliza-los ao invés do Linux? Ou a outra maneira de fazer isso através do Linux mesmo?
Agradeço desde já.


[]'s
Thiago Back
backitow
 
Mensagens: 1
Registrado em: 21 Nov 2006 08:27
Localização: Curitiba - PR

Mensagempor Doglao » 13 Jul 2007 11:28

em sistemas embarcados o kernel toma conta de tudo o sugerido eh voce ler mais sobre a versao do linux e aplicar no seu caso, como ele eh multitarefa voce pode colocar as tarefas e impor as prioridades e tambem configurar interrupcoes com timers configurados e tudo vai ser gerenciado pelo kernel do linux
null
Doglao
Byte
 
Mensagens: 101
Registrado em: 12 Mai 2007 12:13
Localização: null

Mensagempor helton » 13 Jul 2007 12:20

Um teste que voce pode fazer ( em usermode) é utilizar o código abaixo...não sei bem se é a maneira certa de utilizar...
Código: Selecionar todos
//---------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/time.h>
#include <unistd.h>
#include <fcntl.h>
//---------------------------------------------------------------------------
void init_timer( void *handler );
static void timer_handler( int signo );
//---------------------------------------------------------------------------
int main( void )
{
   
    //timer handler ==========================
    init_timer( &timer_handler );
      
    while(1)
    {   
    }

    return 0;
}
//---------------------------------------------------------------------------
void init_timer( void *handler )
{
    struct itimerval value;
    struct sigaction sa_timer;
   
    //timer handler ==========================
    sa_timer.sa_handler = handler;   
    sa_timer.sa_flags = SA_RESTART;
    sigemptyset(&sa_timer.sa_mask);
    sigaction( SIGPROF, &sa_timer, NULL );
   
    value.it_interval.tv_sec = 0;
    value.it_interval.tv_usec = 10000;
    value.it_value = value.it_interval;
    setitimer( ITIMER_PROF, &value, NULL );   
}
//---------------------------------------------------------------------------
static void timer_handler( int signo )
{
    static unsigned int counter = 0x00;
    static unsigned int tmp_1s = 0;
   
    //insert your code here - time 10 ms   
           
   
    //1 second timer
    if ( tmp_1s > 0 ) tmp_1s--;
    else{
   tmp_1s = 99;
   fprintf(stderr,"counter: %d\n",counter++);
    }
}
//---------------------------------------------------------------------------


mas o ideal talvez é criar um /dev/timer0 ...através de um device driver...
o que não é muito difícil não...
[/code]
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC

Mensagempor helton » 13 Jul 2007 16:40

um ótimo link sobre device drivers está aqui:

http://www.captain.at/programming/rtai/parportint.php

att
Helton Marques
"Priorize as Prioridades"
helton
Byte
 
Mensagens: 146
Registrado em: 16 Out 2006 09:18
Localização: São José-SC


Voltar para Linux / uCLinux ( ARM ) / UNIX

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x