Reduzindo o programa AVR/ATmega328P

O seu programa está grande demais? Muito lento para gravar o microcontrolador? Não cabe na memória? Vamos reduzir o programa!

Há alguns truques simples para reduzir o tamanho dos programas e, se não está utilizando todos, as chances são que seu executável está maior do que o necessário.

Vejamos como podemos reduzir o tamanho do programa gerado pelo compilador.

Continue lendo “Reduzindo o programa AVR/ATmega328P”

O Jogo de dados de Mozart – Probabilidade no Ensino Médio

Você sabia que podemos compor músicas jogando dados?
E isso tem tudo a ver com Matemática e Probabilidade!

Este vídeo faz parte da minha pesquisa de mestrado.
Espero que gostem e bons estudos!

Compilando código C/C++ com Makefile

Neste post mostramos como criar um Makefile para realizar a compilação de programas C/C++.

Makefiles são muito bons pra automatizar a execução de comandos, evitando ter que digitá-los toda vez.

Também gerenciam dependências entre arquivos, recompilando apenas o que é necessário.

Continue lendo “Compilando código C/C++ com Makefile”

TDD: Testando código C/C++ com Gcov

No post anterior (TDD: Testando código C/C++ com Boost.Test), explicamos como se cria uma suíte de testes com a biblioteca Boost.Test. Muito útil para testar a funcionalidade correta do código.

Neste post mostramos como utilizar o Gcov para verificar se todo o código é executado pelos testes. Criamos uma biblioteca simples e um conjunto de testes para ela.

Ferramentas de code coverage (cobertura de código) como Gcov são muito utilizados para “Desenvolvimento a partir de testes” (TDD – Test Driven Development).

No TDD desenvolvemos os códigos e seus testes em paralelo, para verificar que o código funciona e, no futuro, poder verificar se alguma mudança no código tenha causado um bug.

A análise da cobertura de código auxilia no TDD, identificando partes do código que não estão sendo testadas por completo.

Continue lendo “TDD: Testando código C/C++ com Gcov”

TDD: Testando código C/C++ com Boost.Test

Neste post mostramos como utilizar a biblioteca Boost.Test para testar seus códigos. Podemos compilar a biblioteca junto aos testes, sendo também possível utilizar uma versão pré-compilada para melhorar o tempo de compilação.

Bibliotecas de teste são muito utilizados para “Desenvolvimento a partir de testes” (TDD – Test Driven Development).

No TDD desenvolvemos os códigos e seus testes em paralelo, para verificar que o código funciona e, mais importante, no futuro poder facilmente verificar se alguma mudança no código tenha causado um bug.

Continue lendo “TDD: Testando código C/C++ com Boost.Test”

initramfs e fsck: Ubuntu Linux não inicia

O Ubuntu Linux não inicia e aparece um tal de initramfs! O que fazer?

Um computador meu estava parado por uns tempos, estava com algum problema. Travava, reiniciava do nada… De repente não ligava mais.

Então resolvi reviver ele: Levei na manutenção, deram um jeito nele e fizeram ele iniciar. Bastava remover um dos pentes de memória RAM, que estava com problemas. Agora ele liga e a tela do bootloader do Ubuntu Linux aparece.

Terminal com initramfs

Mas quando tentamos iniciar o sistema, em vez da interface gráfica, aparece o terminal: uma tela preta com algumas linhas escritas, aguardando algum comando:

(initramfs) _

No meio do texto temos escrito:
“The root filesystem on /dev/sda2 requires a manual fsck

Tradução livre:
“A raiz do sistema de arquivos em /dev/sda2 requer um fsck manual”

FSCK (File System ChecK) é uma ferramenta que chega e corrige o sistema de arquivos.

Depois de tantos travamentos e reinicializações inesperadas causadas pelo pente de RAM defeituoso, o sistema de arquivos ficou corrompido. O bootloader está pedindo para manualmente executarmos a verificação do sistema de arquivos.

Como corrigir

Para fazer isso executamos o seguinte comando:

fsck -C -V /dev/sda2

Um simples “fsck /dev/sda2” já resolveria, mas queremos ver o progresso (-C) e ver as explicações do que está sendo feito (-V), então adicionamos essas duas opções. Para ver as opções digite “fsck –help”.

Durante a execução do comando, algumas vezes (ou muitas vezes se o bicho estiver feio) aparece uma mensagem, aguardando interação, perguntando se alguns arquivos podem ser apagados, pois estão com algum defeito, não possuem referência ou alguma outra coisa. Basta apertar ENTER para confirmar e ele será apagado.

Coloque um peso na tecla caso se incomode em apertar ENTER muitas vezes.

Depois de algum tempo… O programa termina e basta reiniciar o computador com o comando

reboot

E agora?

