| Auteur | Message |
|---|
cerise
Inscrit le: 19 juillet 2005 Messages: 3
| 25 août 2005 7:01 pointeurs de fonction en C | | |
|
| Où et dans quelles situations on peut utiliser des pointeurs de fonction en C embarqué?
Est-ce que quelqu'un expliquer?
Merci ..... Cherry |
|
| Haut de page | |
 |
Google AdSense

| 25 août 2005 7:01 Ads | | |
|
|
|
|
| Haut de page | |
 |
IanP
Inscrit le: 05 octobre 2004 Posts: 6454 Helped: 1535 Lieu: West Coast
| 25 août 2005 7:24 Re: pointeurs de fonction en C | | |
|
| | Citation: | | Les pointeurs de fonctions ne sont pas aussi communs que les autres utilisations du pointeur. Toutefois, une utilisation commune se trouve dans un passage vers une fonction d'un paramètre dans un appel de fonction. | http://www.cs.cf.ac.uk/Dave/C/node12.html Observe, IanP |
|
| Haut de page | |
 |
echo47
Inscrit le: 07 avril 2002 Messages: 4206 Helped: 566
| 25 août 2005 8:13 pointeurs de fonction en C | | |
|
| | Une autre application est une fonction de rappel. Par exemple, vous souhaitez que Windows pour appeler votre fonction enregistreur audio à chaque fois que Windows reçoit quelques échantillons du micro. Vous donner un pointeur vers Windows enregistreur audio de votre fonction. |
|
| Haut de page | |
 |
échec et mat
Inscription: 26 février 2004 Messages: 489 A aidé: 35 Lieu: siège de toilette
| 25 août 2005 13:23 Re: Les pointeurs de fonctions en C | | |
|
| Pointeurs de fonction ne sont pas souvent utilisées dans C embarqué, plus pour PC de programmation côté. Fondamentalement, c'est un pointeur sur une fonction, et selon laquelle le pointeur de la fonction des points, vous pouvez mettre en œuvre différentes fonctions doivent être exécutées dans la même ligne de code.
Par exemple, le mode d'utilisation, c'est que vous avez un tableau de pointeurs de fonction, ce qui souligne les gestionnaires de messages, chacun d'un autre type de message qui est destiné à maintenir le même indice que le gestionnaire de messages.
Ainsi, vous pouvez appeler à quelque chose comme | Code: | fnPtr [msg-> type] (msg);
| [/ code]
Ajouté le: Une utilisation possible de pointeurs de fonction en C embarqué, est un planificateur de tâches. |
|
| Haut de page | |
 |
njfane
Inscrit le: 27 Oct 2004 Messages: 15
| 26 août 2005 11:00 Re: Les pointeurs de fonctions en C | | |
|
| il est un bon choix pour remplacer en cas passer une machine d'état en utilisant la fonction pointeur, dans le cas où l'Etat a trop de machine switch cas. elle rend le programme plus compact. |
|
| Haut de page | |
 |
Bingo600
Inscription: 26 août 2004 Messages: 239 A aidé: 14
| 27 août 2005 14:35 pointeurs de fonction en C | | |
|
| Ce document est un joli sur le sujet
http://www.newty.de/fpt/zip/e_fpt.pdf
http://www.newty.de/fpt/index.html
/ Bingo |
|
| Haut de page | |
 |
