Picproje Elektronik Sitesi

DERLEYİCİLER => Microchip MPLAB C serisi => Microchip C18 => Konuyu başlatan: piedos - 06 Temmuz 2008, 16:55:07

Başlık: microchip c18 de global değişkenler için yer almada problem var
Gönderen: piedos - 06 Temmuz 2008, 16:55:07
microchip c18 de global değişkenler için yer almada problem var


MPLINK 4.20, Linker
Copyright (c) 2008 Microchip Technology Inc.
Error - section 'segdata4' can not fit the absolute section. Section 'segdata4' start=0x00000400, length=0x0000012b
Errors    : 1






#define MAX_TIMERS 20

#pragma udata segdata4 = 0x400

struct Object{
struct Timers{
unsigned char ID;
unsigned char isTa:1;
unsigned long counter;
unsigned char isP:1;
unsigned long per;
void * a;
}tTimers[MAX_TIMERS];

unsigned char first;
unsigned char isT:1;
}Obj;



CCS te bu kodu denediğimde böyle bir hata vermiyor, CCS te 4K lık bir struct bile oluşturabiliyorum, C18 de ise o segmentten büyükse hata veriyor, burada Obj nin boyutu yaklaşık 200 byte
Bunun bir çaresi var mı?
Başlık: microchip c18
Gönderen: fatihvelid - 07 Temmuz 2008, 07:54:21
Kullandığınız .lkr uzantılı dosyayı açıp, iki ram segmentini birleştirmeniz halinde çözersiniz. Oluşturduğunuz alan 256 bayttan büyük olduğundan, 1 RAM segmentine sığmıyor.

C18 profesyonelliği ve diğer derleyicilere göre daha alt seviyede C kullanarak program geliştirme ortamı sunduğundan birçok kontrol programcıya bırakılmıştır.
Başlık: microchip c18
Gönderen: F493 - 07 Temmuz 2008, 08:48:13
selam;

  Ben C18 kullanıyorum bu yaşadıgınız problemin nedeni bir nevi bank hatası,

banklar 256 byte'dan oluşuyor.

18F452 nin datashette'inde sayfa 46 'ya bakarsanız orada var bu anlattıgım.

C18 GLOBAL olarak tanımlanan degişkenleride 0 degeriyle BAŞLATMAZ.

ancak çok iyi hazırlanmış dökümantasyonu var.
microchip'in application notlarındada örnek c18  kodlarına  ulaşabilirsiniz.


bu şekilde bir deneyin


#define MAX_TIMERS 20

#pragma udata Object = 0x400       //Object  olarak tanımlayın

struct Object{
  struct Timers{
     unsigned char ID;
     unsigned char isTa:1;
     unsigned long counter;
     unsigned char isP:1;
     unsigned long per;
     void * a;
  }tTimers[MAX_TIMERS];
 
  unsigned char first;
  unsigned char isT:1;
}Obj;


birde tanımladıgınız nesnenin uzunlugu 256byte'ı geçmemeli.



esen kalın;
Başlık: microchip c18
Gönderen: fatihvelid - 07 Temmuz 2008, 09:06:33
Aşağıdaki linker kodunu bir projem için modifiye etmiştim. Bankları birleştirerek yaklaşık 1280 byte'lık veri bloğunu RAM'a yerleştirmiştim. Aşağıdaki kodu incelerseniz, linker mantığını daha iyi anlayacaksınızdır.



// File: 18f8722.lkr
// Sample linker script for the PIC18F8722 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f8722.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x1FFFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF003FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x5F
DATABANK   NAME=gpr0       START=0x60           END=0xFF
DATABANK   NAME=Info      START=0x100 END=0x5FF PROTECTED
DATABANK   NAME=gpr6       START=0x600          END=0x6FF
DATABANK   NAME=gpr7       START=0x700          END=0x7FF
DATABANK   NAME=gpr8       START=0x800          END=0x8FF PROTECTED
DATABANK   NAME=gpr9       START=0x900          END=0x9FF
DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
DATABANK   NAME=gpr11      START=0xB00          END=0xBFF PROTECTED
DATABANK   NAME=gpr12      START=0xC00          END=0xCFF PROTECTED
DATABANK   NAME=gpr13      START=0xD00          END=0xDFF
DATABANK   NAME=gpr14      START=0xE00          END=0xEFF
DATABANK   NAME=gpr15      START=0xF00          END=0xF5F
ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF       PROTECTED

