Printf e interrupção de TIMER

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Printf e interrupção de TIMER

Mensagempor itamar » 10 Abr 2011 10:05

Caros amigos, me desculpem pela ignorância mas não entendo o motivo de não poder utilizar Printf ou putc dentro de uma interrupçao. Toda vez que faço isso, não compila por falta de memória .
Help.
itamar
Nibble
 
Mensagens: 61
Registrado em: 24 Dez 2010 10:21

Re: Printf e interrupção de TIMER

Mensagempor andre_luis » 10 Abr 2011 12:28

A taxa de interrupção deve estar superior ao Baud-Rate da UART.

O printf é uma API pronta de uma biblioteca standard do C que eu particularmente não gosto. Prefiro manipular o putc byte-a-byte.

Isso porque o printf segura o processamento do uC num loop infinito enquanto não terminar de enviar a string.

De qualquer modo, voce pode estar até com algum outro problema, como desde algum eventual limite do compilador dependente de licensa, ou como até falta de espaço realmente, devido ao tamanho do código e da quantidade de veriáveis empregadas.

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: Printf e interrupção de TIMER

Mensagempor barboza » 10 Abr 2011 12:51

andre_teprom escreveu:A taxa de interrupção deve estar superior ao Baud-Rate da UART.

O printf é uma API pronta de uma biblioteca standard do C que eu particularmente não gosto. Prefiro manipular o putc byte-a-byte.

Isso porque o printf segura o processamento do uC num loop infinito enquanto não terminar de enviar a string.

De qualquer modo, voce pode estar até com algum outro problema, como desde algum eventual limite do compilador dependente de licensa, ou como até falta de espaço realmente, devido ao tamanho do código e da quantidade de veriáveis empregadas.

+++


Costumo usar a sprintf imprimindo em um buffer de saída e tratando este buffer na interrupção da serial, enviando byte a byte quando livre.

Ou o printf, com a putc() inserindo os bytes no buffer circular.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor Andre_Cruz » 11 Abr 2011 11:49

itamar,

Pelo que sei não pode chamar nem uma função dentro da rotina de interupção, não é só o printf !
Não me lembro o motivo vou ver se encontro e posto aqui !

Cosntumo usar flags dentro da interupção e trato fora dela os flags marcados.

Abraço

André Cruz
Andre_Cruz
Word
 
Mensagens: 559
Registrado em: 03 Jan 2009 14:06

Mensagempor barboza » 11 Abr 2011 13:16

Andre_Cruz escreveu:itamar,

Pelo que sei não pode chamar nem uma função dentro da rotina de interupção, não é só o printf !
Não me lembro o motivo vou ver se encontro e posto aqui !

Cosntumo usar flags dentro da interupção e trato fora dela os flags marcados.

Abraço

André Cruz



O problema com chamadas de funções dentro de interrupções é que interrupção deve ser rápida, retornando ao código principal o quanto antes.

Se você faz chamadas de funções dentro de interrupção, o tempo de latência da interrupção fica lento, devido a própria função chamada e os push e pop na stack com os retorno da função.

Se você chamada funções de API (printf) o problema fica pior, pois o printf chama n outras funções, o que fica mais lento ainda.

Se este tempo for maior que o intervalo que você configurou para a INT (timers) o seu programa trava, pois nunca consegue sair da INT.
Os homens mentiriam muito menos se as mulheres fizessem menos perguntas.
Avatar do usuário
barboza
Word
 
Mensagens: 948
Registrado em: 17 Out 2006 13:42
Localização: Longe de onde gostaria de estar

Mensagempor andre_luis » 11 Abr 2011 19:25

Andre_Cruz escreveu:...Cosntumo usar flags dentro da interupção e trato fora dela os flags marcados...


Poisé...essa orientação é tão recorrente por aqui que deveria até ter um tópico fixo.

:)

+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ


Voltar para PIC

Quem está online

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

x