Page 1 sur 1

Recherche un pro du C sous linux

Publié : lun. 31/mars/2008 15:52
par cha0s
j'ai un gros probleme avec une librarie fait maison, elle se charge sans probleme seulement j'ai du oublié de declarer quelque chose car losque j'appelle une fonction avec parametre j'ai un illegal memory access.

par exemple

Code : Tout sélectionner

Debug OpenLibrary(0, "./liboled.so.1.0")
ExamineLibraryFunctions(0)
init = GetFunction(0, "oled_Initialize")
Debug init
CallCFunctionFast(init, #Null)
plante sauf si je retirre l'atribut #Null


la partie oled qui nous m'interesse
oled.c

Code : Tout sélectionner

char* oled_Initialize(char* dev){

	oled_configtty(); //configuration des entrées/sorties du port série
	
	if(dev==NULL){
		strcpy(dev,LCD); 
	} // si aucun périphérique n'est spécifié, on spécifie celui par défaut

	fd = oled_setconfig(LCD); //application de la configuration (avec sauvegarde de l'ancienne
	
	
	if(fd==EXIT_FAILURE){
		fprintf(stderr,"Fatal error : %s (%d)\n", strerror(errno), errno);
		exit(EXIT_FAILURE);
	}
	//tester si une structure est vide???
	//affectation a une structure a partir de son pointeur
	
	unsigned char argtab[1]={'U'};
	SENDLCD(argtab);
	
	unsigned char argtab2[3] = {'Y', 0x03, 0x01};
	SENDLCD(argtab2);
	
	/*infos = *(oled_info(OLED_INFOOUTPUT_SERIAL));*/
	
	/*if(infos==NULL){
		fprintf(stderr, "Can not retrieve OLED informations\n");
	}*/
	
	return dev;
} 
le oled.h

Code : Tout sélectionner

#ifndef OLED_H

#define OLED_H

#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<termios.h>
#include<errno.h>
#include<fcntl.h>
#include<unistd.h>
#include<stdbool.h>

#define BAUDRATE B115200

#define LCD "/dev/ttyUSB0"
#define SENDLCD(str) oled_sendlcd(str,(sizeof(str)/sizeof(*str)))

#define ACK 0x06
#define NACK 0x15
/*declaration en tout genre*/
char* oled_Initialize(char* dev);
int oled_finalize();
void oled_configtty();
int oled_setconfig();
int oled_restoreconfig();
unsigned char * oled_sendlcd(unsigned char *data, int taille);
unsigned char * oled_sendlcdans(unsigned char *data);

bool iscoordvalid(unsigned char x, unsigned char y);
oled_color16 * oled_color24to16(oled_color24 * pColor);

int oled_erasescreen();
int oled_backlight(char value);
int oled_displaycontrol(oled_display statut);
int oled_contrast(char value);
int oled_powercontrol(oled_power state);
void oled_setinfostruct(oled_deviceinfo info);
oled_deviceinfo * oled_setinfo(oled_devicetype type,char hardware_rev, char firmware_rev, oled_res horizontal_res, oled_res vertical_res, oled_flash flash_memory_size);
oled_deviceinfo * oled_info(oled_infooutput output);


#endif

Publié : mer. 02/avr./2008 19:29
par Anonyme
Essaye comme ca :

Code : Tout sélectionner

extern 'C'
{

void mafunc(){
//**code**//
}


}

Publié : jeu. 03/avr./2008 15:33
par cha0s
merci mais trop tard,le but etait de realiser un interpreteur de commande pour afficher des formes simple sur un petit ecran led, finalement j'ai decidé de generer du code c utilisant la lib ^^. (solution barbare mais sa devait marcher devant les prof ce matin).