spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Informatica > P. in C, C++

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 26-05-2005, 09.49.20
reda reda non è collegato
Nuovo robottaro
 
Data registrazione: 24-05-2005
Messaggi: 6
Potenza reputazione: 0
reda E' per ora ancora un mistero
Predefinito problemino con una macro

Scusate la domanda forse un po' stupida, ma se io ho una cosa del tipo:

#define _paste(a,b) a##b
#define PORTBIT(adr, bit) ((unsigned)(&adr)*8+(bit))

bit Servo0 @ PORTBIT(PORTB,7); // B7
bit Servo1 @ PORTBIT(PORTB,6); // B6

#define low(id) _paste(Servo,id) = 0
#define high(id) _paste(Servo,id) = 1

quando faccio high(1); viene fatto Servo1 = 1;
se perĂ² ho:

int i=1;
high(i);

E' come se avessi Servoi = 1; quindi non funziona.

Invece che fare così:

#define high(id) { if (id == 0) _paste(Servo,0) = 1; \
else _paste(Servo,1) = 1; }

c'è un metodo piĂ¹ elegante di farlo? (ne ho 20 di servo quindi verrebbe bruttino).

Grazie.
Rispondi citando
  #2  
Vecchio 26-05-2005, 11.43.42
L'avatar di sergio_camici
sergio_camici sergio_camici non è collegato
Administrator
 
Data registrazione: 23-05-2002
Residenza: Binasco (MI)
Età : 55
Messaggi: 2,665
Potenza reputazione: 304
sergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua famasergio_camici La sua reputazione è oltre la sua fama
Predefinito Re: problemino con una macro

A mio modestissimo parere sta i facendo confusione tra direttive di precompilazione e le funzioni vere e proprie.

Mi pare di capire che vorresti avere una sola istruzione in grado di alzare (o anche abbassare) un pin di una porta avendo 20 pin da gestire ovviamente su porte diverse.

In tal caso farei una funzione cosi':
Codice:
void Setta(uchar x, status) {
 switch(x)  {
 case 1: PORTBIT(PORTB,7) = status; break;
 case 2: PORTBIT(PORTB,6) = status; break;
... ecc ecc
 case 20:  PORTBIT(PORTD,0) = status; break;
 }
}

#define ON 1
#define OFF 0

void main(void) {
 Setta(1,ON);
 Setta(15,OFF);

}
spero di essere stato chiaro.

ciao
S
Rispondi citando
  #3  
Vecchio 26-05-2005, 18.57.47
reda reda non è collegato
Nuovo robottaro
 
Data registrazione: 24-05-2005
Messaggi: 6
Potenza reputazione: 0
reda E' per ora ancora un mistero
Predefinito

Grazie, seguo il tuo consiglio così non mi complico la vita.
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
problemino rccdcc Elettronica 6 29-10-2010 17.55.07
Problemino con interrupt Italia Elettronica 2 07-10-2009 10.34.33
ho un problemino con wxdevc++ angel10 P. in C, C++ 0 31-01-2008 16.34.59
Problemino ...... Charlie Elettronica 6 01-02-2006 20.49.34
comandi DEBUG & MACRO dwz P. in Basic per micro 15 13-02-2005 14.45.28


Tutti gli orari sono GMT. Adesso sono le: 23.45.28.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB