Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

Linguaggio C ed Arduino

Progetti, interfacciamento, discussioni varie su questa piattaforma.

Moderatori: Foto UtenteWALTERmwp, Foto Utentexyz

0
voti

[1] Linguaggio C ed Arduino

Messaggioda Foto Utentepaofanello » 17 mag 2016, 22:41

Salve a tutti O_/ O_/
Come sapete Arduino ha reso semplice la vita a molti scansafatiche come me.
Tutto grazie a delle librerie che permettono con dei comandi molto intuitivi di controllare cose del micro che richiederebbero magari alcune linee di codice e un po' più di attenzione.
Mi chiedevo però dove fosse possibile trovare i "codici" di queste librerie.
Vorrei sapere insomma qual è il corrispettivo codice C che viene compilato quando io scrivo "digitalWrite(pin,LOW)" o gli altri comandi tipici di Arduino.
Ho cercato ma non ho trovato nulla ?%
Piuttosto che chiedere qualcosa a me, chiedila a Mara Maionchi. E' più competente.
Avatar utente
Foto Utentepaofanello
2.280 8 13
Expert
Expert
 
Messaggi: 532
Iscritto il: 7 lug 2015, 21:01

0
voti

[2] Re: Linguaggio C ed Arduino

Messaggioda Foto UtenteCandy » 17 mag 2016, 22:45

Immagino, non sapendolo, che sia know-how che si tengono ben nascosto nei loro cassetti, chiusi a chiave.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

2
voti

[3] Re: Linguaggio C ed Arduino

Messaggioda Foto UtenteSjuanez » 17 mag 2016, 23:26

Beh, a me risulta che l'IDE è opensource https://github.com/arduino/Arduino/tree/1.6.9 dove leggi anche

"Arduino uses GNU avr-gcc toolchain, GCC ARM Embedded toolchain, avr-libc, avrdude, bossac, openOCD and code from Processing and Wiring."

Magari comincia da qui o dalla community che lavora sulle fork.

O_/ O_/ O_/
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

0
voti

[4] Re: Linguaggio C ed Arduino

Messaggioda Foto UtenteTardoFreak » 17 mag 2016, 23:58

Foto Utentepaofanello perché non provi ad approfondire il concetto di layer di astrazione dell'hardware?
Una volta capito il concetto non avrai bisogno di sbirciare i sorgenti di arduino o di qualsiasi altro sistema, ma avrai una visione più corretta di come organizzare un programma ben scritto.
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

3
voti

[5] Re: Linguaggio C ed Arduino

Messaggioda Foto UtenteCandy » 18 mag 2016, 0:02

O.T.: Guardare il codice altrui non e` sempre un male.
Tanti anni fa, guardai il codice di come si calcolano le quattro funzioni trigonometriche con un micro che di suo eseguiva solo somme e sotrazioni...
Un algoritmo interessante che non conoscevo.
Avatar utente
Foto UtenteCandy
32,5k 7 10 13
CRU - Account cancellato su Richiesta utente
 
Messaggi: 10123
Iscritto il: 14 giu 2010, 22:54

4
voti

[6] Re: Linguaggio C ed Arduino

Messaggioda Foto UtenteTardoFreak » 18 mag 2016, 0:06

Quello che dici è vero.
Tuttavia Foto Utentepaofanello ha menzionato una funzione che rientra nel concetto di astrazione del hardware (anche se lascia molto a desiderare per motivi che non dirò).
A questo punto, perché girarci intorno invece di affrontare la cosa di petto? ;-)
"La follia sta nel fare sempre la stessa cosa aspettandosi risultati diversi".
"Parla soltanto quando sei sicuro che quello che dirai è più bello del silenzio".
Rispondere è cortesia, ma lasciare l'ultima parola ai cretini è arte.
Avatar utente
Foto UtenteTardoFreak
73,9k 8 12 13
-EY Legend-
-EY Legend-
 
Messaggi: 15754
Iscritto il: 16 dic 2009, 11:10
Località: Torino - 3° pianeta del Sistema Solare

0
voti

[7] Re: Linguaggio C ed Arduino

Messaggioda Foto UtenteSjuanez » 18 mag 2016, 7:52

Foto UtenteCandy ha scritto:O.T.: Guardare il codice altrui non e` sempre un male.
Tanti anni fa, guardai il codice di come si calcolano le quattro funzioni trigonometriche con un micro che di suo eseguiva solo somme e sotrazioni...
Un algoritmo interessante che non conoscevo.


No, infatti. Guardare il codice altrui è, secondo me, un ottimo esercizio. Fonte di grande ispirazione e istruzione. Soprattutto se è stato scritto da professionisti.

Consideriamo sempre che in informatica per ogni problema ci possono essere centinaia di soluzioni, dunque... :D

O_/ O_/ O_/
Più so e più mi accorgo di non sapere.

Qualsiasi cosa abbia scritto, tieni presente che sono ancora al mio primo rocchetto di stagno.
Avatar utente
Foto UtenteSjuanez
11,3k 6 8 13
G.Master EY
G.Master EY
 
Messaggi: 3479
Iscritto il: 18 mar 2015, 13:48

2
voti

[8] Re: Linguaggio C ed Arduino

Messaggioda Foto Utentepaofanello » 18 mag 2016, 15:00

