Visualizza messaggio singolo
Vecchio 15 ottobre 10, 11:11   #7 (permalink)  Top
Davide B.
User
 
Data registr.: 12-04-2006
Residenza: Mondovì
Messaggi: 103
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.
Davide B. non è collegato   Rispondi citando