Citazione:
|
La mia domanda è nata dall'affermazione di Elnonino, dove si diceva che alcune funzioni di libreria per ARM sono più veloci in C che in ASM.
|
Ed io molto velatamente insistevo sul fatto che l'affermazione la faccia ST. Che, in campo ARM, non gode di un'ottima fama. Chi ha usato i loro primi Cortex sa di cosa parlo.
Per ritornare al tema, continuo a ritenere il C LA scelta. Prendi il compilatore che vuoi, basta che sia C. Perchè per qualsiasi micro ha un compilatore C.
Non è che cosa fai in C tu non lo possa fare in basic o in pascal, si tratta di acquisire degli automatismi nel pensare che ti rimangono. Punto e basta.
Alla fine della fiera, le prime quattro cavolate in C, le fai senza grossi problemi, e quando devi fare quelle successive, ti sei smaliziato e vai avanti.
Il primo impatto è un po' criptico, ma lo scoglio non è così duro.
Credo che la domanda sul C per microcontrollori andrebbe impostata così.
Quali sono i primi passi che devo fare per poter programmare in C un microcontrollore?
La MIA risposta è:
Passo 0: Trovati un compilatore, un programmatore o un debugger che ti consenta di scaricare il compilato nel micro ed una scheda FUNZIONANTE da poter utilizzare per i tuoi esperimenti. Provi a buttarci dentro un programma demo qualsiasi. Quando programmi ed esegui, puoi passare al punto 1.
Passo 1: Scrivi il classico programma HelloWorld. Che, per i micro NON è questo
Codice:
#include <stdio.h>
int main()
{
printf("hello, world");
return 0;
} Ma il codice per far lampeggiare dei led. Ovvero, ad esempio, questo (Mikroc, Micro PIC16F887)
Codice:
void main()
{
ANSEL = 0; // I pin AN sono I/O Digitali
ANSELH = 0;
C1ON_bit = 0; // Disabilito i comparatori
C2ON_bit = 0;
TRISA = 0x00; // Imposto la direzione della porta come uscite
TRISB = 0x00; // Imposto la direzione della porta come uscite
TRISC = 0x00; // Imposto la direzione della porta come uscite
TRISD = 0x00; // Imposto la direzione della porta come uscite
do {
PORTA = 0x00; // Spegni i led su PORTA
PORTB = 0x00; // Spegni i led su PORTB
PORTC = 0x00; // Spegni i led su PORTC
PORTD = 0x00; // Spegni i led su PORTD
Delay_ms(1000); // delay di 1 secondo
PORTA = 0xFF; // Accendi i led su PORTA
PORTB = 0xFF; // Accendi i led su PORTB
PORTC = 0xFF; // Accendi i led su PORTC
PORTD = 0xFF; // Accendi i led su PORTD
Delay_ms(1000); // delay di 1 secondo
} while(1); // Cicla per sempre
} Notare che questo programma è la versione per sboroni che fa lampeggiare tutti i led (più o meno) attaccati, e che il ciclo "forever" lo si può scriver in almeno altri 3 modi semplici(for (;;), while (1), goto)
Dopo il punto 1, fatto funzionare e capito cosa fanno le varie sitruzioni, si può andare avanti con semplici circuiti combinatori (leggo degli ingressi, setto delle uscite), fino alle cose più complicate.
Ma QUESTO è il punto di partenza, ovviamente secondo me.