PicMiK - the PIC Micro Kernel

(para a plataforma PIC16F876)

O kernel PicMik foi desenvolvido em finais de 2003 no âmbito da disciplina de Sistemas de Tempo-Real, pelos alunos Rudolfo Andrade e André Quinta. A motivação para o desenvolvimento do PicMik foi a de fornecer uma estrutura de software que facilite o desenvolvimento de múltiplos comportamentos cíclicos para pequenos robôs, como os que concorrem ao Concurso Micro-Rato da UA. No fundo, o PicMik segue na linha do anterior RetMik, um kernel multi-tarefa disponibilizado aos participantes do Concurso Micro-Rato desde 1998 e destinado à plataforma Kit188.

O kernel PicMik é simples e permite gerir a execução concorrente de até 9 tarefas, activando-as aos ritmos especificados pelo utilizador. Cada tarefa está associada a uma função escrita em C, que representa o respectivo código. A execução dessa função é despoletada automaticamente pelo kernel, de forma completamente transparente para o programador. A utilização do kernel adequa-se a situações do tipo:

Pretende-se executar a função A todos os 40ms, a função B todos os 500ms, a função C todos os 90ms e a função D todos os 40ms mas sempre 10ms depois da função A 

O programador apenas tem que fornecer o código de cada função e especificar o período e a fase com que pretende que a função seja executada.

Os recursos do processador utilizados pelo kernel são, aproximadamente 1064Words de código, 16 bytes no Bank0 e 80 bytes no Bank1. As respectivas funções estão disponíveis na livraria picmik.c

O kernel foi escrito para a plataforma PIC16F876, inteiramente em C, utilizando o compilador da Hi-Tech. Basicamente, este kernel permite transformar normais funções de C em tarefas periódicas cuja activação e execução concorrente é controlada pelo próprio kernel e completamente transparente para o utilizador.

As tarefas não admitem preempção o que quer dizer que quando uma tarefa inicía execução, executa até ao final, podendo apenas ser interrompida por interrupções ao processador. A execução das tarefas é efectuada por ordem das respectivas prioridades, que são fixas, atribuídas automaticamente de forma decrescente, de acordo com a ordem da criação das tarefas. Para melhores resultados sugere-se criar primeiro as tarefas com períodos menores e por último as que tiverem períodos mais longos (escalonamento Rate-Monotonic)

As várias tarefas podem comunicar através de variáveis globais. A resolução temporal do kernel (tempo que demora um tick) é um parâmetro de entrada da função de inicialização init_system(). Sugere-se 10ms.

Ao criar-se cada tarefa é necessário fornecer dois parâmetros: o respectivo período e o instante da primeira activação. O segundo parâmetro permite controlar a fase relativa de activação de  tarefas com o mesmo período ou múltiplos entre si.

A versão actual necessita da livraria Robot2.c que faz a inicialização e atendimento da interrupção do timer1 do PIC.

Documentação

E agora?

A melhor forma de começar a utilizar o PicMiK e aderir à MiKmania é alterar o programa exemplo sample2.c, alterando as tarefas e adicionando as que forem necessárias. Força nisso! Dúvidas enviem-nas para:

top