SECTION    NAME=INFO   RAM=Info
SECTION    NAME=TCBBUFFER  RAM=gpr8
SECTION    NAME=TCB_MEM    RAM=gpr11
SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x100

Başlık: microchip c18
Gönderen: piedos - 07 Temmuz 2008, 10:09:58
Alıntı yapılan: "fatihvelid"Aşağıdaki linker kodunu bir projem için modifiye etmiştim. Bankları birleştirerek yaklaşık 1280 byte'lık veri bloğunu RAM'a yerleştirmiştim. Aşağıdaki kodu incelerseniz, linker mantığını daha iyi anlayacaksınızdır.



// File: 18f8722.lkr
// Sample linker script for the PIC18F8722 processor

LIBPATH .

FILES c018i.o
FILES clib.lib
FILES p18f8722.lib

CODEPAGE   NAME=vectors    START=0x0            END=0x29           PROTECTED
CODEPAGE   NAME=page       START=0x2A           END=0x1FFFF
CODEPAGE   NAME=idlocs     START=0x200000       END=0x200007       PROTECTED
CODEPAGE   NAME=config     START=0x300000       END=0x30000D       PROTECTED
CODEPAGE   NAME=devid      START=0x3FFFFE       END=0x3FFFFF       PROTECTED
CODEPAGE   NAME=eedata     START=0xF00000       END=0xF003FF       PROTECTED

ACCESSBANK NAME=accessram  START=0x0            END=0x5F
DATABANK   NAME=gpr0       START=0x60           END=0xFF
DATABANK   NAME=Info      START=0x100 END=0x5FF PROTECTED
DATABANK   NAME=gpr6       START=0x600          END=0x6FF
DATABANK   NAME=gpr7       START=0x700          END=0x7FF
DATABANK   NAME=gpr8       START=0x800          END=0x8FF PROTECTED
DATABANK   NAME=gpr9       START=0x900          END=0x9FF
DATABANK   NAME=gpr10      START=0xA00          END=0xAFF
DATABANK   NAME=gpr11      START=0xB00          END=0xBFF PROTECTED
DATABANK   NAME=gpr12      START=0xC00          END=0xCFF PROTECTED
DATABANK   NAME=gpr13      START=0xD00          END=0xDFF
DATABANK   NAME=gpr14      START=0xE00          END=0xEFF
DATABANK   NAME=gpr15      START=0xF00          END=0xF5F
ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF       PROTECTED

SECTION    NAME=INFO   RAM=Info
SECTION    NAME=TCBBUFFER  RAM=gpr8
SECTION    NAME=TCB_MEM    RAM=gpr11
SECTION    NAME=CONFIG     ROM=config

STACK SIZE=0x100


tam olarak aradığım cevap, teşekkürler
Başlık: Ynt: microchip c18
Gönderen: FEHMİ_ASM - 16 Ocak 2011, 19:42:33
Arkadaşlar MPLAB (v8.50) C18'e yeni başlıyorum. Elimde birkaç tane (yazılım açısından eksik ya da hatalı olduğunu zannetmiyorum) metin dosyasına kayıtlı c kod dosyası var. Bunu proje dosyası haline getirmem için hangi yolu izlemem lazım? Hıtech' ile MPLAB'ı entegre kullanırken izlediğim yolu da denedim ama olmadı. Birisi bana bunu adım adım anlatabilir mi?
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: Tagli - 16 Ocak 2011, 19:59:43
Boş bir proje oluştur önce. Sonra elindeki c dosyalarını proje klasörünün içine at. Proje menüsünde "add files to project" tarzı bir seçenek olmalı. Bunun sayesinde dosyaları projene ekleyebilirsin. Bu başlıkta tartışılan hafızaya oturtma sorunu varsa, linker script dosyasını da projeye eklemen gerekecektir.