btbass
Inscrit le: 20 juillet 2001 Posts: 1137 Helped: 106 Lieu: Oberon
| 10 Sep 2005 15:21 Re: Les pointeurs de fonctions en C | | |
|
| Pointeurs de fonction sont très utiles dans les systèmes embarqués. Comme un passage simplifié déclaration. Également très utile dans le menu système. Lorsque l'élément de menu sélectionné est l'indice d'un functon pointeur de tableau.
Par exemple, chaque fonction de l'Etat renvoie ici le prochain à passer à l'Etat. Le contrôle de code d'un programme entier en une seule ligne!
| Code: | /*--- État les fonctions de la machine. ---*/
UI_16 veille (void); UI_16 départ (void); UI_16 en cours d'exécution (void);
/*--- State Machine. ---*/
enum (STANDBY = 0, DEMARRAGE, RUNNING);
/************************************************* ******************** * Nom de la fonction: principal * Description: Programme de point d'entrée. Initialiser le tableau de pointeurs de fonction constante. Initialiser la machine d'état de veille. Exécuter machine d'état.
************************************************** *******************/
SI_16 main (void) ( UI_16 (* const Motor_State []) (void) (= veille, le démarrage, le fonctionnement); STANDBY = UI_16 État;
pour (;;){ = Motor_State État [l'État] (); / * appel état fonction * / ) )
/*--- Fin de fichier. ---*/
|
|
|
| Haut de page | |
 |
raj_rohit10
Inscription: 14 juillet 2004 Messages: 113 Helped: 1
| 13 Sep 2005 7:19 Re: pointeurs de fonction en C | | |
|
| bonjour la meilleure utilisation de pointeur de fonction de ce que je ressens est la implimentation du FSM et comme il est dit erlier 2ème call back est une fonction. |
|
| Haut de page | |
 |
abhishek_elec
Inscrit le: 09 Sep 2005 Messages: 15 Helped: 1 Lieu: Inde
| 13 Sep 2005 12:42 Re: Les pointeurs de fonctions en C | | |
|
| Pointeurs de fonction est utile lorsque u ont une procédure ou généralisées algo et u souhaitez utiliser cette procédure sur les différents types de données.
Par ex., Si u ont une bonne chose de tri, et u souhaitez utiliser le même algorithme sur les nombres, par ordre alphabétique, des cordes ou des données par une règle de tri. Dans ce cas, et il suffit d'écrire à un autre "comparer" la fonction de chaque type de données et dans les principaux algo de tri, et passera le pointeur de fonction comme argument. De cette manière, la même chose peut être utilisé par différents ppl en fonction de leur besoin. Aucune modification n'est nécessaire dans le corps de la chose. |
|
| Haut de page | |
 |
Yaseen
Inscrit le: 22 Jan 2006 Messages: 9 Helped: 1
| 27 août 2006 9:33 Re: pointeurs de fonction en C | | |
|
| J'ai utilisé le currenlty pointeurs de fonction dans mon projet C, qui est l'éditeur de menu. Le but de ces pointeurs est d'écrire un système efficace, compact et rapide. Mon code saple est ici;
Valeur int [] = (0x1F00, / / Alt S (^ Setup) 0x1400, / / Alt T (^ Trunks) 0x1200, / / Alt E (^ Extensions) 0x1800, / / Alt O (^ Operator) 0x2600, / / Alt L (^ Logging) 0x1900, / / Alt P (^ mot de passe) 0x2200, / / Alt G (^ Settin gs) 0x2300 / / Alt H (^ Aide) );
/ / ------ Pointeurs de fonctions --------------------------------- void (* Execute [8 ])();// Main Menu fonctions void (* Le programme d'installation [3 ])();// fonctions de menu void (* Trunks [9 ])(); void (* Extensions [4 ])(); void (* Operator [3 ])(); void (* Logging [2 ])(); void (* mot de passe [3 ])(); void (* Paramètres [6 ])(); void (* Aide [10 ])(); //------------------------------------------------ ---------------
principal () ( .... / / Initialize funtion pointeurs Execute [0] = ProcessSetup; Exécuter [1] = ProcessTrunks; Exécuter [2] = ProcessExtensions; Exécuter [3] = ProcessOperator; Exécuter [4] = ProcessLogging; Exécuter [5] = ProcessPasswords; Exécuter [6] = ProcessSettings; Exécuter [7] = ProcessHelp; ......
/ / Lire le clavier ... i = bioskey (1); if (i) / / Si le clavier prêt ... key = bioskey (0); autre continuer / / Si le clavier ne prête ensuite continuer à regarder ce
/ / Exécuter dans le menu choisi par l'utilisateur for (j = 0; j <8; j ) ( if (key == valeur [j]) ( if (! InProcess) ( InProcess = 1; Exécuter [j] (); ) ) else if (key == 0x2D00) / / Alt X pressé ... c'est-à-dire à quitter return; ) .......... |
|
| Haut de page | |
 |