I ont le code suivant dans C:modification de la valeur d'adresse d'un pointeur de fonction
int addInt(int n, int m) {
return n + m;
}
int (*functionPtr)(int, int);
functionPtr = &addInt;
functionPtr est un pointeur de fonction et il pointe sur l'adresse spécifique de la fonction addInt. Je veux changer 1 bit de sa valeur, mais je ne peux pas comprendre comment.
Disons que functionPtr points 0xABC0 (en supposant une adresse de 16 bits) après la dernière déclaration. Je veux changer sa valeur à 0xABC1. J'ai essayé de ou de la valeur avec 0x1, mais je suppose que quelque chose ne va pas avec la conversion d'opérande:
functionPtr = &addInt | 0x00000001; // addresses are of 32 bits
Je sais que déconner avec des pointeurs est risqué, mais je dois changer le bit de poids faible de l'adresse pour entrer dans l'état du pouce d'un MCU ARM Cortex-M4.
Montrez vos tentatives. Vous avez besoin du bit ou de l'opérateur. –
Que diable essayez-vous de faire ??? Finger avec des pointeurs de fonction ne vous mènera nulle part. – SergeyA
@SergeyA Je dois changer le LSB du pointeur de fonction pour pouvoir entrer dans le mode Thumb (d'un MCU ARM Cortex-M4). – HBv6