Sen hangi adımları uyguluyor ve başarısız oluyorsun?
Başlık: Ynt: microchip c18
Gönderen: FEHMİ_ASM - 16 Ocak 2011, 21:26:40
Benim izlediğim yol şu;
    File>New deyip yeni sayfa açıyor ve kodu oraya yapıştırıyorum. Farklı kaydet'i seçiyor ve kayıt türünü C olarak belirliyor ve masaüstündeki boş dosyama kaydediyorum. Sonra Project Wizard--İşlemci Seçimi--Dil Seçimi--Ve son olarak ta projemin kaydedileceği yeri ve proje adını soruyor. Adını gireceğim sırada listede baştan kayıtladığım .C uzantılı olan C1.c çıkıyor buna ok dediğimde de
  Overwrite Existing File?
  File 'C:\Documents and Settings\user\Dekstop\C18 SAMPLES\C1\C1.c ' already exists. Overwrite?
uyarısı geliyor. Mecburen kabul edip tamamlıyorum. Derlediğimde de başka bir hata veriyor. Söylediğinizi birkaç yolla yaptım ama değişen bir şey yok. Belki linker dosyasını eklemediğim için hata veriyor ama daha neredeyse workspace oluştururken hata veriyor.Büyük ihtimalle proje oluşturma aşamasında hata yapıyorum ama nerede? Assembly ile proje oluştururken böyle bir hata almıyorum.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: FEHMİ_ASM - 18 Ocak 2011, 12:32:39
Evet arkadaşlar bir cevap bekliyorum. Ayrıca yukarıdaki hataya rağmen derleme ortamına geçip derlediğimde de syntax hatası alıyorum. Sanırım derleme prosedürünü baştan yanlış ve eksik yaptığım belli. Text'ten kopyaladığım metini bile MPLAB için C dosyası haline getiremiyorum.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: Tagli - 18 Ocak 2011, 13:43:08
Sakıncası yoksa C dosyasını gönder, proje oluşturup derlemeyi deneyeyim.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: FEHMİ_ASM - 18 Ocak 2011, 14:14:41
Tamam işte yazılım. Zaten bu ticari amaçlı değil. Ben yıllardır asm ile prg yazıyorum. Bunun yanından C'ye geçme vakti geldi diye düşünüyorum.
#include <P18F458.h>
Void MSDelay(unsigned int);
void main (void)
{
   TRISB=0;
   while(1)
      {
        PORTB = 0x55;
        MSDelay(250);
        PORTB= 0xAA;
        MSDelay(250);
      }
  }

void MSDelay (unsigned int itime)
  {
    unsigned int i; insigned char j;
    for (i=0;i<itime;i++)
      for(j=0;j<165;j++);
  }

  Gerekirse derleyinceye kadar olan aşamaların öz resimlerini sıralı olarak çeker gönderibilirim.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: Tagli - 18 Ocak 2011, 14:35:32
Birkaç yazım yanlışını düzelttikten sonra çok rahat derlendi. Aynen şöyle yaptım:

Project > Project Wizard > Buradan PIC modeli, toolsuite ve proje klasörünü seçtim.
Projeye başlangıçta hiç bir dosya eklemedim.
Project > Add New File to Project.. > Burada proje klasörünü seçip içine Test.c dosyasını oluşturdum. MPLAB bu dosyayı boş olarak açtı.
Senin kodu içine kopyala yapıştır ile attım. Bir kaç yazım yanlışı vardı, onları düzelttim.
Sorunsuz derlendi (İlk 2 denemem yazım yanlışları yüzünden hata verdi.)
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: FEHMİ_ASM - 18 Ocak 2011, 16:20:00
Bahsettiğim iki hatadan ilkini az önce giderdim. Derleme adımlarımı yanlış yapmışım. Projeyi oluşturdum ancak SYNTAX hatasını sanırım sözdiziminden verdi. Bahsettiğiniz bu kelime hatası nerede idi? Ayrıca fotoğraflarını çektiğim link:
http://hotfile.com/dl/97710053/742553e/MPLAB_C18_DERLEME.rar.html (http://hotfile.com/dl/97710053/742553e/MPLAB_C18_DERLEME.rar.html)
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: Tagli - 18 Ocak 2011, 22:33:08
2. satırda "Void" in V'si küçük olacak.
17. satırda "insigned char j;" ifadesi "unsigned char j;" olacak. Ayrıca alt satıra da geçirirsen daha hoş gözükür.

