collapse

* Posts Recentes

Desenvolver em Rust com inline em Python por blabla
[22 de Outubro de 2021, 23:47]


A oficina do mestre Dan Gelbart: mecânica e electrónica por blabla
[22 de Outubro de 2021, 23:13]


Identificador Via Verde por KammutierSpule
[19 de Outubro de 2021, 14:33]


Visualizing memory layout of Rust's data types por blabla
[15 de Outubro de 2021, 14:01]


Ligação desconhecida por jm_araujo
[14 de Outubro de 2021, 00:35]


Electrónica em palpos de aranha por SerraCabo
[13 de Outubro de 2021, 15:46]


Pistola de Dessoldar por dropes
[08 de Outubro de 2021, 14:45]


KiCad stable release 5 por KammutierSpule
[06 de Outubro de 2021, 16:00]


Assemblagem de PCBs - JLCPCB por fergas
[06 de Outubro de 2021, 10:12]


Tarifas carta postal Correos.ES por jm_araujo
[05 de Outubro de 2021, 23:16]

Autor Tópico: Ajuda RTOS  (Lida 1643 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.448
Ajuda RTOS
« em: 11 de Abril de 2020, 14:14 »
Alguem com conhecimentos de RTOS?

Tentar explicar o que quero fazer
Código: [Seleccione]
NumaISR()
{
tenho uma variavel que pode ser incrementada ou decrementada;
E quero Notificar que a variavel foi alterada;
}

depois

Código: [Seleccione]
FuncaoNormal()
{
Quero receber a Notificacao
e saber o valor da variavel no estado actual
}

A situacao e' que a variavel pode ser alterada varias vezes ate FuncaoNormal ser atendida e processar.

Eu queria usar algo parecido com uma Queue e enviar directamente o valor la (ou um ponteiro),
so que nao quero estar sempre a criar um novo evento na Queue.

Teria de ser algo, "evento ja existe?se sim nao cria um novo, se nao cria um novo"

A solucao tambem tem de ser generica para N variaveis independentes

Alguma sugestao?

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.557
    • Tróniquices
Re: Ajuda RTOS
« Responder #1 em: 11 de Abril de 2020, 15:41 »
Não conheço o RTOS, mas acho que o que tu queres é um semáforo, vê se isso existe no RTOS.

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.448
Re: Ajuda RTOS
« Responder #2 em: 11 de Abril de 2020, 16:00 »
estou a usar o freeRTOS
descobri que eles tem um utilidade "Event Groups" da para marcar flags (ate 24)
nao e' muito flexivel mas penso que possa servir para o que pretendo.

semaforos, tambem da, mas teria que implementar as minhas estruturas e logica, etc
estava a tentar perceber se havia outras "ferramentas"

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.557
    • Tróniquices
Re: Ajuda RTOS
« Responder #3 em: 11 de Abril de 2020, 18:08 »
Não é complicado com um semáforo, é só uma ordem para desbloquear a thread principal, que depois vai ler as variáveis. Se tiveres várias, é só levantar uma flag específica (pode ser só um bit) e baixá-la na thread principal (tendo atenção à sincronização, sempre). Não me parece mais trabalho do que usar o que quer que seja, já é um mínimo.

Em alternativa ao semáforo podes fazer polling. Pode ser uma boa opção se não houver restrições de consumo/tempo de resposta e o ISR puder dar bursts de interrupções. Com bursts também é possível usar interrupções, mas com mais uns pózinhos.

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.448
Re: Ajuda RTOS
« Responder #4 em: 11 de Abril de 2020, 19:15 »
Obrigado pelas sugestoes! O polling nao podia ser, porque ha outras tarefas que precisam de funcionar.

Entao acabei por usar um "Event Group" do freeRTOS que no fundo e' um semaforo com uma variavel para bitmask interna.
Assim ele fica `a espera de receber eventos e ao ler, retoma os bits que foram alterados.

No entanto depois para conseguir ler o resto dos dados, tenho que desactivar a ISR, ler dados e activar novamente.

A minha ideia inicial era para nao ter de fazer esta "leitura do resto dos dados" e isso ja viesse nos dados da (exemplo) Queue. Mas nao da para fazer assim parece...



Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.557
    • Tróniquices
Re: Ajuda RTOS
« Responder #5 em: 11 de Abril de 2020, 23:22 »
Pode ser polling havendo outras tarefas a fazer... aliás, o semáforo/queue é que prende a execução, excepto se a queue levar com eventos das outras tarefas que há para fazer.

Podes dizer qual é a fonte da interrupção?

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.448
Re: Ajuda RTOS
« Responder #6 em: 12 de Abril de 2020, 09:30 »
Podes dizer qual é a fonte da interrupção?

Da ISR? E' um timer, que corre muito rapidamente em comparacao com o tick do freeRTOS (typ: 100Hz)

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.557
    • Tróniquices
Re: Ajuda RTOS
« Responder #7 em: 12 de Abril de 2020, 14:02 »
Ok, então é uma interrupção muito bem comportada.

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.448
Re: Ajuda RTOS
« Responder #8 em: 12 de Abril de 2020, 15:04 »
Ok, então é uma interrupção muito bem comportada.

 ;D sim vai ter de se comportar bem!