A utilização de uma variável de barramento por uma tarefa qualquer é realizada por intermédio de funções especializadas na manipulação de tais variáveis. Estas funções são:
• HANDLE_CAN_MSG InsertOnBus (unsigned int Id,unsigned int
TimerTrigger,void *DataPointer,char DataLength, char Envia), detalhada
anteriormente;
• void CANMSGSemPost (HANDLE_CAN_MSG HandleMSG): Função que
libera semáforo da mensagem identificada pelo HandleMSG, que é um número inteiro que corresponde ao índice que a mensagem tem no buffer de controle. Esta função não retorna valor;
• void CANMSGSemPend (HANDLE_CAN_MSG HandleMSG): Função que
marca o semaforo da mensagem identificada pelo HandleMSG, que é um número inteiro que corresponde ao índice que a mensagem tem no buffer de controle. Esta função não retorna valor;
• char CANDataAvaliable (HANDLE_CAN_MSG HandleMSG): Função que
verifica se a variável, cuja mensagem é identificada pelo HandleMSG no
buffer de controle, está disponível, ou seja, se está atulizada. Esta função
retorna 1 se o valor da variável está disponível, e 0 se o valor não foi atualizado;
Portanto, para uma tarefa qualquer compartilhar na rede suas variáveis, primeiramente deve-se disponibilizar na rede as variáveis que ela possui e que outros nós necessitam, usando a função InsertOnBus, Assim, quando for recebido um RTS com identificador destas mensagens o controlador de variáveis irá enviá-la pela rede. Para esta situação deve-se declarar o TimerTrigger desta função como 0, visto que esta variável não será atualizada pela rede.
Em seguida, devem-se inserir as variáveis com atualização pela rede também com o uso da função InsertOnBus, contudo, deve-se alocar a variável a ser atualizada exatamente como ela foi alocada pelo nó fonte. O TimerTrigger desta variável deve ser preenchido com o período de atualização desta.
Feita a inserção das variáveis no barramento, o seu uso passa a ser compartilhado pelo controlador de variáveis de barramento. Diante disso, antes do acesso a estas variáveis, deve-se usar a função CANDataAvaliable para verificar a atualização de seus dados. Se a variável não estiver atualizada a tarefa deve tomar as providencias necessárias. Se a variável estiver atualizada a tarefa deve usar primeiramente a função CANMSGSemPend, que impede que outras tarefas modifiquem os dados enquanto estão sendo lidos, assim evitando processamento de dados instáveis, e depois a função CANMSGSemPost, que libera a variável para ser atualizada por outras tarefas.
Seguindo esta seqüência de instruções, todas as tarefas podem usufruir da atualização automática de suas variáveis, e assim, controlar e ler dados de outros nós de rede independente de onde eles estejam hospedados.
4.5.1Parâmetros da Implementação CAN Para a Cadeira de Rodas
Como mencionado anteriormente, a taxa da rede CAN implementada neste trabalho é de 250 . Outro parâmetro relevante é o TICK do controlador de variáveis, que tanto na PP quanto na PCP é de 2 $ . Em ambas as placas foram disponibilizadas buffers de controle de variáveis de 16 posições. Isso implica que esta aplicação pode suportar até 16 mensagens CAN. Os buffers de recepção e transmissão do driver MCP2515 têm 16 posições em ambas as placas, ou seja, pode acumular até 16 mensagens recebidas e 16 mensagens a serem transmitidas. Não foram utilizadas máscaras ou filtros nesta aplicação, visto o pequeno número de mensagens. Estes parâmetros são configuráveis e podem sofrer alterações em outras aplicações. Foram implementadas 9 mensagens e suas descrições estão na Tabela 14.
Tabela 14: Tabela das mensagens CAN implementadas e suas descrições.
ID CAN
(Hex) Variáveis Descrição das variáveis
Comprimento (Bytes) Periodo de Atualização (ms) Tarefa Origem Placa Orige m 0x0200 TensaoAlimentacao Tensão de alimentação das placas de controle
dos periféricos e processamento 2 50 interrupção do microcontr olador da Placa de Processam ento PP 0x02AA Segundos, minutos, Horas, Dia,Mes e Ano dados o RTC da PP 7 200 Relógio PP
0x0111 Vre,Vrd Velocidade das rodas em
mm/s 8 2 TaskControl eDosEncod ers PCP 0x0113 IR.Distancia0, IR.Distancia1, IR.Distancia2 e IR.Distancia3
Dados de distancia lidos pelos sensores infravermelho 8 100 TaskControl eDosEncod ers PCP 0x0123 Posicao.X e Posicao.Y posição da cadeira de rodas medida pela tarefa hodômetro em (mm,mm) 8 50 TaskControl eDosEncod ers PCP 0x0124 Teta Angulo de orientação da cadeira de rodas em radianos 4 50 TaskControl eDosEncod ers PCP 0x0110 UeCAN, UdCAN valores de PWM para motor esquerdo e direito 8 2 Controlado r PP 0x0109 MotoresComando.B yte
Comando diretos para
os motores 1 20
Controlado
r PP
0x0115 MotoresStatus.Byte Status dos motores 1 20 DriverMoto
res PCP
4.6
Conclusão
A rede CAN é muito robusta e confiável, visto que possui vários métodos de detecção de erros e meio físico apropriado para aplicações na indústria. Sua arquitetura de endereçamento de mensagens, e não de nós físicos, permite a criação das variáveis de barramento.
Para aplicações embarcadas, nas quais vários módulos diferentes se comunicam entre si e desempenham tarefas distintas, a arquitetura de variáveis de barramento se mostrou muito
eficaz, visto que especializa as tarefas, ou seja, os serviços de controle do barramento, controle de erros e gestão de comunicação são desempenhados por uma única tarefa especializada. Isso permite que o programador desenvolva as demais tarefas de modo independente do protocolo de rede.
As funcionalidades da arquitetura apresentadas somente foram possíveis devido ao
kernel de tempo real, que garante o chaveamento das tarefas, sinalização de eventos e gestão
5
O SISTEMA OPERACIONAL DE TEMPO
REAL
A cadeira de rodas é composta por vários sistemas que usam sensores e algoritmos que, respectivamente, interagem entre si e são executados de modo aleatório. Contudo, alguns dos algoritmos que compõe a cadeira de rodas têm restrições severas de tempo de execução, ou seja, devem ser executadas em tempo real, sendo estas restrições
impostas de acordo com sua função. Objetivando dar garantida de execução a tais algoritmos em tempo real, foi usado um kernel de tempo real. Neste Capítulo o
kernel utilizado é abordado assim como
suas funções na cadeira de rodas e como foi garantida a execução das tarefas em tempo real.