Home
Accesso / Registrazione
 di 

info funzione

5 risposte [Ultimo post]
ritratto di OPGUIDO
Offline
Titolo: User++
Utente++
Ultima visita:
1 anno 42 settimane fa
Utente dal: 11/06/2011
Messaggi: 58

Salve,sto cercando di imparare piu cose sulla programmazione dei microcontrollori , mi spiegate come si scrive in C una funzione fuori dal main e che il main la riconosca?
Per cortesia mi portate un esempio.
Grazie

ritratto di ingmarketz
Offline
Titolo: User+
Utente+
Ultima visita:
1 anno 13 settimane fa
Utente dal: 09/11/2011
Messaggi: 37
programmare il micro

Ciao, bhe la scrittura in C di un firmware è uguale alla stesura di un normale programma C eccetto per il fatto che dovrai avere delle librerie dedicate alle varie operazioni specifiche per il tuo hardware in questo caso il microcontrollore. Mi spiego meglio se tu dovessi scrivere un firmware molto semplice in cui devi accendere un LED ad esempio che si trova collegato al pin x del microcontrollore basta cercare nelle librerie come si chiama la variabile che rappresenta per quel PIN è assegnare a tale variabile il valore 1 inteso come livello logico alto per esempio.

Chiaramente il mio è un esempio molto astratto, perchè ad esempio spesso le librerie contengono variabili che rappresentano un gruppo di bit associati a un gruppo di pin , poi si deve affrontare il problema di impostare tali pin come uscite (output) o come ingressi(input) ma l'uso del C semplifica molto queste operazioni perchè tutte queste cose possono essere fatte operando su variabili che rappresentano come dicevo prima : i pin o registri del microcontrollore.(nella maggior parte dei casi rappresentano registri del micro) .

Se dovessi ad esempio scrivere un firmware per decrementare un registro contatore interno al microcontrollore basta solo cercare con che nome la variabile che rappresenta il registro si presenta nelle librerie e usarla all'interno di un tipico ciclo for (che se hai dimestichezza con il C sai sicuramente impostare ) .

Quindi in sostanza sarebbe meglio che tu abbia prima buona dimestichezza con il C se hai già acquisito tali nozioni, allora inizia a scaricare qualche firmware di esempi che trovi su internet o su libri come ad esempio firmware per accendere led , vedrai che saprai interpretare le operazioni che vengono svolte perchè è un semplice esercizio di interpretazione di linguaggio C .

Infine volevo aggiungere che oltre a conoscere il C e analizzare le librerie per prendere familiarità con le variabili che dovrai usare è necessario ancor prima che tu sappia qual'è l'architettura del tuo microcontrollore ovvero devi prendere il datasheet e studiarlo per capire a livello hardware quali saranno i registri o le funzionalità del micro che vuoi usare una volta noti questi aspetti il gioco è fatto: basta solo capire come le librerie rappresentano tali entità che siano registri o funzionalità , un tipo di funzionalità può essere :
- routine di gestione di interrupt => ci sarà nelle librerie una funzione ad esempio:
int gestore_interrupt(int interrupt){}
di cui dovrai scrivere il corpo della funzione
- routine di gestione del watchdog timer(un tipo di timer contenuto in alcuni micro)
-etc...

Spero di essere stato abbastanza chiaro per qualsiasi altra info o chiarimento ci trovi qui. a presto

ritratto di ingmarketz
Offline
Titolo: User+
Utente+
Ultima visita:
1 anno 13 settimane fa
Utente dal: 09/11/2011
Messaggi: 37
conclusione

a scusa in conclusione non ho risposto alla tua domanda: se effettivamente pensi di non sapere scrivere una funzione fuori dal main forse dovresti ripassare il C un po più approfonditamente ovvero il problema non è relativo alla programmazione hardware ma software. ciao spero che le mie critiche costruttive ti siano state id aiuto.

ritratto di Emanuele
Offline
Titolo: Moderator
Moderatore
Ultima visita:
55 min 21 sec fa
Utente dal: 28/07/2007
Messaggi: 1022
Utente PREMIUM
Programmino in C (embedded)

Ciao OPGUIDO,
il normale flusso di programma in un microcontrollore , dopo le direttive al compilatore, prevede la funzione main (che deve essere vuota - void)
Al di fuori del mai puoi scrivere qualsiasi altra funzione, sia sopra che sotto (nell'editor di testo) questa potrà essere richiamata dal main come si richiama una normale funzione (assimilabile alle chiamate e subroutine 'call' che fai in assembler)


//DIRETTIVE
#include <usart.h>
#include <stdio.h>

#pragma config PWRT = OFF	//disable power up

/* asm_timed_delay is found in an assembly file */
extern void asm_txrs (unsigned char);

#define POWER_ON	PORTAbits.RA4

//FUNZIONE
void putsUARTema2( char *data)
{
  do
  {    						
    asm_txrs(*data);		// Transmit a byte
  } while( *data++ );
}

//MAIN
void main (void) //MAIN
{	
 //MAIN_LOOP
     do
       {
        putsUARTema2( inputstr );// Transmit string
       } while (1); //MAIN LOOP
}

Chiedimi pure cosa non comprendi (considera sempre che questo è il mio modo di programmare in c embedded, non è assoluto, questa è la bellezza/forza del C :-)

ritratto di OPGUIDO
Offline
Titolo: User++
Utente++
Ultima visita:
1 anno 42 settimane fa
Utente dal: 11/06/2011
Messaggi: 58
Grazie a tutti, apprezzo

Grazie a tutti, apprezzo tutti i consigli, mi aiutano a crescere.
Per Emanuele, vedere un codice scritto per me è piu intuitivo, grazie. Ancora una domanda, le funzioni scritte fuori dal MAIN per funzionare devono essere sempre richiamate all'interno del MAIN?

ritratto di Emanuele
Offline
Titolo: Moderator
Moderatore
Ultima visita:
55 min 21 sec fa
Utente dal: 28/07/2007
Messaggi: 1022
Utente PREMIUM
c embedded

Qualsiasi funzione per 'funzionare' deve essere richiamata.
Semplificando, solo il Main parte di default ed infatti deve essere void.

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti