Mensagem

"Sonhar mais um sonho impossível, lutar quando é fácil ceder, vencer o inimigo invencível, negar quando a regra é vender."
Miguel de Cervantes.

"Os microprocessadores RISC funcionam a partir do princípio genial de se encarregar das coisas mais fáceis e deixar todas as partes difíceis para outras pessoas resolverem."
Douglas Adams.

Borges Invaders: game com o Due e o FreeRTOS

  Já faz um bom tempo que gostaria de fazer esse joguinho, então a oportunidade se fez. Uma nave contra invasores vindos do espaço. Podiam ser amigos, mas aí não teria o cheiro do passado e estaria muito politicamente correto.
 Resolvi utilizar recursos simples, então optei por um display matricial 84x48 (NOKIA 5110) e um pequeno joystick com um botão, e o Arduino Due (Cortex-M3) rodando a 84 MHz. Não fiz som, não estava com muita vontade de programar essa funcionalidade, fico devendo. O game não tem final, você nunca morre, pode jogar até não poder mais, vida infinita ... então, não tem game over!
  A idéia era usar um RTOS para facilitar a programação e melhorar o seu entendimento. Optei pelo FreeRTOS por ser facilmente empregado no ATmel Studio (minha ferramenta de ensino).
 O programa não é uma maravilha, daria para otimizar e melhorar bastante, mas como uma primeira brincadeira está aceitável. Como várias tarefas no FreeRTOS empregam variáveis comuns, utilizei variáveis globais, dentro do escopo das tarefas, para acesso compartilhado, e não empreguei ferramentas de sincronização e acesso exclusivo. Dentro da proposta e desempenho do jogo, foi o suficiente. O legal de utilizar o ATSAM do Due é que ele possui um gerador de números aleatórios muito fácil de utilizar e fundamental para a programação do jogo.
  A dificuldade maior foi ajustar a biblioteca básica do LCD para possuir funções gráficas, a função principal é o desenha_pixel( ) e depois a que permite desenhar uma figura (já definida) em qualquer parte do LCD, incluindo qualquer parte da figura. Aproveitei e criei uma função para imprimir o menor tamanho de número possível no LCD, para mostrar a pontuação do jogo. Também, existem muitas outras funções, mas não as utilizei.
  Aqui, o projeto completo, com o programa feito no ATmel Studio 7.0.