Mi sa che il fatto di avere le idee poco chiare mi ha portato sulla cattiva strada.
Pensavo, analizzando i codici sorgenti di Arduino, di poter velocizzare qualche comando dato al micro senza però studiarmi per bene come andrebbe fatto veramente.
Non che non possa essere fatto, ma non mi piace la sensazione di ignoranza che mi sta dando quest'approccio.
Penso che seguirò l'esempio di Foto UtenteSjuanez e inizierò un libro sull'argomento, così da fare le cose con calma e metodo, poi magari mi darò un'occhiata ai sorgenti di Arduino per vedere come funzionano le sue librerie. E non il contrario.
Scusate se vi ho fatto perdere un po' del vostro tempo, però vi assicuro che qualcosa mi avete fatto capire: che ho troppo da capire :mrgreen:
Piuttosto che chiedere qualcosa a me, chiedila a Mara Maionchi. E' più competente.
Avatar utente
Foto Utentepaofanello
2.280 8 13
Expert
Expert
 
Messaggi: 532
Iscritto il: 7 lug 2015, 21:01

6
voti

[9] Re: Linguaggio C ed Arduino

Messaggioda Foto UtenteeAlucarD » 18 mag 2016, 15:14

il cassetto si chiama wiring_digital.c :mrgreen:
ed è di pubblico dominio

questa è digitalWrite()

Codice: Seleziona tutto
void digitalWrite(uint8_t pin, uint8_t val)
{
        uint8_t timer = digitalPinToTimer(pin);
        uint8_t bit = digitalPinToBitMask(pin);
        uint8_t port = digitalPinToPort(pin);
        volatile uint8_t *out;

        if (port == NOT_A_PIN) return;

        // If the pin that support PWM output, we need to turn it off
        // before doing a digital write.
        if (timer != NOT_ON_TIMER) turnOffPWM(timer);

        out = portOutputRegister(port);

        uint8_t oldSREG = SREG;
        cli();

        if (val == LOW) {
                *out &= ~bit;
        } else {
                *out |= bit;
        }

        SREG = oldSREG;
}


e le sue dipendenze
Codice: Seleziona tutto
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
        NOT_ON_TIMER, /* 0 - port D */
        NOT_ON_TIMER,
        NOT_ON_TIMER,
        TIMER2B,
        NOT_ON_TIMER,
        TIMER0B,
        TIMER0A,
        NOT_ON_TIMER,
        NOT_ON_TIMER, /* 8 - port B */
        TIMER1A,
        TIMER1B,
        TIMER2A,
        NOT_ON_TIMER,
        NOT_ON_TIMER,
        NOT_ON_TIMER,
        NOT_ON_TIMER, /* 14 - port C */
        NOT_ON_TIMER,
        NOT_ON_TIMER,
        NOT_ON_TIMER,
        NOT_ON_TIMER,
};


const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
        _BV(0), /* 0, port D */
        _BV(1),
        _BV(2),
        _BV(3),
        _BV(4),
        _BV(5),
        _BV(6),
        _BV(7),
        _BV(0), /* 8, port B */
        _BV(1),
        _BV(2),
        _BV(3),
        _BV(4),
        _BV(5),
        _BV(0), /* 14, port C */
        _BV(1),
        _BV(2),
        _BV(3),
        _BV(4),
        _BV(5),
};

const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
        PD, /* 0 */
        PD,
        PD,
        PD,
        PD,
        PD,
        PD,
        PD,
        PB, /* 8 */
        PB,
        PB,
        PB,
        PB,
        PB,
        PC, /* 14 */
        PC,
        PC,
        PC,
        PC,
        PC,
};

static void turnOffPWM(uint8_t timer)
{
        switch (timer)
        {
                case TIMER1A:   cbi(TCCR1A, COM1A1);    break;
                case TIMER1B:   cbi(TCCR1A, COM1B1);    break;
                case  TIMER0A:  cbi(TCCR0A, COM0A1);    break;
                case  TIMER0B:  cbi(TCCR0A, COM0B1);    break;
                case  TIMER2A:  cbi(TCCR2A, COM2A1);    break;
                case  TIMER2B:  cbi(TCCR2A, COM2B1);    break;
        }
}

const uint16_t PROGMEM port_to_output_PGM[] = {
        NOT_A_PORT,
        NOT_A_PORT,
        (uint16_t) &PORTB,
        (uint16_t) &PORTC,
        (uint16_t) &PORTD,
};
E l’uomo si addormentò e nel sogno creò il mondo
Avatar utente
Foto UtenteeAlucarD
1.210 3 5
Expert
Expert
 
Messaggi: 560
Iscritto il: 4 lug 2014, 11:01

0
voti

[10] Re: Linguaggio C ed Arduino

Messaggioda Foto Utentefranx » 22 mag 2016, 19:17

se sei interessato al C ti consiglio di programmare Arduino con le avr-libc,
ti basterebbe una riga di codice per attivare/azzerare un pin. Es.:

Codice: Seleziona tutto
PORTB &= ~(1 << PB1);  // PB1=0
PORTB |=  (1 << PB1);  //  PB1=1 
Avatar utente
Foto Utentefranx
465 3 10
Frequentatore
Frequentatore
 
Messaggi: 199
Iscritto il: 28 feb 2010, 17:43

Prossimo

Torna a Arduino

Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti