Pergunta

Nós temos uma arquitetura simples:

  1. chip de Main (ARM9 baseado)
  2. PIC controlador

Os comunica PIC ao braço por meio de um protocolo de comunicação I2C interrupção base para a transferência de dados. Dentro da interrupção que sinalizar uma tarefa que lê os dados a partir da camada I2C (bus).

No caso dos dados são limitados nós geralmente não terá muito problema para ler os dados e enviá-lo para a camada superior. No caso esses dados é muito grande a interrupção será amarrado por um longo tempo.

A primeira pergunta é:

  1. Am I certo?

  2. No caso de eu estou certo, como evitar o mesmo? ... Ou podemos uma solução diferente?

Foi útil?

Solução

Tenha algum tipo de 'thread de trabalho', às vezes chamado de um thread do kernel, cujo trabalho é para puxar dados para fora da interface I2C e buffer-lo, entregá-lo para outras partes do seu sistema, etc. Use a rotina de interrupção apenas para un-bloquear o thread kernel. Dessa forma, se há outras funções, o sistema tem de executar, ele não está impedido do fazer pelo manipulador de interrupção, e você ainda obter os seus dados a partir de seu dispositivo em tempo hábil.

Outras dicas

Você não deve ler um pacote completo em uma execução da rotina de interrupção. Dependendo do suporte de hardware você deve lidar com uma amostra / bit / byte, armazenar dados em um buffer e só sinalizar a tarefa quando o pacote está completo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top