O sistema provavelmente vai iniciar normalmente. Recomendo fazer um backup dos seus dados imediatamente e caso acontecer novamente também reinstalar o sistema.

Se ainda assim não iniciar, você vai ter que usar uma “versão live” do Ubuntu Linux para fazer um backup dos seus dados e então reinstalar o sistema.

Se você tem este problema, do Ubuntu Linux não iniciar e mostrar a tela do intramfs, esse post vai ajudar a solucionar.

Operadores com ponto no MATLAB/OCTAVE

Que negógio é esse de .* .^ .’?

No MATLAB/OCTAVE temos muitas operações e as vezes nos deparamos com algumas operações estranhas.

O que é .*?

O asterisco (A*B) denota a multiplicação das matrizes A  e B. O número de colunas de A deve ser o mesmo número de linhas de B.

O ponto-asterisco (A.*B) denota multiplicação elemento a elemento (elementwise multiplication). O número de linhas e colunas de A deve ser o mesmo de B.

O que é .^?

O circunflexo (A^x) denota a potenciação da matriz A pelo número x, ou seja, A elevado a x. Por exemplo A^2 = A*A e A^3 = A*A*A.

O ponto-circunflexo (A.^x) denota a potenciação elemento a elemento (elementwise power), ou seja, cada elemento terá seu valor elevado a potência x.

O que é .’?

Essa aqui confunde mesmo, pois não tem nada a ver com operações elemento a elemento.

O apóstrofo (A’) denota a matriz TRANSPOSTA e COMPLEXO CONJUGADA. A matriz é transposta (troca-se as linhas pelas colunas) e os elementos são conjugados (a parte imaginária dos números complexos mudam de sinal).

O ponto-apóstrofo(A.’) denota matriz TRANSPOSTA. A matriz é transposta (troca-se as linhas pelas colunas) mas nesse caso os elementos NÃO são conjugados.

Para matrizes com apenas números reais ambas operações fazem a mesma coisa.

Concurso: Tensão em capacitor

Esta questão vem do NC-UFPR, Concurso da Itaipu para Engenharia Eletrônica em 2019.

Questão sobre a tensão sobre um capacitor a partir da corrente conduzida por ele. Na minha opinião não foi muito bem formulada: você sabe dizer qual a unidade que em que a corrente é dada?

Questão

46 – A tensão e a corrente entre os terminais de um capacitor de 0,6 μF é 0 para t<0. Quando t≥0, a corrente passa a ser descrita por 3cos(50t). Assinale a alternativa correta para v(t) quando t≥0.

a) sen(50t) + cos(100t) V.

b) 50cos(100t) V.

c) 100sen(50t) V.

d) (sen 50t)/(cos 50t) V.

e) 100te-t V. Continue lendo “Concurso: Tensão em capacitor”

Concurso: Corrente em indutor

Esta questão vem do NC-UFPR, Concurso da Itaipu para Engenharia Eletrônica em 2019.

Questão sobre a corrente que um indutor conduz a partir da tensão aplicada nele.

Questão

45 – Um indutor de 100 mH é correta e diretamente conectado a uma fonte de tensão. O pulso de tensão fornecido pelo sistema para t<0 é 0, e para t>0 é dado pela expressão v(t)=20te-10t V. Assumindo que i=0 para t≤0, assinale a alternativa que apresenta corretamente a corrente no indutor para t>0.

a) -2e-10t A, t>0.

b) 2e-10t A, t>0.

c) 2(1 – 10te-10t – e-10t) A, t>0.

d) 10te-t A, t>0.

e) (20te-5t – e-5t) A, t>0. Continue lendo “Concurso: Corrente em indutor”

Concurso: Circuito de corrente alternada

Estas questões vêm da CEBRASPE, Concurso de Analista de Gestão de Resíduos para Engenharia Elétrica em 2019.

Agradeço a sugestão de questão por José P. N.

Questões

(Adaptado) No seguinte circuito, todos os elementos são ideais, os valores das fontes de tensão e de correntes são eficazes, α e β são constantes, e I0e é uma fonte senoidal com frequência igual a ω.

Circuito de corrente alternada (Fonte: Cebraspe)
Circuito de corrente alternada (Fonte: Cebraspe)

A partir do circuito apresentado e das informações a ele relacionadas, julgue [como CERTO ou ERRADO] os itens a seguir.

59 – Se ω = 0, então a tensão V0 será igual a V1/ α.

60 – A potência complexa fornecida pela fonte βI1 é igual a |V1|2/R2.

61 – A tensão V0 e a corrente que passa através do resistor R1 têm diferença de fase nula.

62 – Se o fasor da corrente I1 for |I1|ejθ1, então V1 = βR2|I1|ejθ1 .

63 – A expressão V0 = R1I0e – R1I1 está correta para o circuito em questão. Continue lendo “Concurso: Circuito de corrente alternada”