Picproje Elektronik Sitesi

DERLEYİCİLER => CCS C => Konuyu başlatan: Mucit23 - 26 Kasım 2019, 01:02:38

Başlık: CCS C Const Array vs ROM Array
Gönderen: Mucit23 - 26 Kasım 2019, 01:02:38
Selamlar

CCS C de bu iki tanımlama arasındaki fark nedir?

Daha önce CCS ile Pic18F46xx Serisinde denemiş olduğum P10 kütüphanemi Pic18F97XX serisi bir MCU bulunan karta yüklemem gerekti. Kütüphanemde birçok noktada pointerlar ile işlem yapıyorum. Önceden tanımladığım dizilere pointer erişiminde sorun yaşadığım için forumdan birisinin önerisi ile const char dizi[]={...} yerine rom char dizi[]={...} şeklinde tanımlamıştım. Şimdi bu yapıda sorun yaşıyorum

rom ile const arasında fark nedir? Pointer ile erişim seviyeleri Microchip'in üst seviye mikroişlemcilerinde farklı olabilir mi acaba? Amacım Kütüphanede kullanılan Font Datalarını bir struct yapısı ile işaret etmek.

Sorumu şöyle güncelleyeyim. Const ile tanımlarsa diziye erişimde sorun yok. Fakat Const ile tanımlamış olduğum diziyi bir struct yapısında gösteremiyorum. Derleyici hata veriyor.

Örneğin

const unsigned int8 Table[]={.....} diye bir dizi olsun.
Aşağıdaki gibi bir struct yapısı kullanırsam hata veriyor

typedef struct _tFont
{   
  const unsigned int8 *table;
  unsigned int8 x;
  unsigned int8 y;
} FONT;

daha önce bu yapıyı rom ile kullanmıştım ama rom ile hafıza bölgesine erişemiyorum. Genel olarak sorun bu şekilde.
Başlık: Ynt: CCS C Const Array vs ROM Array
Gönderen: fide - 26 Kasım 2019, 08:50:33
typedef içinde const değişken tanımlamak yerine typedef ile tanımladığınız değişkeni(struct'ı ) const olarak tanımlayın. Bence sebep şu const tanımlanırken değer atanması gerekiyor. Siz ise hem const tanımlayıp hem de daha sonra değer alacağını belirtiyorsunuz. Sıkıntı burada.

typedef struct hw_strings{
      u8 sbt;
      char str[20];

  }myHwStrings;
 
 
  myHwStrings const deviceData[10]={
      cHWID,{"FD.RAL.MCU.R03"},
      cSWVersion,{"1.0.0"},
      cHwR,{"1.0.1"},
      mfc,{"FiDeNet UKoSis"},
  };

yukardaki kodlar düzgün çalışıyor. Denemeye değer.
Başlık: Ynt: CCS C Const Array vs ROM Array
Gönderen: OptimusPrime - 26 Kasım 2019, 19:14:32
Hata veriyor derken? Neye sinirleniyor? ::)
Başlık: Ynt: CCS C Const Array vs ROM Array
Gönderen: Mucit23 - 26 Kasım 2019, 20:58:26
rom unsigned int8 FontTable[]={1,2,3,4,5,6,7,8,9,10};

typedef struct __tFont
{   
  rom unsigned int8 *Table;
  unsigned int8  Width;
  unsigned int8  Height;
 
} ssFONT;


ssFONT FontData = {
  FontTable,
  8,
  8,
};
yukarıdaki gibi bir struct tanımlıyorum. Bu struct ile const olarak tanımlamış olduğum diziye erişmeye çalışıyorum. Yukarıdaki şekilde hata vermiyor ama struct ile diziye erişemiyorum. Gelen değer daima null

Kullanımı ise şöyle İlk önce ssFONT türünde bir değişken tanımlıyorum

sFONT NewVar;

NewVar=FontData; şeklinde atama yaptığım zaman atadığım değişken FontData struct'ını temsil etmesi gerekiyor.

Struct içinde pointer kullanımı nasıl olur? Const olarak tanımlanmış bir dizinin başlangıç adresine nasıl erişirim bu yapıyla?

Daha önce kullandığım bir yapıydı halbuki anlamıyorum.
Başlık: Ynt: CCS C Const Array vs ROM Array
Gönderen: OptimusPrime - 26 Kasım 2019, 22:43:23
Kuvvetle ihtimal NewVar=FontData a kafayi takmistir. C++ bu yuzden var cunku  :D
Bazi derleyiciler bunu yapamayabilirler (icerisinde pointer oldugundan). Bunun yerine memcpy veya sFONT tipinden bir pointer deneyebilirsin.
Başlık: Ynt: CCS C Const Array vs ROM Array
Gönderen: Mucit23 - 26 Kasım 2019, 22:49:48
Ya zaten farklı bir yöntemle çözdüm. Bu yapıyı kullanmadım. Çok da gerek kalmadı yani. GNU ve ARM bu tür şeyleri hiç kafaya takmıyor.
Başlık: Ynt: CCS C Const Array vs ROM Array
Gönderen: OptimusPrime - 26 Kasım 2019, 23:16:02
Bir keresinde if (NewVar == FontData) seklinde birsey yapmistim. Hebele hubele yapmadan gnu ne demek istedigimi anlamisdi.  8-)