Fórum para discussão sobre Linux para processadores ARM
Moderadores: 51, guest2003, Renie, gpenga
por 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
por 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
por 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
por helton » 13 Jul 2007 16:40
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