-
Abordagens para projeto low-power (3/3)
6 Abordagens para redução de consumo em RTL As ferramentas de síntese e back-end detectam oportunidades para salvar energia diretamente do RTL, portanto a microarquitetura e, consequentemente o estilo de codificação tem um grande impacto no consumo. A medida que o fluxo avança, menores são as intervenções que podem ser feitas para reduzir a energia … Continue reading “Abordagens para projeto low-power (3/3)”
-
[blog] Kernels monolíticos e microkernels
Sistema operativo e kernel Antes, uma ligeira digressão: onde termina o sistema operativo e começa o kernel? Conceituá-lo como o núcleo do SO fatalmente amarra esta diferenciação ao sistema. Eu diria quem nem todo kernel é um sistema operativo, mas todo sistema operativo tem um kernel. Devido à hardware-dependência, a discussão sobre a estrutura do … Continue reading “[blog] Kernels monolíticos e microkernels”
-
[blog] O Amplificador Diferencial
Comentários básicos sobre este workhorse em eletrônica. O conceito de amplificador diferencial é elemento-chave em uma infinidade de aplicações analógicas: buffers, filtros, osciladores, reguladores de tensão, referências de tensão/corrente, processamento de sinais, PLLs, etc., devido às suas propriedades úteis. As figuras foram retiradas do livro CMOS Circuit, Design, Layout and Simulation (Baker). O Par diferencial … Continue reading “[blog] O Amplificador Diferencial”
-
[blog] Synchronous versus asynchronous reset on ASIC Design
Reset is about getting a system back to a known initial state. Temporary data is flushed. When I say data I mean 0s and 1s. Everything will be put to a known state so the circuit starts up. Sounds important. When we go for synchronous or asynchronous reset, active low, our HDL code will look … Continue reading “[blog] Synchronous versus asynchronous reset on ASIC Design”
-
[blog] Tip: C variables and pointers: declarations and definitions
It might sound naive, but it is a very common interview question, and I actually think the notation can be deceiving. And furthermore, it is essential. A few months off and you will be asking yourself “how is that again?”. Unless you get this rule: start reading from right to left. Question: Please read the … Continue reading “[blog] Tip: C variables and pointers: declarations and definitions”
-
[blog] NASA’s Ten Principles of Safety-Critical Code
These are the NASAs ten principles for safety-critical code. It is interesting to note that they were published later than MISRA-C that already covers it naturally. Restrict all code to very simple control flow constructs, do not use goto statements, setjmp or longjmp constructs, direct or indirect recursion. Give all loops a fixed upper bound. … Continue reading “[blog] NASA’s Ten Principles of Safety-Critical Code”
-
A first preemptive kernel on ARM Cortex-M3
1. Introduction When it comes to operating systems for embedded software, they are generally thought to be an overkill for most solutions. However, between a completely “hosted” multiapplication system (which uses a multi thread and general purpose OS) and a completely “standalone/monolithic” or “bare-metal” application specific system, there are many variations we can go for. … Continue reading “A first preemptive kernel on ARM Cortex-M3”
-
[blog] “Silicon Cowboys”, a história da Compaq
Nesta semana assisti ao documentário (disponível no Netflix) “Silicon Cowboys” que conta a história da fundação da Compaq. A Compaq parece ser uma história de sucesso que juntou algum brilhantismo técnico com um gerenciamento todo brilhante.“Não era sobre criarmos um computador ou ficarmos ricos. Era sobre criarmos uma empresa boa para se trabalhar” disse Rod, um … Continue reading “[blog] “Silicon Cowboys”, a história da Compaq”
-
Escalonamento cooperativo em software embarcado (2/2)
Escalonador cooperativo para soft real-time Os sistemas com requisitos de tempo-real são classificados em soft, firm e hard, apesar de estes critérios não serem bem estabelecidos. Em sistemas ‘hard’, os requisitos de tempo precisam ser estritamente atendidos sob pena da falha total. No soft/firm, o não cumprimento das deadlines é tolerado em alguma medida, ocasionando … Continue reading “Escalonamento cooperativo em software embarcado (2/2)”
-
Escalonamento cooperativo de tarefas em software embarcado (1/2)
Arquiteturas para escalonamento cooperativo de tarefas Na publicação anterior escrevi sobre o uso do chamado super-loop e suas limitações quando falamos em atender requisitos de tempo em uma planta. Além disso, também mostrei que podemos utilizar interrupções disparadas por temporizadores para garantir que tarefas sejam executados em intervalos definidos. Neste caso, para cada tarefa periódica … Continue reading “Escalonamento cooperativo de tarefas em software embarcado (1/2)”
-
Construindo números negativos em computadores
1. “Tudo é número” (Pitágoras) Os autores costumam dizer que a Matemática é desenvolvida conforme o homem necessita. Assim, podemos imaginar que os humanos primitivos faziam risquinhos para representar uma coleção de objetos (cabras, peles, filhos…). Constatada sua ineficiência, criaram-se símbolos que representavam tamanhos de coleções diferentes, depois símbolos que representavam uma coleção de outros … Continue reading “Construindo números negativos em computadores”