Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

CCS C, Ansi C uyumlu değil mi?

Başlatan XX_CİHAN_XX, 10 Şubat 2013, 00:26:40

XX_CİHAN_XX

Farketmedi hocam. Ben bu kodları zaten keil uVision - ARM de derleyip çalıştırmıştım. Kodsal bir hata olmaması gerekir. CCS C ye uyarladım sadece. PIC18F ile kullanabilmek için. Fakat CCS C derleyicisi nedense kodları beğenmedi :)
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

JKramer

#16
Son hatalar, LCD_WriteData ve LCD_WriteRAM fonksiyonlarındaki uint16_t tipini tanımlamamanızdan kaynaklanıyor. İlk sorununuz için kullanma kılavuzunda #DEVICE kısmında şöyle bir bölüm var:
Alıntı Yap
CONST=READ_ONLY
Uses the ANSI keyword CONST definition, making CONST variables read only, rather than located in program memory.

CONST=ROM
Uses the CCS compiler traditional keyword CONST definition, making CONST variables located in program memory.
Programın başına #device CONST=ROM satırını eklerseniz const değişkenler ROM'a atılır. Ya da değişkeni tanımlarken const yerine ROM kullanabilirsiniz.

Ek olarak, kurulum klasörü altında bir readme.txt dosyası var; daha ayrıntılı bilgiler mevcut.

XX_CİHAN_XX

Sonunda sorun çözüldü arkadaşlar yardımlar için çok teşekkür ederim.
Çözümü şu şekilde:
Data dizimizi tanımlarken const değil rom direktifini kullanıyoruz:
rom unsigned int8 gImage_RightButton[1152] = { .. }


Ana programdan fonksiyona bu diziyi aktarırmak için ise şu yöntemi kullanıyoruz:

   unsigned int8 *p = gImage_RightButton;
   SendBmp (258, 25, 24, 24, p);


Fonksiyondan diziyi alıp kullanmak için ise;

void SendBmp (uint16_t x, uint8_t y, uint16_t w, uint8_t h, rom uint8_t *bmp)
{
   uint16_t d=0, i=0, tempx;
   uint8_t tempy;
   rom uint16_t *bmpx = (rom uint16_t *)bmp;

   for(tempy=y;tempy<(y+h);tempy++)
   {
      for(tempx=x;tempx<(x+w);tempx++, i++)
      {
         d = bmpx[i];
         Pixel(tempx, tempy, d);
      }
   }
}


Burada normalde    rom uint16_t *bmpx = (rom uint16_t *)bmp;  işlemine gerek yok ancak ben bellekteki veriyi 16bit olarak çekmek istediğim için bunu yazdım normalde fonksiyon içinde dogrudan bmp yi okuyarak ana dizimize erişebiliyoruz.

Bu rom direktifi CCS e özel birşey olsa gerek. Const kullanınca yemiyor. Bu yüzden uğraşıp durmuşuz...
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.