Série Programming One Kindle

C One

Do zero ao básico em sistemas embarcados e IoT

C do zero, dentro de um sistema que já está em produção: o programa que vigia a temperatura do leite em duzentos e doze tanques de fazenda e manda o alarme quando alguma coisa esquenta. Tipos, memória, ponteiros, strings, structs, arquivos, bits, Makefile, depuração, sockets e threads, aprendidos porque o sistema exige — e um segmentation fault que só aparece às 3h17.

R$ 15,99 R$ 24,00 Promoção

Atenção: o idioma desta edição é português.

30capítulos
12partes
1projeto do início ao fim
Capa de C One: Do zero ao básico em sistemas embarcados e IoT, de Thiago Nogueira Edição Brasil
CgccMakefilegdbValgrindsocketsthreadsIoT
código do livro

Menos teoria vazia.
Mais código que funciona.

Nada de exemplo solto com foo e bar. Todo trecho pertence ao mesmo projeto, que cresce capítulo a capítulo — e os erros aparecem como aparecem na sua tela, para serem lidos linha por linha.

tanque.c
#include <stdio.h>int main(void){    printf("Tanque 047: 3.8 graus\n");    printf("Tanque 048: 3.4 graus\n");    return 0;}
terminal
gcc -Wall -Wextra tanque.c -o tanque && ./tanqueTanque 047: 3.8 grausmakegcc -Wall -Wextra -c gateway.c
o projeto

Um sistema só, do primeiro arquivo ao deploy

README.md

A Cooperativa Vale Leiteiro tem um gateway que ninguém quer abrir: onze mil linhas de C, um comentário NÃO MEXER e um caminhão que já voltou para a fazenda. Ao longo do livro, esse gateway vira código que você entende: memória, ponteiros, Makefile, sockets e o crash das 3h17.

C do zero, dentro de um sistema que já vigia duzentos e doze tanques.

  • Um projeto só: o gateway dos tanques de leite da Cooperativa Vale Leiteiro
  • Todo programa compilado com gcc -Wall -Wextra, com a saída conferida
  • Memória e ponteiros desenhados, endereço por endereço
  • Bugs de verdade: o tanque a 85 graus e o crash das 3h17
leitura de amostra

Leia uma prévia gratuita de C One

Esta amostra contém os primeiros capítulos. O PDF completo continua protegido para compradores.

Abrir prévia em nova aba →
sumário

30 capítulos em 12 partes

Abra uma parte para ver os capítulos — e a frase que abre cada um.

parte 01 O código que ninguém quer tocarUm gateway numa sala de ordenha, onze mil linhas de C, um comentário que diz NÃO MEXER, e um caminhão de leite que voltou para a fazenda. 2 cap.
  1. 01
    Você tem certeza que isso é C?Um pen drive com etiqueta de 2019, um make que não passa da linha catorze, e um log que termina às 3h17.
  2. 02
    Um PDP-11 em Murray HillUm projeto cancelado, um computador encostado num canto, e uma linguagem feita para escrever um sistema operacional — que acabou dentro de um tanque de leite.
parte 02 Entrando no mundo CO programa começa no main, e a temperatura do tanque mora em algum lugar da memória com tamanho, tipo e limite. 2 cap.
  1. 03
    O programa começa no mainTrês linhas que não fazem nada, um computador que reinicia o programa sozinho, e a pergunta que ninguém tinha feito: reinicia por quê?
  2. 04
    Variáveis não são caixas mágicasUm SMS às 4h06 dizendo que o leite está a 85 graus, um tanque que continua gelado, e um número que o sensor manda quando acorda.
parte 03 Fazendo o programa trabalharDecidir quando o leite esquentou, repetir para cada leitura, e quebrar a função de quatrocentas linhas do Seu Valdir. 3 cap.
  1. 05
    Quando o programa precisa decidirTrês níveis de alarme, leite morno que é normal às cinco da manhã, e um sinal de igual que silenciava tudo.
  2. 06
    Repetir é fácil. Saber quando parar é outra coisa.Duzentos e doze tanques, um relatório noturno que conta duzentos e treze, e um tanque que não existe mas tem temperatura.
  3. 07
    A função que cresceu demaisQuatrocentas e doze linhas, dezenove níveis de chave, e uma função que devolve uma resposta quando o gateway precisa de duas.
parte 04 A memóriaOnde a variável está, o símbolo que parece pequeno demais, e o bug que some quando alguém coloca um printf. 3 cap.
  1. 08
    Onde o dado realmente está?Um número de dezesseis dígitos com letras no meio, uma variável que mora num endereço, e o mapa que o Kauã desenhou na parede.
  2. 09
    O símbolo que parece pequeno demaisUm asterisco que multiplica, declara e busca, uma função que finalmente devolve duas coisas, e o que o sistema faz com quem mexe no endereço zero.
  3. 10
    O bug que desaparece quando você coloca um printfUm nível de alarme 1360, um printf que conserta tudo sem consertar nada, e a frase do padrão de C que explica as duas coisas.
