retour de fonctions

Pour toutes vos questions sur WinAVR, AVR-GCC et la programmation en C en général

Modérateur: Modérateur

retour de fonctions

Messagede buzzz le 16 Mar 2008 15:30

Bonjour a tous,

Je voudrais réaliser un retour de fonction de plusieurs variables.
Pour cela j'ai donc pensé aux tableaux.
J'ai écrit un ptit bout de de code mais je ne sais pas si ca fonctionne car je n'arrive pas a le simuler(quand il arrive au return il ne continue plus mais il n'indique pas d'erreur).

Voici le code:

#include....
unsigned char xl;
unsigned char xh;
unsigned char yl;
unsigned char yh;
unsigned char tab[4];

unsigned char adcconvert(void)
{
traitement......xl=...

tab[0]=xl;
tab[1]=xh;
tab[2]=yl;
tab[3]=yh;

return tab;

et voici la ligne qui fais l'appel de cette fonction :

tab[4]=adcconvert();

Pouriez vous me dire si c'est comme cela qu'il faut faire ?
Avez vous des exemples, d'autres solutions possibles ?
Merci d'avance
buzzz
 

Messagede Benjamin le 16 Mar 2008 17:12

Salut,

Pour retourner plusieurs valeur par une fonction tu dois travailler avec des pointeurs.

Quand tu envoies un tableau (je sais plus dans quel sens ça va, ça remonte a longtemps) je pense que tu envoies l'adresse du premier élément, donc y'a des chances que ça marche mais je suis plus trop sur

Regarde sur google a pointeur en C tu devrais tout trouver

A++
.: http://www.roboticus.org :. Control your own world !
Benjamin
ACCRO
ACCRO
 
Messages: 304
Inscription: 11 Sep 2005 23:43
Localisation: Belgique

Messagede totofweb le 16 Mar 2008 23:05

Pense à utiliser les balise [code] et [/code] pour améliorer la présentation d'un code.

Pour retourner plusieurs variables, tu dois effectivement passer par des pointeurs. Le pointeur retourné est une seule variable qui en réalité contient l'adresse d'une zone mémoire : à toi ensuite de savoir à quoi correspond cette zone mémoire.

Si tu as des données de types hétérogènes à retourner (char, int, etc...), le mieux est de définir un type de structure (typedef struct machinchose {...};, regarde un cours de C pour ça) et de renvoyer un pointeur vers cette structure : c'est le compilateur C qui se débrouillera pour interpréter la zone mémoire pointée comme appartenant à cette structure. Si tu as des données de types homogènes (que des char, etc...), tu peux aussi renvoyer un pointeur vers un tableau. La particularité, c'est que lorsque tu as un tableau tab[10], le pointeur vers ce tableau est tab (qui est égal à &tab[0]).

La méthode que tu utilises n'est toutefois pas correcte : tu définis ton tableau comme une variable globale : tu n'as nul besoin de la retourner par la fonction ! L'appel de la fonction modifiera la variable globale tout simplement, et le reste du code pourra s'en servir ainsi : ta fonction peut retourner void.
Totofweb :P
totofweb
HABITUE
HABITUE
 
Messages: 48
Inscription: 07 Jan 2006 12:16
Localisation: Le Mans


Retourner vers WinAVR-AVR GCC

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron