monophonic-music's People
monophonic-music's Issues
Criar um define para cada prioridade
monophonic-music/SAME70-OLED-BUZZER-MUSICAL/src/main.c
Lines 145 to 155 in 284496c
Exemplo
// (Colocar este define junto com os outros do botão)
#define BUT2_PRIORITY 6
NVIC_SetPriority(BUT2_PIO_ID, BUT2_PRIORITY);
Vantagens:
- Fica explicito junto com as demais configurações do botão, permitindo fácil alteração da prioridade se necessário.
- Evita número "mágico" no meio do código, ficando bem óbvio o que se trata (código se auto documenta).
Grandes vetores constantes de dados
monophonic-music/SAME70-OLED-BUZZER-MUSICAL/src/musics.h
Lines 4 to 12 in 284496c
No arquivo musicas.h existem diversos vetores com informações constantes (uma vez definido, nunca é alterado).
Uma grande recomendação de quando trabalhamos com sistemas embarcados, e também acaba sendo uma excelente prática de programação, sempre que tivermos dados constantes que não alteram (imutáveis), declarar eles com a propriedade const.
Exemplo:
const int pirate_tempo[] = ...
Quais as vantagens para um sistema embarcado?
Bom, o nosso SAME70, é uma CPU com 2048KB de ROM e 384KB de RAM (fonte) Quando você não utiliza a propriedade const, o compilador assume, que o vetor pode ser alterado a qualquer instante, por este motivo, ele é armazenado na RAM do processador. Agora, com o const, estes dados serão armazenados na ROM! Já que eles não se alteram! Dando uma enorme economia de memória RAM.
Lembre-se que geralmente em sistemas embarcados, um dos maiores gargalos é a quantidade de memória RAM disponível (RAM = custo = aumenta preço).
Poderia ter uma função draw_music_title
monophonic-music/SAME70-OLED-BUZZER-MUSICAL/src/main.c
Lines 209 to 210 in 284496c
Que tal?
void draw_music_title(char* title) {
gfx_mono_draw_string(" ", 10, 10, &sysfont);
gfx_mono_draw_string(title, 10, 10, &sysfont);
}
Vantagens:
- Separa lógica de processamento da lógica de exibição.
- Para alterar a interface visual no OLED, basta alterar uma função, ficando bem claro, o seu uso. Evitando ter código repetido espalhado.
Defines para números mágicos ou comentário mais elaborado
monophonic-music/SAME70-OLED-BUZZER-MUSICAL/src/main.c
Lines 160 to 161 in 284496c
O que representa o valor 100000? e o 2?
Assim, sei que representa a conta de uma nota musical, provavelmente em tempo. No entanto, ao bater o olho, fica dificil saber, estes 1000000 seria o que 100 segundos? 100 milissegundos?
Enfim, deixar o código mais comentado ou usar defines para dizer o que são essas variáveis tem suas vantagens:
- Fica mais fácil para entender o que está sendo feito
- Permite ajuste fino pelo usuário fácil apenas alterando um define
Números mágicos nos flags de botão
monophonic-music/SAME70-OLED-BUZZER-MUSICAL/src/main.c
Lines 72 to 88 in 284496c
Algum motivo por usar 2, 10, 9?
Porque não 1, 2, 3. Batendo respectivamente com cada botão.
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.