Articles and Blogs

  • 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] Group working: constructive and destructive behaviors

    4x100m Medley Relay: even though they perform alone in the pool, the overall result is what matters. In a pretty well balanced team, like this, each swimmer can go for his best style. If the team was heavily unbalanced, at the limit, for instance, Adrian happens to be competitive only on butterfly – Phelps could … Continue reading “[blog] Group working: constructive and destructive behaviors”

  • [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”

  • Separating user space from kernel space on ARM Cortex-M3

    1 . Introduction ARM Cortex-M processors are in SoCs of several application domains, especially in much of what we call smart devices. This publication continues the previous one, in which I had demonstrated the implementation of a minimum preemptive scheduling mechanism for an ARM Cortex-M3, taking advantage of the special hardware resources for context switching. … Continue reading “Separating user space from kernel space on ARM Cortex-M3”

  • Padrões de design para comunicação interprocessos em software embarcado (2/3)

    «Primeira parte» 4.3. Queuing Pattern Quando tasks têm baixo acomplamento temporal, i.e., virtualmente1 o tempo em que um processo consumidor leva para resgatar o resultado de um processo produtor não é condição para diferenciar falha de sucesso, o padrão de Message Queueing é bastante comum. O processo produtor envia uma mensagem a uma fila (um … Continue reading “Padrões de design para comunicação interprocessos em software embarcado (2/3)”

  • Padrões de design para comunicação interprocessos em software embarcado (1/3)

    1. Introdução Nos dois últimos artigos demonstrei um pequeno kernel com escalonador de tarefas cíclico, porém preemptivo (round-robin) implementado em um ARM Cortex-M3. Além do escalonamento de tarefas também separavam-se os processos de usuário dos processos de supervisor, o que trouxe a necessidade da implementação de mecanismos de System Calls. Durante os artigos, muitas vezes … Continue reading “Padrões de design para comunicação interprocessos em software embarcado (1/3)”

  • Separando espaços de supervisor e usuário no ARM Cortex-M3

    1. Introdução Os processadores ARM Cortex-M estão integrados a SoCs para domínios diversos, principalmente em muito daquilo que chamamos de dispositivos smart. Esta publicação é uma continuação da anterior, em que demonstrei a implementação de um mecanismo preemptivo mínimo para um ARM Cortex-M3, aproveitando-se dos recursos de hardware especiais para a troca de contexto. Alguns … Continue reading “Separando espaços de supervisor e usuário no ARM Cortex-M3”

  • Um primeiro kernel preemptivo no ARM Cortex-M3

    1 Introdução Quando se fala em sistemas operativos para software embarcado, em geral pensa-se que eles são um overkill (implementação cujo custo não compensa) para a maioria das soluções. No entanto entre uma aplicação completamente “hosted” (que faz uso de um SO multithread e de propósito geral) e outra completamente “standalone” ou “bare-metal” há muitas … Continue reading “Um primeiro kernel preemptivo no ARM Cortex-M3”

  • SOA para diminuição da hardware-dependência em C

    1. Impacto do software hardware-dependente (HdS) É dito na literatura que o custo do software embarcado tem dominado o projeto de sistemas eletrônicos [1]. Sistemas embarcados, tradicionalmente limitados em memória e processamento, conseguem hoje rodar aplicações mais complexas fruto do avanço no projeto e fabricação de circuitos integrados. Ora, a introdução de hardware mais complexo … Continue reading “SOA para diminuição da hardware-dependência em C”

  • Abordagens para projeto low power (2/3)

    (Um PDA da Nokia com acesso à internet, 1995. Fonte: gizmodo.com) 5 Abordagens low power no nível arquitetural Penso que desenhar a arquitetura de um projeto é, para todos os efeitos, definir como cada módulo do sistema se comunica com os outros módulos para trabalharem em conjunto, e através de análises, seja pela experiência do … Continue reading “Abordagens para projeto low power (2/3)”

  • Abordagens para projeto low-power (1/3)

    1 Eficiência Na última publicação sugeri que a Compaq teria percebido a portabilidade como requisito mais que desejável para a computação pessoal. Apesar de os primeiros computadores da companhia terem ~12 kg (!) e serem considerados “portáteis” simplesmente por serem apresentados em uma maleta com alças, ainda precisavam de uma tomada de corrente para funcionar. … Continue reading “Abordagens para projeto low-power (1/3)”

  • [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”