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?