parte 05 Arrays, strings e structsVinte e quatro leituras por dia, nomes de fazenda que não cabem, e o tanque que finalmente vira um tipo. 3 cap.
  1. 11
    Vinte e quatro leiturasA auditoria quer a temperatura de cada hora, o C guarda tudo em fila, e o tanque 213 finalmente mostra de onde tirava a temperatura dele.
  2. 12
    Strings não são stringsO nome da fazenda no SMS, um zero que ninguém escreve e todo mundo precisa, e oitenta e sete strcpy no arquivo do Seu Valdir.
  3. 13
    O tanque vira um tipoSeis arrays que andavam juntos até alguém ordenar um deles, o relatório que culpava a fazenda errada, e um tanque que finalmente cabe numa variável.
parte 06 Um projeto de verdadeSeparar o arquivo de onze mil linhas, entender o que acontece antes do compilador, e parar de compilar trinta e sete arquivos na mão. 3 cap.
  1. 14
    O arquivo de onze mil linhasTrês pessoas editando o mesmo arquivo, um conflito de merge de seiscentas linhas, e a diferença entre prometer uma função e escrevê-la.
  2. 15
    Antes de compilar, outra coisa aconteceUm #ifdef GATEWAY_2016 que ninguém sabe se está ligado, uma macro que divide a soma errada, e o compilador recebendo um arquivo que ninguém escreveu.
  3. 16
    Eu não vou compilar 37 arquivos na mãoUm comando de quatro linhas que vira um arquivo, um TAB que não pode ser espaço, e um cabeçalho alterado que ninguém recompilou.
parte 07 Memória que o programa pedeDuzentas e doze fazendas hoje, trezentas no ano que vem, e um gateway que engorda um pouco a cada hora. 2 cap.
  1. 17
    O programa precisa de mais memóriaQuarenta e três fazendas novas em março, um array que só sabe ter duzentos e doze, e a memória que o programa pede e precisa devolver.
  2. 18
    Quem esqueceu de dar free?Dois megabytes por dia, um reinício marcado para domingo às três da manhã, e a ferramenta que conta cada byte que o programa pediu.
parte 08 Lembrar, falhar e receber ordensO histórico que a auditoria pediu, o erro que ninguém verificava, e o programa que aceita argumentos na linha de comando. 3 cap.
  1. 19
    A cooperativa precisa lembrarSessenta e um mil leituras por dia, um auditor que quer ver qualquer uma delas, e a diferença entre guardar o número 100 e guardar o texto 100.
  2. 20
    O programa falhou. Mas por quê?Um cartão de memória cheio, um fopen que devolveu NULL para ninguém, e a convenção que faz cada função de C contar o que deu errado — se alguém perguntar.
  3. 21
    O programa recebe ordensUm caminho /home/valdir escrito no código, a linha com asterisco que o Kauã pulou no primeiro dia, e um array de ponteiros para textos.
parte 09 InvestigarO depurador, os testes, e as ferramentas que enxergam a memória que o olho não vê. 2 cap.
  1. 22
    O programa está mentindo para vocêUm depurador que para o programa onde você manda, um crash que não acontece quando ele está olhando, e um arquivo com a memória inteira do momento da morte.
  2. 23
    Funciona na minha máquinaQuarenta testes que cabem num arquivo, um assert que derruba o programa de propósito, e um compilador que aceita vigiar a memória que o Valgrind não vê.
parte 10 Perto do metalBits, registradores, tipos de tamanho exato, e o código que roda dentro da caixinha presa no tanque. 2 cap.
  1. 24
    O código dentro da caixinhaUm byte de status com oito notícias dentro, dois bytes de temperatura que precisam ser juntados, e um LED que acende escrevendo num endereço.
  2. 25
    Dois kilobytes de RAMQuatro horas sem sinal na Água Limpa, quarenta e oito leituras para guardar num chip que cabe numa unha, e um programa que não pode pedir memória a ninguém.
parte 11 O gateway conversaUm protocolo de doze bytes, um socket TCP, e duzentas e doze caixinhas falando ao mesmo tempo. 3 cap.
  1. 26
    Doze bytesUm JSON de setenta e três bytes que a bateria não paga, uma pergunta sobre a ordem dos bytes que ninguém tinha feito, e um protocolo que cabe numa linha de tabela.
  2. 27
    O gateway atende o telefoneUm cabo serial trocado por uma rede, uma porta 7070 esperando, e doze bytes que às vezes chegam em dois pedaços.
  3. 28
    Duzentas e doze caixinhas ao mesmo tempoUma thread para cada conexão, um contador que soma menos do que deveria, e o cadeado que deixa só uma de cada vez mexer no tanque.
parte 12 Três e dezesseteO crash que só acontece de madrugada, e o código antigo que agora dá para ler. 2 cap.
  1. 29
    A falha das 3h17Onze strcpy no relatório, uma fazenda que trocou de nome em julho, um relógio de quartzo que atrasa dois segundos, e tudo o que o livro ensinou numa única madrugada.
  2. 30
    Agora você sabe onde o programa estáUm auditor escolhendo um tanque ao acaso, um papel novo na parede, e o estagiário lendo o arquivo de 2016 como quem lê uma carta.
avaliações verificadas

O que leitores dizem sobre C One

Carregando avaliações deste livro…

Ver todas as avaliações deste livro →
git commit -m "primeiro capítulo"

C One

C do zero, dentro de um sistema que já vigia duzentos e doze tanques. O projeto começa a rodar no primeiro capítulo — e não para mais.

Atenção: o idioma desta edição é português.