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

  • MagicofRahat

    MagicofRahat

    13 Temmuz 2007
  • Tina Chen

    Tina Chen

    26 Mayıs 2012
  • Troy Hunt

    Troy Hunt

    29 EYLÜL 2011