'İmzasız karakter yakınında' nedir?


13

Bir veri sayfasını okudum ve olarak tanımlanan değişkeni buldum unsigned char near Sample_X. Bu nedir ve bunun farkı unsigned char Sample_Xnedir?


3
belki derleyicinin küçük göreli ofsetleri kullanmasına izin verir?
Neil_UK

6
DOS x86 ile kısmen deneyim dayanarak, bunu bazı işaretçi türü ve 16bit bir ortamda beklenebilir. Yine de, alıntı yapılan OP bir işaretçi ve veri sayfası bağlantısı gibi görünmüyor bazı MCU anlamına gelir. Aşağıdaki iki bağlantıda "yakın" anahtar sözcüğünü arayın: microchip.com/forums/m549709.aspx barrgroup.com/Embedded-Systems/How-To/Efficient-C-Code
frr

3
Bu, standart bir derleyici uzantısı değil, C
PlasmaHH

1
Anahtar kelime olan FYI, depolama sınıfı belirleyicisinenear bir örnektir . Derleyiciye, değişken için depolamanın nasıl ve nerede tahsis edilmesi gerektiği hakkında bir şey söyler. (Daha fazla bilgi için aşağıdaki filo'nun cevabına bakınız ). near
Solomon Slow

1
Burada gerçekten konu var mı?
user541686

Yanıtlar:


20

Burada belirtilen MCU , HC08 mimarisinin biraz geliştirilmiş bir sürümünü kullanan bir Freescale MC9C08 serisidir . Bu, 8 bitlik bir çekirdektir ve (çoğu gibi) "sıfır sayfa" adreslerine diğerlerine göre daha kısa talimatlara ve daha hızlı erişime sahiptir. Sıfır sayfa adresleri 16 bit yerine yalnızca 8 bit uzunluğundadır, bu nedenle bunları referans alan talimatlar 3 yerine 2 bayt olabilir ve sonuç olarak yürütmek için 1 döngü daha az zaman alabilir .

"Near" anahtar kelimesi, derleyiciye daha iyi performans için değişkeni "sıfır sayfaya" koymasını söyler. Bunun gibi gömülü geliştirme için özel olarak yazılmış derleyiciler genellikle bu tür uzantıları dile uygular (burada "Sıfır Sayfa için C Desteği" olarak tanımlanır).


Bu yanıtı beğendim, ancak bilgileriniz için bir kaynağınız var mı?
Clonkex

1
Daha fazla ayrıntı ve referans sağlamak için cevabı düzenledim. Aslında bu Freescale'in daha yeni HCS08 mimarisinden, ancak bu eski HC08 ve HC05 mimarileri ile kod uyumlu. 6800 ve 6502 mimarileri de (şimdi olumlu antik) yakından ilişkilidir.
Chromatix

Güzel, çok daha iyi!
Clonkex

Yani, kullanımı registeranahtar kelimeye çok benziyor (optimizasyona ihtiyaç duyduğunuzdan gerçekten emin olduğunuz durumlar için), ancak biraz daha az aşırı mı?
vsz

Az çok. Fark, esas olarak 8 bit CPU'ların tipik olarak bir kayıt bankasına sahip olmamalarından, sadece tek bir akümülatörden ve birkaç endeks kaydından kaynaklanmaktadır. Ancak, x86'da "yakın" ve "uzak" işaretçilerin kullanımına da benzer.
Chromatix

15

CPU mimarisine bağlı olarak, farklı adresteki verilere erişmek için farklı talimatlar olabilir. İşte derleyicilerinden biri için Keil'den bir örnek .

Yakın erişimin belirli bir bellek sınırı vardır, bu nedenle derleyiciye bazı sık kullanılan değişkenleri daha kısa talimatlarla erişilebilen bir alana yerleştirmek için ipuçları verebilirsiniz (açıkçası 32 bit adres alanına erişimi açıklamak 16 bit adresinden daha büyüktür) Uzay). Bu, daha küçük / daha hızlı koda dönüşebilir.



5
@AndrewMorton: Soru ilgilidir O farve nearbüyük ölçüde-demode 8086 mimarisine işaretçileri. Aynı anahtar kelimeler 8 bitlik mikro denetleyicilerde ilgili ancak farklı şekillerde kullanılır.
supercat

@supercat Soru genel olarak sorsa da, cevaplar eski mimariye odaklanıyor. Bilgili biri 8 bit mikrodenetleyiciler için nasıl kullanıldığını açıklayan bir cevap yazmalıdır.
curiousdannii

@curiousdannii: Söz konusu kod 8 bitlik bir mikro için yazılmıştır.
supercat
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.