Je travaille sur le code embarqué et tente de convertir un grand nombre d'assignations de registres mappés en mémoire aux appels de fonction get()/set(). Je me demandais s'il serait possible de maintenir les assignations d'adresses saupoudrées dans tout le code, mais changez les #defines pour qu'ils prennent l'assignation dans un argument de fonction.Possibilité de convertir une affectation d'adresse en argument de fonction via une macro C?
Way Old:
#define MOTOR_REG (*(volatile unsigned char *)(0xFEE002)); //a memory-mapped register
MOTOR_REG = value; //sets value into the memory-mapped register
désiré New Way:
#define MOTOR_REG(set_motor_reg(value);)
void set_motor_reg(unsigned char)
{
//logic to set the motor register
}
MOTOR_REG = value; //value should be passed in to MOTOR_REG macro
Alors, est-ce scénario possible avec des macros C? Merci pour vos pensées!
Pourquoi voulez-vous faire cela? Quel est le problème avec le code tel qu'il est? –
@Adam Rosenfield - Je suppose que le PO doit mettre à jour une base de code existante pour utiliser un code différent pour définir les valeurs de registre (probablement ajouter quelques validations en premier) et veut le faire avec une intervention minimale. –
@Franci Penov - Correct, je souhaite éviter les opérations de Find + Replace massives s'il est simplement possible de changer le #define. – multiproximus