Commençons à travailler sur un projet c. Besoin d'aide pour passer des pointeurs de fonction/fonctions macro/etc. Je suis un php & python OO guy, mais nouveau à c. J'ai essayé de généraliser l'exemple pour ce post. J'ai un main.c avec un lib pour le microcontrôleur d'Axon que je travaille avec. Fonctionne comme un charme avec tout dans main.c. J'ai besoin de déplacer certaines fonctionnalités de la main vers des fichiers lib plus organisés au fur et à mesure que mon code grandit. Le microcontrôleur de base lib crée une fonction macro qui me permet d'envoyer des données au microcontrôleur pour faire un mouvement d'asservissement à gauche ou à droite. J'ai maintenant besoin de créer un fichier spécifique au servo (HS-422.c) qui me permettra de passer des références/pointeurs (?) À une fonction générique qui sera exécutée pour chaque servo pour faciliter la duplication du code. N'oubliez pas que je me concentre uniquement sur le passage de macros/fonctions/références de variables à d'autres fonctions et que je les appelle/set. Les autres bases de c je comprends. J'ai dû essayer 100 façons différentes de faire ce travail aujourd'hui sans aucune chance. Donc, juste écrit une version simplifiée en espérant que vous pourriez avoir une idée de ce que je tente.Passage de pointeurs de fonction et de références int à une autre fonction
Nous vous remercions de votre aide!
/*
* main.h
* I'm trying to make a pointer or reference to the macro.
* The original file had:
* #define servo1(position) servo(PORTE,2,position);
*/
// servo is a macro defined in another microcontroller file
#define (void)(*servo1)(position) servo(PORTE,2,position);
#define (void)(*servo2)(position) servo(PORTE,3,position);
/* main.c */
// init main functions
void servo_scan(void);
// init vars
int servo1_location = 0;
int servo2_location = 0;
int main(void)
{
for(;;)
{
servo_turn();
}
}
// get the servos to turn
void servo_turn(void)
{
turn_servo(*servo1, &servo1_location, 200);
turn_servo(*servo2, &servo2_location, 950);
}
/* HS-422.c */
void turn_servo(void (*servo)(int position), int ¤tLocation, int newLocation)
{
// turning
for(uint16_t i=¤tLocation; i<newLocation; i=i+10)
{
// turn servo
// hoping the specifc passed servo# pointer gets called
*servo(i);
// set value by reference to origional servo#_location var. making sure.
¤tLocation = i;
// pause
delay_ms(20);
}
}
Ces # définir sont très sommaires! – leppie
C n'a pas de concept de "références". La seule alternative au passage par valeur est de passer un pointeur. –
Le #define était seulement un exemple .. Je sais que cela ne fonctionne pas. Espérant trouver la bonne façon de le faire. Et désolé je suppose que je voulais clair sur les références. Celles-ci étaient destinées aux variables, donc je pouvais définir les valeurs de servo # _location dans la fonction appelée turn_servo. – pringlized