MPLAB zaten hatanın nerede olduğunu söylüyor. O mavi yazıya çift tıklarsan seni hataya götürür.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: FEHMİ_ASM - 19 Ocak 2011, 11:35:12
Sayın Tagli. Öncelikle ilgilendiğiniz için teşekkür ederim. Projeyi son mesajınızda belirttiğiniz gibi yapmaya çalıştığımda olmadı(daha doğrusu ben yapamadım). Ancak kelime hatalarını düzelttim. Syntax hatası oluşmadı.  Derleme noktasına kadar hiçbir hata almadım. Derlediğimde gösterilen ve Error - could not find file 'c018i.o'. hatasını da şu şekilde düzettim
  Project-->Build Options-->Project-->Directories-->Library Search Path'ı açtım ve New'e ""C:\MCC18\lib"" yazdım. Yani Path ettim.
Problemsiz bir şekilde derledi. Hatta linker dosyasını girmeme bile gerek kalmadı(?).  Ancak programı çalıştırırken son satıra da (yani parantezin olduğu satıra "}"  )imlecin gidip orayı da işliyor gibi gözükmesi-- problemin hatalarının sadece görsel olarak kapatıldığı gibi bir şüphe oluşturdu içimde. Gerçi hex. cof. vb dosyalar oluştu, hatta simülasyonu bile çalıştırdım hatasızca. Umarım bu normal bir durumdur.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: Tagli - 19 Ocak 2011, 11:47:02
'c018i.o' hatasını daha önce ben de almış ve bahsettiğin şekilde düzeltmiştim. Senin dosyanı denerken bu hatayı almadım ama.

Ben de C18'e yeni başlayan biri olarak çoğu şeyden emin değilim ama sanırım linker script dosyasını kendin özellikle belirtmezsen gidip program klasörünün içindekini kullanıyor. Ama bazı durumlarda hafızada alan açmak için bu dosya ile oynamak gerekiyor. Bu durumda linker script'in bir kopyasını proje klasörüne atıp, bu dosyayı da projeye ekledim, sonra değişiklik yaptım. O şekilde çalıştı.

İmlecin paranteze gelmesine çok takılma. İstersen üzerine breakpoint koymayı bir deneyebilirsin ama sanki o tür satırlara konulmuyordu diye hatırlıyorum. Devre istediğin gibi çalışıyorsa sorun yok. O sadece bir gösterim.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: emre salman - 14 Haziran 2016, 04:29:49
linker file dosyasını değiştirdim ama hala hata almaya devam etmekteyim
nasıl yapıyoruz array i tanımlarken farklı mı tanımlıyoruz acaba
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: Tagli - 14 Haziran 2016, 16:08:06
Üzerinden 5 sene geçmiş ama zamanında bu sorunla karşılaştığım ve çözdüğüm dosyayı ve linker betiğini buldum. Yine de tam olarak neyi neden yaptığımı hatırlamıyorum.

Linker betiğinde aşağıdaki gibi bir alan tanımlamışım. Ancak önceden tanımlı başka bir şeyleri silip onun yerine mi yaptım bilmiyorum. PIC18F2550 için.
DATABANK   NAME=genis      START=0x400             END=0x7FF PROTECTED
En alta da şunu eklemişim:
SECTION NAME=q_data RAM=genis
Burada q_data öylesine verdiğim bir isim, özel bir anamalı yok.

Kodda da değişkeni şu şekilde tanımlamışım:
#pragma udata q_data
float q[8][8][4];


Bu arada, tavsiyem C18'i terkedip XC8'e geçmen. Aralarında ciddi bir fark yok zaten, göç zor olmayacaktır. C18 artık desteklenmiyor. Ayrıca sanırım XC8'de linker betiği ile uğraşmana gerek yok.
Başlık: Ynt: microchip c18 de global değişkenler için yer almada problem var
Gönderen: emre salman - 18 Haziran 2016, 02:11:04
c18 deki tcp/ip stackı kullanıyorum eğer xc8 de varsa geçeyim ama sanırım yok