FUNZIONE C scrittura bit

di il
8 risposte

FUNZIONE C scrittura bit

Buongiorno,
avrei bisogno di aiuto: devo realizzare una funzione che mi permetta di modificare un singolo bit della PORTA2. Di seguito il codice che ho scritto:

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#include<sys/io.h>
#include <getopt.h>
#include<unistd.h>
#include <stdlib.h>


#define PORTBASE 0x3330
#define PORTA2 (PORTBASE+4) // type Output [ A7 . . . . . . A0] # pins [ 1 . . . . . .15]
#define BIT(x) (1<< (x)) // bit position crea una maschera impostando ad 1 il bit x e a 0 tutti gli altri


main()
{
int i;
int temp;
int uid = geteuid (); // Controllo l'user id
unsigned int c = 0;

if (uid) setreuid(0, 0); // imposto privilegi di root all'utente per accedere alla porta
setuid( 0 );

// Attivo la porta
if ( ioperm( PORTA2, 1, 1 ) < 0 ) // Abilito la porta A2
// exit (1);

PORTA2|= BIT(13); //turn on the 13th bit


// Scrivo 1111 1111 sulla porta in modo da alimentare tutti i data pin
//outb(0xff,PORTA2);

// Aspetto un secondo

setreuid( uid, uid ); // Revoco i permessi di root alla porta
// Disattivo i data pin scrivendo 0000 0000 sulla porta
// outb(0x00,PORTA2);

// Aspetto un secondo
//sleep(1);
return 0;

}
Questa funzione non viene compilata perchè l'istruzione PORTA2|= BIT(13); da il seguente errore
lvalue required as left operand of assignment. Qualcuno sa aiutarmi? Esiste eventualmente un'altro modo per fare questa funzione?

8 Risposte

  • Re: FUNZIONE C scrittura bit

    PORTA2 è un define non una variabile. Non puoi assegnare qualcosa ad un valore. Devi definire una variabile (int forse) che prende il valore iniziale di PORTA2.
    
    int portaA2 = PORTA2;
    portaA2 |= BIT(13);
    
  • Re: FUNZIONE C scrittura bit

    Ok, così la funzione viene compilata senza dare errori ma non funziona (abilitando il bit 13 ad 1 dovrebbe ccendersi una ventola). forse perchè così modifico il valore della variabile portA2, ma non scrivo il bit. Come posso fare?
  • Re: FUNZIONE C scrittura bit

    Devi cambiare tutti i riferimenti di PORTA2 con il nome della variabile
  • Re: FUNZIONE C scrittura bit

    L'unico riferimento a PORTA2 è nella riga di codice con l'OR... che ho già modificato con la variabile... Altri suggerimenti?
  • Re: FUNZIONE C scrittura bit

    //outb(0xff,PORTA2); non è un riferimento?
  • Re: FUNZIONE C scrittura bit

    È commentato, quindi non viene letto dalla funzione...
  • Re: FUNZIONE C scrittura bit

    Altri suggerimeti per questa funzione ?
  • Re: FUNZIONE C scrittura bit

    Altri suggerimeti per questa funzione ?
Devi accedere o registrarti per scrivere nel forum
8 risposte