⚡ 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#define
ouconst
. - 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
vTaskDelay
no 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çãomain
e não dentro das tarefas