J'ai lu une fiche technique et j'ai trouvé une variable définie comme unsigned char near Sample_X
. Qu'est-ce que c'est et en quoi cela diffère- unsigned char Sample_X
t-il?
12
J'ai lu une fiche technique et j'ai trouvé une variable définie comme unsigned char near Sample_X
. Qu'est-ce que c'est et en quoi cela diffère- unsigned char Sample_X
t-il?
near
est un exemple de spécificateur de classe de stockage . Il indique au compilateur comment ou où le stockage de la variable doit être alloué. (Voir la réponse de filo, ci-dessous, pour en savoir plusnear
).Réponses:
Le MCU spécifié ici est une série Freescale MC9C08 , qui utilise une version légèrement améliorée de leur architecture HC08. Il s'agit d'un noyau 8 bits qui, comme beaucoup d'entre eux, a des instructions plus courtes et un accès plus rapide aux adresses "zéro page" que les autres. Les adresses de page zéro ne font que 8 bits de long au lieu de 16 bits, donc les instructions qui les référencent peuvent être de 2 octets au lieu de 3 et prendre un cycle de moins à exécuter en conséquence.
Le mot clé "near" demande au compilateur de mettre la variable dans "zéro page" si possible, pour de meilleures performances. Les compilateurs spécifiquement écrits pour le développement embarqué, comme celui-ci , implémentent généralement de telles extensions dans le langage (décrites ici comme «C Support for Zero Page»).
la source
register
mot clé (pour les cas où vous êtes vraiment sûr que c'est là que vous avez besoin d'optimisation), mais un peu moins extrême?Selon l'architecture du processeur, il peut y avoir différentes instructions pour accéder aux données à différentes adresses. Voici un exemple de Keil pour l'un de leurs compilateurs.
L'accès proche a une certaine limite de mémoire, vous pouvez donc donner des conseils au compilateur pour placer certaines variables fréquemment utilisées dans une zone accessible par des instructions plus courtes (la description de l'accès à un espace d'adressage 32 bits est évidemment plus grande que l'adresse 16 bits). espace). Cela peut se traduire par un code plus petit / plus rapide.
la source
far
etnear
pointe sur l'architecture 8086 largement obsolète. Les mêmes mots clés sont utilisés de manière apparentée mais différente sur les microcontrôleurs 8 bits.