Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/10/2014, 05:16
iapellaniz
 
Fecha de Ingreso: octubre-2014
Ubicación: Torrejón de Ardoz
Mensajes: 4
Antigüedad: 10 años, 2 meses
Puntos: 0
Respuesta: Descriptores de ficheros.

Hola de nuevo:

He seguido investigando y he descubierto que en cuanto creo el objeto en el programa principal, automáticamente se destruye. Por eso cambia el descriptor de fichero.

Lo que no sé es porque se destruye el objeto antes de la finalización del programa.

Os dejo la cabecera del objeto y el fichero de prueba.

#ifndef I2C8BIT_H
#define I2C8BIT_H

#include <string>
#include <stdint.h>
#include <linux/i2c.h>

class i2c8Bit {
private:
std::string i2cFileName; //i2c device name e.g."/dev/i2c-0" or "/dev/i2c-1"
int i2cDescriptor; // i2c device descriptor
uint8_t deviceAddress; // i2c device address

//private member functions
int openI2C(); //open an I2C device. Called only in constructors
int closeI2C(); // close an I2C device. Called only in destructor

int piBoardRev();
int i2c_smbus_operation(char, uint8_t, int, union i2c_smbus_data *);

public:
i2c8Bit(uint8_t); // default constructor
i2c8Bit(uint8_t, std::string); //over loaded constructor
~i2c8Bit(); // destructor

uint8_t i2cRead();
uint8_t i2cReadReg8(uint8_t);
uint16_t i2cReadReg16(uint8_t);

int i2cWrite(uint8_t);
int i2cWriteList(uint8_t, uint8_t *, int);
int i2cWriteReg8(uint8_t, uint8_t);
int i2cWriteReg16(uint8_t, uint16_t);

};

#endif



///========

Fichero main:

#include "i2c8Bit.h"

i2c8Bit *smbus;

int main()
{
smbus = new i2c8Bit(0x20);

smbus->i2cWriteReg8(0x0A,0x28);

return 0;
}

El comando de compilación es: g++-4.8 prueba.c i2c8Bit.cpp -o prueba


Saludos.