Qu'est-ce qu'un «caractère non signé près de»?

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_Xt-il?

oppo
la source
3
permet peut-être au compilateur d'utiliser de petits décalages relatifs?
Neil_UK
6
Sur la base de l'expérience partielle avec x86 sous DOS, je m'attendrais à cela avec un type de pointeur et dans un environnement 16 bits. Pourtant, ce que l'OP cité ne ressemble pas à un pointeur et le lien de la fiche technique impliquerait un certain MCU. Recherchez le mot clé "near" dans les deux liens suivants: microchip.com/forums/m549709.aspx barrgroup.com/Embedded-Systems/How-To/Efficient-C-Code
frr
3
Il convient de noter qu'il s'agit d'une extension de compilateur, non standard C
PlasmaHH
Il peut s'agir de CCM. Étant donné que le code est principalement ciblé pour un MCU, il peut être une suggestion indirecte pour l'éditeur de liens par le support du compilateur pour le placer sur CCM (core coupled memory) si disponible.
Ayhan
1
FYI, le mot-clé, nearest 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 plus near).
Solomon Slow

Réponses:

20

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»).

Chromatix
la source
J'aime cette réponse, mais avez-vous une source pour vos informations?
Clonkex
1
J'ai édité la réponse pour fournir plus de détails et de références. En fait, il s'agit de la nouvelle architecture HCS08 de Freescale, mais celle-ci est compatible avec les anciennes architectures HC08 et HC05. Les architectures (maintenant positivement anciennes) 6800 et 6502 sont également étroitement liées.
Chromatix
Nice, beaucoup mieux!
Clonkex
Ainsi, son utilisation est très similaire au registermot 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?
vsz
Plus ou moins. La différence est principalement due au fait que les processeurs 8 bits n'ont généralement pas de banque de registres en soi, seulement un seul accumulateur et quelques registres d'index. Mais elle est également analogue à l'utilisation de pointeurs "proches" ou "éloignés" sur x86, en ce sens qu'il existe une différence dans la taille de l'adresse et le temps qu'il faut pour terminer un accès.
Chromatix
15

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.

filo
la source
5
@AndrewMorton: Cette question concerne faret nearpointe 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.
supercat
@supercat La question se pose simplement de manière générale, bien que les réponses se concentrent sur l'ancienne architecture. Une personne bien informée devrait y écrire une réponse expliquant comment ils sont utilisés pour les microcontrôleurs 8 bits.
curiousdannii
@curiousdannii: Le code en question a été écrit pour un micro 8 bits.
supercat