Brincadeira de adulto F877A

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Brincadeira de adulto F877A

Mensagempor Vonnilmam » 14 Mar 2007 20:44

Ilustres colegas,


Eu estou ou melhor já fiz uma rotina em assembler que envia dados pela serial (só envia não recebe), estou tentando criar uma solução para o seguinte impasse:

Imagine que eu so tenho uma serial por onde deve trafegar todas as informações (não posso utilizar outra serial, tem que passar tudo por essa serial atual),

O Mcu esta enviando uma sequencia de informações (um Frame com 11 informações, referentes a um protocolo), essas informações não podem ser interronpidas até que sejam finalizados os 11 bytes.

Porem foi requisitada uma interrupção no MCU que pede para ele enviar um outro FRAME com 3 bytes imediatamente par a mesma serial....

Como voces resolveriam esse impasse?

Um abraço a todos,
Marcos vonnilmam
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor zielpunkt » 14 Mar 2007 23:12

O problema é vc não perder algum evento muito breve que gera essa interrupção e que pode ocorrer enquanto vc está enviando o seu protocolo? Então vc teria duas prioridades: não perder determinado evento e também não perder a sua transmissão em andamento? Acho que se for esse o caso, vc poderia priorizar a interrupção sem perder a transmissão dos 11bytes:

- colocar os 11bytes à transmitir num bufferX;
- setar flag de tx para 11bytes;
- iniciar a tx dos 11bytes;
- terminou, clear no flag de tx para 11bytes;

se houver interrupção:

- tratar a interrupção e enviar os 3bytes;
- volta e verifica se flag de tx é set ou clear;
- se set, retransmitir os dados a partir do bufferX;

Não sei se falei bobagem, mas não consegui pensar em nada mais inteligente que isso. Aliás, ainda tô na empresa, ainda não jantei...e tô com muita fome.

Abço.
"Talento é mais barato que sal. O que separa a pessoa talentosa da bem-sucedida é muito trabalho duro." [ Stephen King ]
zielpunkt
Byte
 
Mensagens: 376
Registrado em: 12 Out 2006 11:36
Localização: Sao Paulo - SP

Mensagempor Fábio Pereira » 15 Mar 2007 10:37

Que tal um buffer circular ?

Até +
Fábio Pereira
embeddedsystems.io
Avatar do usuário
Fábio Pereira
Word
 
Mensagens: 674
Registrado em: 16 Out 2006 09:07
Localização: Kitchener, ON

Mensagempor proex » 15 Mar 2007 11:18

Que tal vc dar prioridades para cada tipo de requisiçao de interrupçao?

Afinal, isso ai é um PIC, nao é Pentium nao. hehhehehhe

Nao da pra fazer milagres.

Essa idéia de interromper a serial no meio da transmissao para enviar mais coisas pela propria serial, vai dar bode.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Re: Brincadeira de adulto F877A

Mensagempor andre_luis » 15 Mar 2007 16:45

Voce deve organizar seu programa de maneira a encadear as tarefas, de modo que uma tarefa só poderá ser executada se a tarefa precedente tiver sido concluída.

Sobre a interrupção, voce - ao invez de enviar o frame seguinte - pode setar um flag, que vai habilitar a execução desta tarefa ( após a anterior ter sido concluída ).

Isso é um procedimento usual em manipulação de protocolos.

+++
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Mensagempor Vonnilmam » 20 Mar 2007 20:02

Olá a todos os amigos do forum...


As ideias são muito boas,

Todas são interessantes e o problema foi resolvido da seguinte forma;

Conforme o andre_teprom e o fabio mensionaram o melhor é utilizar um unico buffer com o comprimento total de todos os eventos que ocorrerão, ou seja os 11 bytes + os 3bytes que são prioritarios...

A solução é então criar um buffer com 14 bytes e através de flags indicar a esse driver contendo os 14 bytes quais devem ser enviados, esse driver fica na interrupção ou então fica no proprio loop do programa, se o programa for muito extenço deve ser melhor deixar numa interrupção disparada pelo TMR0 por ex...

Vou postar essa rotina aquí, acredito que irá ajudar muitos iniciantes e até mesmo veteranos....

Estou aprendendo agora a mexer com o blakfim proex, o que voce acha do kit com o DSP 533...estou prestes a compra-lo...

valeu,


Abraço a todos,
Marcos vonnilmam
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial

Mensagempor proex » 20 Mar 2007 21:33

Blackfin? pô, até que enfim heim Vonnnilmam.

Agora vai ehehehheheh.

Excelente processador, nao ha o que reclamar. Ainda mais agora que a AD finalmente resolveu colocar a memoria de programa dentro do chip.
proex
Dword
 
Mensagens: 2101
Registrado em: 11 Out 2006 14:05
Localização: São Paulo

Mensagempor Vonnilmam » 23 Mar 2007 13:26

Proex...

Posso contar com sua ajuda?

Nos blakfin...

Grato,
Marcos vonnilmam
VonNilmam "Assembler" e agora "C"
Avatar do usuário
Vonnilmam
Byte
 
Mensagens: 446
Registrado em: 19 Out 2006 14:25
Localização: espacial


Voltar para PIC

Quem está online

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

cron

x