j’ai zieuté rapidement et je doit déclarer :
Pas de fonction dans un .h !!
Pour comprendre mes 2 points d’exclamation (oui je me suis emporté), imaginons que ton projet grossisse, et que tu inclus le ueib.h dans un autre .c :
- tu #inclus ueib.h dans nano_shell.c
- il copie le contenu ueib.h au début de nano_shell.c
- il compile (hop fichier objet avec les symboles des fonctions contenues dans ueib.h)
- tu compile un deuxième .c lambda incluent ueib.h 2eme objet avec les fonctions de ueib.h
- tu fais l’édition des liens en indiquant tes 2 fichiers objets
Blang ! erreur :
symbole défini 2 fois, il sait pas lequel choisir, ils sont identique, il va pas les mettre au pif, ça sera un peu violent
bon ça compte pas si tes fonctions sont inline (dans ce cas le code est directement injecté dans le code appellant, donc spa rave).
Donc premièrement soulager ton .h en faisant migrer toutes tes fonctions dans un .c annexe et compiler chaque module séparement.
Sinon perso j’aurais plutôt tendance à limiter le plus possible les #include dans un .h, le strict minimum, c’est plutôt au .c d’aller inclure ce dont il a réellement besoin (donc là pifometriquement parlant le #include <string.h> devrait pas forcément être dans le .h [appa vérifié]).
bon jvais continuer à faire mon chieur, les majuscules plutôt pour les constantes
[codebox]
void shell_k8055(ueib_handle * k8055_handle)
{
char entree[20]=" ";
char * parsed;
int counter=0;
int do_we_set=0;
int do_we_get=0;
int output[8];
printf("$ ");
scanf("%s",&entree);
parsed = strtok (entree, " ");
if (strcmp("set",parsed)==0) do_we_set=1;
if (strcmp("get",parsed)==0) do_we_get=1;
for (counter = 0; counter < 8; counter++)
{
parsed = strtok (NULL, " "); // cf. man strtok for NULL
printf("parsed : [[%s]]\n",parsed);
printf("%d\n",counter);
if ( do_we_set ) output[ counter ] = atoi( &parsed );
else if ( do_we_get )
{
get_k8055(k8055_handle);
printf("debug get_k8055\n");
}
}
// euh là je suppose totalement
if ( do_we_set ) set_k8055(k8055_handle, output);
}
void set_k8055(ueib_handle * k8055_handle, int coef[])
{
int i;
printf(« DEBUG !\n »);
for (i = 0; i < 8; i++) printf("%d ", coef[i]);
// Bon en zieutant le .h j'ai reperé le truc de feignant :-°
// Les outputs sont des puissances de 2 successive
// bon je pense qu'un cafzonien va surement me taper sur
// les doits à cause de ça
for (i = 0; i < 8; i++) // 2 lignes \o/
ueib_set_dig_output(k8055_handle, 1 << i, coef[i]);
ueib_update(k8055_handle);
}
[/codebox]
Bonne chance pour la suite de l’aprentissage 