Nesta época praticamente todo o desenvolvimento, tanto para os terminais de vídeo como para o microcomputador de 8 bits, era feito em Assembly. Era uma programação trabalhosa, tediosa e muito propícia a erros. Foi somente quando se começou a desenvolver software para 16 bits que se começou a usar linguagens de alto nível no software 'básico'. Posteriormente isto foi estendido para os terminais de vídeo, apesar de algumas desconfianças em termos de desempenho e requisitos de memória.
A linguagem C foi justamente desenvolvida para a programação de baixo nível em sistemas com poucos recursos
- implementa as estruturas básicas de programação (if, while, switch)
- dispõe de recursos para operações de baixo nível (ponteiros, manipulação de bits)
- requer um runtime bastante simples
- arquiteturas não apropriadas
- memória Ram limitada
- memória dividida em partes com características diferentes
O código abaixo é uma simplificação do software para o "Grilo Pulsante Fantasma" e dá uma primeira idéia do que é programar em C para microcontroladores:
#include <12F675.h>
#use delay(clock=4000000)
#fuses INTRC_IO, MCLR, BROWNOUT
volatile int1 fBeep;
volatile int16 contBeep;
void bipa (void)
{
fBeep = TRUE; contBeep = 0;
enable_interrupts (INT_TIMER0);
while (fBeep)
;
disable_interrupts (INT_TIMER0);
}
#int_TIMER0
TIMER0_isr()
{
if (++contBeep == 0x1000)
fBeep = FALSE;
else if (contBeep & 1)
output_low (BUZZER);
else
output_high (BUZZER);
}
void main()
{
set_tris_a (0x06);
#use fast_io(A)
setup_adc_ports (AN1_ANALOG);
setup_adc (ADC_CLOCK_INTERNAL);
set_adc_channel (1);
setup_timer_1 (T1_DISABLED);
setup_comparator (NC_NC_NC_NC);
enable_interrupts (global);
output_low (BUZZER);
while (1)
{
sleep ();
if (input (BOTAO) == 0)
bipa ();
if (read_adc() < ESCURO)
continue;
AcendeLed (LED_R);
delay_ms (10);
ApagaLed (LED_R);
if ((rand() & 0x07) == 0)
bipa ();
}
}
No código acima podemos reparar que:
- um programador C de desktop não vai ter dificuldade em entender boa parte do código
- existem uma série de comandos não padrão para o compilador (#use, #fuses, #int_TIMER0)
- existem uma grande quantidade de rotinas específicas para controle do hardware (neste caso em particular muitas destas rotinas na realidade geram diretamente código in-line)
* brinde inesperado: clique em "Conheça nossa história" e encontre uma menção nominal ao autor do blog!
Nenhum comentário:
Postar um comentário