Przeczytałem arkusz danych i znalazłem zmienną zdefiniowaną jako unsigned char near Sample_X
. Co to jest i czym to się różni unsigned char Sample_X
?
12
Przeczytałem arkusz danych i znalazłem zmienną zdefiniowaną jako unsigned char near Sample_X
. Co to jest i czym to się różni unsigned char Sample_X
?
near
jest przykładem specyfikatora klasy pamięci . Mówi kompilatorowi coś o tym, w jaki sposób lub gdzie należy przypisać pamięć dla zmiennej. (Zobacz odpowiedź filo poniżej, aby uzyskać więcej informacjinear
).Odpowiedzi:
Podany tutaj MCU to seria Freescale MC9C08 , która wykorzystuje nieco ulepszoną wersję swojej architektury HC08. Jest to 8-bitowy rdzeń, który (jak wiele takich) ma krótsze instrukcje i szybszy dostęp do adresów „zerowej strony” niż inne. Adresy strony zerowej mają tylko 8 bitów zamiast 16 bitów, więc instrukcje odnoszące się do nich mogą mieć 2 bajty zamiast 3 i w rezultacie wykonanie 1 cyklu krócej .
Słowo kluczowe „near” instruuje kompilator, aby w miarę możliwości umieścił zmienną w „zero page”, aby uzyskać lepszą wydajność. Kompilatory napisane specjalnie dla programowania wbudowanego, takie jak ten , zwykle implementują takie rozszerzenia języka (tutaj opisane jako „Obsługa C strony zerowej”).
źródło
register
słowa kluczowego (w przypadkach, gdy naprawdę masz pewność, że właśnie tam potrzebujesz optymalizacji), ale nieco mniej ekstremalne?W zależności od architektury procesora mogą istnieć różne instrukcje dostępu do danych pod innym adresem. Oto przykład z Keil dla jednego z ich kompilatorów.
Dostęp bliski ma pewien limit pamięci, więc możesz dać kompilatorowi wskazówki, aby umieścił niektóre często używane zmienne w obszarze, do którego są dostępne krótsze instrukcje (oczywiście opisanie dostępu do 32-bitowej przestrzeni adresowej jest większe niż adres 16-bitowy przestrzeń). To może przełożyć się na mniejszy / szybszy kod.
źródło
far
inear
wskazuje na w dużej mierze przestarzałą architekturę 8086. Te same słowa kluczowe są używane w pokrewny, ale różny sposób na 8-bitowych mikrokontrolerach.