Pages: 1 ... 3 4 [5] 6 7 ... 9   Go Down
Author Topic: If-Switch-Array-Millis-For  (Read 5247 times)
0 Members and 1 Guest are viewing this topic.
Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22730
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Qualcuno diceva che i computer non sbagliano, sbagliano però gli uomini a programmarli  smiley-lol
Logged


0
Online Online
Faraday Member
**
Karma: 46
Posts: 5873
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

e si, hai proprio ragione.

certo che la storia del brake non ha proprio senso, perche' non l'hanno mai corretto ? non vedo nessun utilizzo del comando.
Cioe' se proprio vuoi che sia il case 1 che il 2 venga eseguito, tanto vale farne solo uno. perche' mai potrebbe servire fare due case per poi togliere il brake e farli eseguire entrambi senza il controllo sulla variabile ?

bha
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22730
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

certo che la storia del brake non ha proprio senso,
BREAK, brake è il freno delle macchine  smiley-grin smiley-grin

Quote
perche' non l'hanno mai corretto ? non vedo nessun utilizzo del comando.
Perché in circolazione ci saranno qualcosa come 40 anni di codice scritto che smetterebbe di funzionare.  smiley-wink

Quote
Cioe' se proprio vuoi che sia il case 1 che il 2 venga eseguito, tanto vale farne solo uno. perche' mai potrebbe servire fare due case per poi togliere il brake e farli eseguire entrambi senza il controllo sulla variabile ?

Questo non lo so.
Logged


0
Online Online
Faraday Member
**
Karma: 46
Posts: 5873
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma a livello Arduino pero' si potrebbe eliminarlo, se veramente non ha nessunissima funzione pratica.
La versione C di arduino non e' forse semplificata per rendere piu' facili le cose ?
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22730
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Andrebbe modificato il compilatore gcc-avr
Logged


Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 129
Posts: 9419
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

certo che la storia del brake non ha proprio senso, perche' non l'hanno mai corretto ? non vedo nessun utilizzo del comando.

Break è una istruzione del C, serve per interrompere l'operazione in corso, è importante che ci sia perché senza quel comando non potresti mai uscire in anticipo da un ciclo.
Per esempio puoi usare break per uscire da una for o una while se mentre le esegui si verifica una condizione di errore.
Nella switch  break si usa per interrompere l'esecuzione del ciclo dopo aver eseguito la parte di codice corrispondente alla condizione di ingresso, non ha alcun senso continuare a verificare le altre condizioni, i vari case, visto che la condizione di controllo rimane quella rilevata all'ingresso della switch e non verrebbe eseguito nessun ulteriore codice.
Logged

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22730
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Break è una istruzione del C, serve per interrompere l'operazione in corso, è importante che ci sia perché senza quel comando non potresti mai uscire in anticipo da un ciclo.
Per esempio puoi usare break per uscire da una for o una while se mentre le esegui si verifica una condizione di errore.
E su questo siamo d'accordo.

Quote
Nella switch  break si usa per interrompere l'esecuzione del ciclo dopo aver eseguito la parte di codice corrispondente alla condizione di ingresso,
Ma difatti la discussione non verteva sull'inutilità del break ma sulla sua obsolescenza. Cioè, dovrebbe essere implicito che arrivati alla fine di un blocco introdotto dallo statemante "case" il flusso di esecuzione proseguisse al di fuori dello switch, dato che il "case" voluto è già stato analizzato.
Se poi uno vuole uscire a metà del blocco, potrebbe introdurre volontariamente un break.

Quote
non ha alcun senso continuare a verificare le altre condizioni, i vari case, visto che la condizione di controllo rimane quella rilevata all'ingresso della switch e non verrebbe eseguito nessun ulteriore codice.
Invece il reference dice l'opposto:
Quote
The break keyword exits the switch statement, and is typically used at the end of each case. Without a break statement, the switch statement will continue executing the following expressions ("falling-through") until a break, or the end of the switch statement is reached.
Se non si mette il break alla fine di un blocco di codice introdotto da un case, l'esecuzione prosegue lungo i blocchi successivi fino al raggiungimento di un break oppure all'uscita dallo switch.
Logged


Rome
Offline Offline
God Member
*****
Karma: 1
Posts: 643
La mia prima bromografata!!
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Non sono un esperto, quindi potrei sbagliare alla grande,ma penso che non è detto che solo un case debba essere Vero. nel senso che io posso aver bisogno anche di controllare le altre condizioni, anche se il primo case è vero, no? per questo non metterei il break.
...certo che se controllo una variabile, non può essere 1 e 2 allo stesso tempo..

quindi si, mi sa che non è utile.
Logged

0
Online Online
Faraday Member
**
Karma: 46
Posts: 5873
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro e dab
la situazione assurda e' proprio che omettendo il break non viene controllata la verificabilita' della variabile.

