Bazı C kodu okuyorum ve programda bu beyanı rastladı:
unsigned char serv_ctr @0x0002;
Birisi beni belgelere yönlendirebilir veya Mplab XC8 v1.35 C derleyicisindeki "@ 0x0002 " ne için olduğunu açıklayabilir mi?
Bazı C kodu okuyorum ve programda bu beyanı rastladı:
unsigned char serv_ctr @0x0002;
Birisi beni belgelere yönlendirebilir veya Mplab XC8 v1.35 C derleyicisindeki "@ 0x0002 " ne için olduğunu açıklayabilir mi?
Yanıtlar:
Bu, değişkenin yerleştirileceği mutlak bir adres belirtmektir.
Gönderen XC8 derleyici manuel sayfa 27, Mutlak adresleme 2.5.2 bölüm :
Değişkenler ve fonksiyonlar
__at()
yapı kullanılarak mutlak bir adrese yerleştirilebilir
......
2.5.2.2 FARKLAR
8-bit derleyiciler mutlak bir adres belirtmek için bir @ sembolü kullanmışlardır.
@
belirli bir adreste bir değişkeni bildirmenize olanak tanıyan C dilinin standart olmayan yaygın bir uzantısıdır. Bellek eşlemeli donanım kayıtları vb. İçin kullanılabilir. Bu durumda değişkenin de bildirilmesi gerekir volatile
, bu nedenle örneğiniz yanlıştır.
Diğer derleyiciler gibi bir şey kullanmak __attribute__(section...
veya #pragma ...
bu standart dışı C bütün
Takım zincirlerinin bunu yapmasının tek mantıklı nedeni (varsa) boktan hata ayıklayıcılarda kayıt hata ayıklamayı etkinleştirmektir. Standart olmayan sözdizimi, kaydın bağlayıcı çıktısı ve hata ayıklama bilgisinin bir parçası olmasını sağlar. Hangi sırayla herhangi bir değişkeni izleyebilirsiniz gibi crappy hata ayıklayıcıda kayıt izlemenizi sağlar.
İyi bir hata ayıklayıcı varsa, özel MCU'nuz için destek ve farkındalığa sahip olacaktır. O zaman C kodunda standart olmayan boklara ihtiyacınız yoktur, ancak bunun yerine saf, taşınabilir standart C yazabilirsiniz:
#define serv_ctr ( *(volatile uint8_t*)0x0002u )
@
gösterimi kullanarak bildirilen çoğu şeyin @
uzantılar olmadan yapılabilecek her şeyden farklı davranması için çoklu bellek boşluklarına veya başka sorunlara sahip gösterim hedef platformları kullanır .
Kısa bir uzantı:
Bu artık xc8 2.0 ve sonraki sürümlerden beri çalışmıyor. Şimdi yazmak zorundaydınız:
unsigned char serv_ctr __at(0x0002);
serv_ctr
mutlak bir adrese ( 0x0002
) bir değişken ( ) koymak için .
XC8 2.0 ile @
, derleyici ayarlarını "C90" biçimini kullanacak şekilde ayarlarsanız, eski kodunuzu sözdizimi kullanarak derlemek mümkündür . Ayar şöyle görünür, "XC8 Global Options" altındadır ve "C standardı" olarak adlandırılır.
@
sözdizimini de destekliyor, sadece Mplab değil.