⚡ Visão geral
Regras de desenvolvimento de firmware para entregas de laboratórios, APS, projetos e avaliações. É importante ressaltar que estas são regras gerais e podem existir exceções, mas você deve pensar bem e talvez discutir com algum membro da equipe antes de querer quebrar alguma delas.
Linguagem C
_"With great power comes great responsibility"_
Ben, Uncle.
- Usar variáveis globais apenas quando estritamente necessárias, como
"regra de ouro", só é necessário aquelas que são modificadas de dentro de uma interrupção. Pois as variáveis globais podem ser alteradas em qualquer lugar do código, tornando-o menos previsível. - Se uma função for alterar uma variável global, você deve passar o ponteiro da variável como argumento da função.
- Sempre que possível deixe o código genérico e sem
magic numbers, utilize#defineouconst. - Não implementar funções dentro do
.h, faça isso no.c.
Interrupção / Callback
Você deve gastar no máximo algo entre 100-200 clocks dentro de uma interrupção.
- Apenas algumas linhas de código em C
- Evitar manipular strings (
sprintf) - Evitar usar
printf - Não atualizar displays (OLED / LCD)
- Evite loops (
while/for)
A interrupção é um evento de hardware na qual o compilador não tem conhecimento.
- Lembre de dar o ACK da interrupção (exe:
tc_get_status) - Declare as variáveis compartilhadas ( entre interrupções e a main(); ) como
volatile - No ARM para ativar interrupção é necessário configurar o periférico e o NVIC!
freeRTOS
Usar os recursos do sistema operacional sempre!
- De forma geral usar
vTaskDelayno lugar dedelay_ms. - Não fazer uso de flags (variáveis globais) para indicar que um evento deve acontecer, usar um semáforo.
- Não compartilhar variáveis globais entre tasks para transmitir informações, usar uma fila para isso.
- Lembre de inicializar os recursos antes de usar (
xCreateSemaphore,xCreateQueue). Indicamos fazer isso no início da funçãomaine não dentro das tarefas