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

  • Darren Kitchen

    Darren Kitch

    3 EKİM 2011
  • TotalxLuna

    TotalxLuna

    27 Kasım 2011
  • Watcher3223

    Watcher3223

    15 Kasım 2007