Il case successivo viene eseguito senza che la variabile sia vera, proprio come dice Leo, io logicamente oltre a leggerlo l'ho "Testato" personalmente  smiley

infatti non venivo a capo della situazione proprio per questo comportamento illogico, da qui la richiesta di rimozione, in quanto il break e' obbligatorio in un case, quindi per semplificare l'Idea di arduino potrebbe ometterlo visivamente
« Last Edit: November 10, 2011, 07:09:59 am by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

0
Online Online
Faraday Member
**
Karma: 46
Posts: 5873
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

astro e dab
la situazione assurda e' proprio che omettendo il break non viene controllata la verificabilita' della variabile.

Il case successivo viene eseguito senza che la variabile sia vera, proprio come dice Leo, io logicamente oltre a leggerlo l'ho "Testato" personalmente  

infatti non venivo a capo della situazione proprio per questo comportamento illogico, da qui la richiesta di rimozione, in quanto il break e' obbligatorio in un case, quindi visto che Arduino si prefigge la semplificazione, potrebbe "nasconderlo" alla vista dei poveri non programmatori come me.
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22730
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Toglierlo è impossibile  smiley-grin
Andrebbe cambiato il linguaggio. Non lo faranno MAI, te l'ho già detto  smiley-lol smiley-lol
Logged


0
Online Online
Faraday Member
**
Karma: 46
Posts: 5873
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

tu sei del campo, io no, quindi probabilmente mi mancano vari passaggi, ma quello che intendo io e' questo:
piu' volte ho letto che scrivere programmi con l'Arduino IDE e' piu' semplice del C puro. Perche' e' piu' semplice ? da quel che ho capito c'e' un wiring punto qualcosa che si inframezza con il compilatore C.
Se ho capito bene la cosa allora quello che intendo io e', usando questa procedura, nascondere il break. cosi' come viene nascosto l'header, o altre cose che ho letto.

Quindi di certo non andare a livello del C o del compilatore, ma nascondere l'assurdita' del break, passandola a chi di dovere durante la compilazione.

Il file c che ne deriverebbe lo continuerebbe ad includere, in modo da restare compatibile con il resto del mondo, e' solo a livello IDE che dovrebbe essere rimosso. Se invece vengono dimostrati dei casi in cui serve allora e' diverso, ma non mi sembra che ce ne siano per ora.
« Last Edit: November 10, 2011, 08:49:55 am by Testato » Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22730
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Io del campo? Ah ah ah  smiley-lol smiley-lol
Wiring è una estensione del C. E' una libreria che viene inclusa e che aggiunge funzionalità specifiche per gestire l'HW del micro ma non è nulla di diverso rispetto a scriverti le funzioni per proprio conto.
Ma alla fine il compilatore è sempre quello.
Logged


0
Online Online
Faraday Member
**
Karma: 46
Posts: 5873
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hai una rivista linux, ti assicuro che se non sei del campo (programmazione) lo sei almeno 10 volte piu' di me  smiley
Ma ad esempio millis e' una funzione, e fa x cose, creata dall'arduino team giusto ?
in C esiste la funzione millis ?
allo stesso modo potrebbero fare SWITCHCASE che non abbia bisogno di breck

ot: hai in programma articoli sulla nuova ubuntu ?
Logged

- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

Global Moderator
Italy
Online Online
Brattain Member
*****
Karma: 327
Posts: 22730
Logic is my way
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Questa è la funzione millis:
Code:
SIGNAL(TIMER0_OVF_vect)
{
// copy these to local variables so they can be stored in registers
// (volatile variables must be read from memory on every access)
unsigned long m = timer0_millis;
unsigned char f = timer0_fract;

m += MILLIS_INC;
f += FRACT_INC;
if (f >= FRACT_MAX) {
f -= FRACT_MAX;
m += 1;
}

timer0_fract = f;
timer0_millis = m;
timer0_overflow_count++;
}

unsigned long millis()
{
unsigned long m;
uint8_t oldSREG = SREG;

// disable interrupts while we read timer0_millis or we might get an
// inconsistent value (e.g. in the middle of a write to timer0_millis)
cli();
m = timer0_millis;
SREG = oldSREG;

return m;
}
Un contatore come quelli che ho fatto io sul timer 0 e poi una funzione che restituisce tale valore.
Questo per dirti che non è nulla di trascendentale. Ecco perché la gente programma gli Atmega anche in C puro, ricreandosi le cose che mancano. Oppure inglobando semplicemente Wiring.

OT:
non l'ho ancora fatto il test
« Last Edit: November 10, 2011, 09:35:49 am by leo72 » Logged


Pages: 1 ... 3 4 [5] 6 7 ... 9   Go Up
Jump to: