Buckminster
(usa Debian)
Enviado em 22/08/2024 - 18:32h
Microcontrolador: é um chip de circuito integrado único, com memória, núcleo de processador e periféricos de entrada e saída que têm o poder de serem programados. Pode ser considerado um computador pequeno. Exemplo: Arduino.
O Raspberry Pi é considerado um computador propriamente dito que contém um microcontrolador.
As arquiteturas básicas de microcontroladores podem ser RISC e CISC.
O RISC (Reduced Instruction Set Computer) tem intruções reduzidas, utiliza um conjunto de instruções simples que são executadas em um único ciclo de clock.
O CISC (Complex Instruction Set Computer) têm um grande número de instruções, que podem ser bastante complexas e capazes de realizar tarefas múltiplas em poucos ciclos, os processadores RISC têm um número menor de instruções, mais homogêneas e rápidas.
Microprocessador: tem somente um processador de tamanho pequeno em seu circuito integrado, não tem periféricos, conversores, memórias diversas, etc. Exemplo: uma GPU.
Dito isso, vamos começar pela definição, grosso modo, de compressão: como o nome já diz "compressão" é comprimir o código original para economia de processamento e memória. No caso de compressão de dados é, basicamente, para economia de espaço.
Na compressão de dados, os populares zip, rar, etc, trabalham com determinados algoritmos e em determinadas taxas (razões) de compressão.
A compressão de código trabalha com razão de compressão, não exatamente taxa de compressão como na compressão de dados, aí entram as arquiteturas dos processadores, microcontroladores, etc.
Mas veja bem, os métodos de compressão de dados não são os mesmos para compressão de código. Os algoritmos até podem ser reutilizados de um para o outro.
Por exemplo, no caso de certos tipos de microcontroladores, as palavras de códigos podem ser quebradas a fim de formar palavras de 32 bits. Os bits restantes da palavra de código quebrada são colocados na próxima palavra de 32 bits. O tamanho de uma palavra código é limitado em 16 bits. Portanto, no pior dos casos, uma palavra conterá, pelo menos, um padrão.
Em outros, as palavras de código podem ser quebradas com o objetivo de formar palavras de 16 bits, sendo o tamanho de uma palavra de código limitada a 8 bits.
Lembre que estamos falando, basicamente, de voltagens (tensões elétricas) e frequências (número de ondas elétricas por segundo) que ficam magnetizadas nas memórias, sejam elas, por exemplo, discos SD/HD (considerada memória permanente) ou RAM (memória randômica).
Um bit (0 ou 1) representa uma determinada voltagem/frequência, por exemplo - falaremos só em voltagem por economia de palavras -, uma voltagem na memória RAM de 1,27v representa um bit 1 e uma voltagem de 0,32v representa um bit 0. Isso depende de cada fabricante.
Então você tem seu código original em texto, mas quer diminuir os custos ou aumentar as funções do código, uma das maneiras é usar um algotritmo já existente, como o de Huffman.
Com relação à tua dúvida:
"o PIC16F84 geralmente atinge resultados de 2 para 1 na compressão de código e 4 para 1 na velocidade, em relação aos outros microcontroladores de 8 bits da sua classe."
O PIC16F84 possui, basicamente, 68 bytes de memória RAM, 64 bytes de EEPROM e um timer de 8 bits, por isso é considerado de classe de 8 bits, então, provavelmente, ele terá um tamanho padrão de uma palavra de código limitada a 8 bits.
2 para 1 é a taxa de compressão.
Os microcontroladores já saem prontos de fábrica, vamos por dizer assim, com essas taxas de compressão, dependendo da arquitetura, como eu falei antes. Então eles já saem prontos para comprimir o código ao programar-se para microcontroladores.
Os desenvolvedores de microcontroladores que tem de saber disso tudo; os programadores de, por exemplo, Arduino, não se faz muito necessário, mas, como se diz, conhecimento não ocupa espaço.
Compressão de código, nesse sentido, nada mais é do que lidar com endereçamentos nas e das memórias RAM com índices, basicamente, e o microcontrolador já sai pronto de fábrica, na maioria das vezes.
Depois tem também a descompressão.
Aliás, de um modo geral, compressão (tanto de dados como de código) podemos dizer que é semelhante a um índice de um livro onde o microcontrolador economiza tempo para encontrar determinado dado ou código, mas o índice está separado do livro, no caso o índice está na RAM e os dados no SD/HD. Na compressão de código, fica na RAM e na EEPROM.
O Arduino, por exemplo, tem bibliotecas de compressão específicas para cada caso: Shox96 Progmem Compression, Polyline, etc, mas que não são compressão de código propriamente dita para microcontroladores uma vez que trabalham com funções específicas e não saem embutidas de fábrica, mas dão uma boa idéia.
Não sei se me fiz claro, porque tem muito mais coisas como o clock, qualidade do material empregado (ouro, cobre, etc), mas acredito que deu para entender.
O Maurício resumiu bem quanto ao resultado.
https://ic.unicamp.br/~pannain/pub/pub/tese.pdf
https://sweet.ua.pt/jpa/Downloads_files/ArtigoE&T_21394_21540.pdf
https://www.arduino.cc/reference/pt/language/functions/analog-io/analogread/
_________________________________________________________
Always listen the Buck!
Enquanto o cursor estiver pulsando, há vida!