- Discussão sobre licenças de software
- Diferenças entre kernel e sistemas operacionais
- Sistemas operacionais
- Kernel - funções:
- gerenciamento de tarefas
- comunicação entre processos
- gerenciamento de memória
- Instalação Linux: os alunos precisam instalar Linux, pelo menos em uma máquina virtual para poder acompanhar o curso.
- Os alunos precisam abrir uma conta no Github
- Exemplo de arquivo markdown
- Criação da chave ssh para GitHub
- Commit para o github
- Utilizaremos as linguagens: C, C++ e Python
- Emacs
Para instalar o Emacs no Ubuntu:
sudo apt install emacsInfelizmente o Emacs não vem comn as opções habilitadas, e habilitá-las requer um esforço e um tempo muito grande. Felizmente, existem alguns utilitários para isso. Um bom exemplo disso é o Spacemacs. Para instalar o Spacemacs, você pode seguir os passos indicados na web page anterior ou:
cd ~
git clone https://github.com/syl20bnr/spacemacs ~/.emacs.dAí é só executar o emacs normalmente:
emacsEle vai perguntar se você prefere o estilo vim ou emacs. Se você não sabe o que isso quer dizer, escolha emacs.
Algumas dicas úteis: pelo fato do Emacs ter sido escrito muito antes do DOS existir, quanto mais do Windows, ele utiliza algumas combinações de teclas pouco familiares aos iniciantes, devido aos diversos modelos de teclados existentes.
Quando se quer indicar uma tecla pressionada simultaneamente com a tecla
Control, por exemplo a teclaControlpressionada com a teclax, simultaneamente, indica-se porC-x. Para a teclaAltpressionada simultaneamente com uma tecla m, por exemplo, utiliza-se a notação:M-m. Em sistemas anteriores ao PC, a teclaAltse chamavaMeta, por isso oM-.
A combinação
C-gé utilizado comoCANCEL, quando se quer, por exemplo, abortar alguma entrada de texto ou comando.
O Emacs usa as teclas de Cut, Copy e Paste diferentes. Para o Cut, ele usa
C-w, para o Copy, ele usaM-we para o Paste, usa-se C-y. No entanto, se você preferir usarC-x,C-ceC-v, você pode escolher a opçãoCUA Modeno menu:F10->Options->Use CUA keys. Para ativar o menu, caso ele não esteja aparecendo, pressioneF10ouM-x menu-bar-mode, para deixá-lo permanente. Nessa última opção, a combinaçãoM-xirá abrir uma linha de comando para chamar funções internas escrita ememacs-lisp, que no caso foimenu-bar-mode.
Em muitos casos é interessante ativar a barra de ferramentas, com:
M-x tool-bar-mode.
Para se visualizar as opções de comandos pelo menu de teclas, pressione
M-m, tanto no modoEmacsquanto no modovim, ou a teclaEspaçono modovim.
Existem muitos guias e tutoriais para o Emacs disponíveis na rede. O site oficial é: https://www.gnu.org/savannah-checkouts/gnu/emacs/emacs.html.
Em português: no IME, EmacsWiki e MIT.
Um modo que ajuda muito para programação em C, ou mesmo C++, é através do commando: M-x semantic-mode e o M-x auto-complete-mode.
- Estrutura de programas em C
- Arquivos de código fonte (.c)
- Arquivos objeto (.o)
- Arquivos de cabeçalho (.h)
- Compilador GCC e suas flags
- Makefile:
Para criação e utilização do makefile no VS Code é necessário instalar uma extensão chamada Makefile Tools.
Para instalar abra o Quick Open (Ctrl + P) e cole o seguinte comando:
ext install ms-vscode.makefile-tools
- Aplicação dos qualificadores
static,volatile,register - Criação de arquivo
.gitignore - Realizando "merge" no repositorio do GitHub
- Utilizando threads
pthread_create()pthread_join()pthread_exit()
- Processos: criando processos com
forkeexec - Usando
man <fcn>para obter documentação sobre função<fcn> - Uso de semaforo (semaphore.h)
sem_init()sem_wait()sem_post()
- cmake
- argp
- popen
- pipe
- malloc
- gdb: rodando direto em linha de comando e rodando com a IDE Emacs
- lib electric-fence (-lefence): melhor detecção falhas de segmentação de memória
sudo apt install electric-fence- assert: testar partes do programa na fase de depuração
- esp32: esp-idf
Para instalar o IoT Development Framework da Espressif, siga os seguintes passos:
cd ~
mkdir esp
cd esp
git clone -b v4.3 --recursive https://github.com/espressif/esp-idf.git
cd esp-idf
./install.shO processo de instalação está finalizado nesse ponto.
Pode-se copiar um exemplo, dos vários disponíveis e rodar:
cd ~
mkdir Code
cd Code
cp -a ~/esp/esp-idf/examples/peripherals/ledc .
cd ledc
. ~/esp/esp-idf/export.shPara editar o exemplo:
emacs main/ledc_example_main.cidf.py menuconfig
idf.py build
idf.py -p /dev/ttyUSB0 flash monitor- Programação Orientada a Objetos
- Exemplo de orientação a objetos em C com opacidade, encapsulamento e integridade. Métodos mínimos: construtor, destrutor, representação em stream e inicializador range.c, range.h e oop1/main.c
- Programação Orientada a Objetos, utilizando linguagem com suporte a OOP:
C++ - Exemplo do objeto
range_tdefinido emCescrito agora emC++:- sobrecarga de funções e operadores
protected,privateepublic- passagem de argumentos por referência &
- Construtores
coute<<- chamada de código em
Ccomextern "C" namespacestdlibc++:std::
- Repassando alguns conceitos de OOP com
C++:- herança
- polimorfismo
- Polimorfismo em Python
- Manipulando arquivos de imagem:
- gparted
- cfdisk
- extended filesystem: ext2, ext3 e ext4
- ntfs
- vfat ou fat32
- partições primárias, partição extendida e partições lógicas
- arquivos de imagens e ferramentas para manipulação desses arquivos no HD local:
dd: copia blocos de dados binários.lsblk: lista os dispositivos de armazenamento do sistema, útil para mostrar a qual device um pen drive foi associado, por exemplo.truncate: altera o tamanho de um arquivo no HD, útil para criar um espaço vazio em uma imagem para expandir uma partição ou mesmo criar uma nova partição. Pode também diminuir o tamanho do arquivo, portanto use com atenção para não perder dados.parted,fdisk,cfdisk: ferramentas em modo texto para alterar partições em um dispositivo ou mesmo em um arquivo, da interface mais simples à mais sofisticada.Disks: aplicativo GNOME para editar e visualizar partições.gparted: aplicativo com boa interface gráfica para editar partições.losetup: /dev/loop0...
- estrutura de arquivos do Linux:
/binlink para/usr/bin: executáveis do sistema e aplicativos./boot: onde ficam as imagens do kernel e demais arquivos auxiliares, como as imagens RAM DISK (.rd)./dev: arquivos que dão acesso drivers aos dispositivos de hardware conectados no sistema, é gerenciado pelo aplicativoudev/etc: arquivos de configuração globais dos aplicativos e do sistema/home: onde se localizam os diretórios (ou pastas) dos usuários./lib: link para/usr/lib- /lib32 -> usr/lib32
- /lib64 -> /usr/lib64
- /libx32 -> /usr/libx32
/media: ponto de montagem dos dispositivos de armazenamento removíveis./mnt: ponto de montagem temporário, mais utilizado para manutenção./opt: diretório utilizado para instalação de aplicativos, onde os componentes ficam armazenados juntos, diferentemente da instalação tradicional, onde os arquivos de um aplicativo ficam distribuídos entre/etc,/usr/bin,/usr/lib,/usr/share,/var, etc./proc: ponto de montagem virtual com informações do estado do sistema./run: ponto de montagem virtual com informações do estado do sistema./sbin-> /usr/sbin/srv: ponto de montagem virtual com informações do estado do sistema./sys: ponto de montagem virtual com informações do estado do sistema./tmp: arquivos temporários do sistema, de aplicativos e de usuários, são apagados dependendo das configurações: em cada boot, a cada período de tempo de inatividade, ou se o processo que o gerou finalizou/usr: principais:bin: executáveisinclude: arquivos de cabeçalho, libc, glib, etc.lib*: bibliotecas do sistema e dos aplicativos.local: contém os subdiretóriosetc,bin,lib, comousr, mas para os aplicados gerados e instalados manualmente.man: contém a documentação de aplicativos e funções.sbin: executáveis do sistema, manutenção e de uso privilegiado, superusuário.share: contém dados dos aplicativos.src: contém código fonte de aplicativos, bibliotecas e comumente do kernel.
/var:cache: usado para armazenar dados temporários de estado ou de memória.log: contém os arquivos de log do sistema e de aplicativos e serviçoslock: contém arquivos de trava e sincronização entre aplicativos.
- Python
A aula consiste em uma atividade que será realizada pelos alunos. O exercício da aula 13 encontra-se na pasta exerc-1, ver README.
- Não reinvente a roda! Use bibliotecas
- Sempre dê preferência às bibliotecas padrão: um maior número de programadores a usa, com certeza, conferindo maior legibilidade e portabilidade ao seu código; já foram extensamente testadas, apresentando uma probabilidade muito menor de possuírem bugs.
- Dominar uma linguagem de programação não se resume à sintaxe e tipos de dados, é essencial saber utilizar a biblioteca padrão da linguagem.
Com esses conceitos em mente, refaça o exercício 1 (mas agora na pasta exerc-2), utilizando a GLIB. Essa pasta contém um código exemplo em sort.c.
Refazer a tarefa das aulas anteriores em C++, na pasta exerc-3 e utilizando cmake, que já foi criado. Após criar o arquivo sort.cpp, utilize:
$ cmake -B buildsomente uma vez, após isso, utilize somente:
$ make -C build
$ build/sortNão se esqueça: utilize a biblioteca padrão C++ stdlibc++!
Alternativa: refaça em Python, ou outra linguagem de alto nível.