SORU
17 NİSAN 2013, ÇARŞAMBA


Yazma işaretçi türü

Gömülü sistem yazılımı yazıyorum.

İşaretçiler ... bir cihazın kayıtları erişmek için kullanıyoruz.
Kayıtlar bazıları salt okunur ise salt okunur.

Yazma salt okunur zaman tanımsız değerler üretmek kaydeder.

Derleyici yazma kaydeder bir değerleri okurken algılamak için izin veren bir işaretçi türü tanımlamak istiyorum.k.bir. kaldırma).

A-sadece yazma işaretçi sadece C dili sözdizimi kullanılarak oluşturulabilir?
(İlk prototip C kullanarak gelişen, ama 2. Nesil C için hareket ediyoruz.)

Nasıl bir etkin-sadece yazma işaretçi C oluşturulabilir ? (Bu dinamik hafıza izleme öğeleri değildir unutmayın, ama donanım erişim adresleri.)

Bu kod güvenliği ve kalitesi en yüksek endişeleri nerede gömülü bir sistem üzerinde kullanılır.

CEVAP
17 NİSAN 2013, ÇARŞAMBA


Muhtemelen her küçük kapsayıcı bir sınıf yazmak istiyorum:

template <class T>
class read_only {
    T volatile *addr;
public:
    read_only(int address) : addr((T *)address) {}
    operator T() volatile const { return *addr; }
};

template <class T>
class write_only { 
    T volatile *addr;
public:
    write_only(int address) : addr ((T *)address) {}

    // chaining not allowed since it's write only.
    void operator=(T const &t) volatile { *addr = t; } 
};

En azından sistem makul bir derleyici var varsayarak, bunların her ikisi de üretilen kod ham bir işaretçi kullanarak farksız olduğunu en iyi düzeyde olmasını isteyeceğim. Kullanımı:

read_only<unsigned char> x(0x1234);
write_only<unsigned char> y(0x1235);

y = x   1;         // No problem

x = y;             // won't compile

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Julian Smith

    Julian Smith

    31 EKİM 2006
  • MrChiCity3

    MrChiCity3

    14 NİSAN 2008
  • TomSka

    TomSka

    30 Mayıs 2006