PBP HEX oluşturmada bir sorun yaşıyorum.

Başlatan ibrahim_g, 13 Haziran 2012, 12:26:54

ibrahim_g

Değerli forum kullanıcısı arkadaşlar PBP da yazılmış bir programın HEX kodunu üretmek için derleme yaptığımda   "ERROR: Unable to fit variable sutun_reg"    yani "Değişken sutun_reg sığdıramadık  " şeklinde bir uyarı alıyorum. Benim burdan anladığım komutlar program satırına fazla gelmiş sanırım. Bu konuda yardımcı olacak bir arkadaşım olursa sevininrim. Teşekkür ederim.
Bilim tarafsız değildir.

ete

Kullandığınız sutun_reg isimli değişken muhtemelen bir dizi değişkeni ve pic in kapasitesinin üzerinde bir adet tanımlıyorsunuz.
Her zaman söylüyoruz ama dikkatenalinmiyor maalesef. Kod ile ligi bir soru soruyorsanız kodlarımda buraya koyun diye. Çünkü sozkonusu hata iki sekilde oluşur ya değişken adedi fazlalığından yaDa dizidegiskeni index adedi fazlalığından. Kodları koymadigina göre hangisi olduğunu sen bulacaksın demektir.
Ete

ibrahim_g

#2
Sayın ete kodların da konulması ile ilgili uyarınızı ben ilk defa görüyorum bu nedenle bu uyarınızı dikkate alacağım. Ayrıca cevap verdiğiniz için teşekkür ederim.

M.denetleyici olarak 18F452 kullanıyorum.
kodlar:
PORTA=0  :  PORTB=0  :  PORTC=0  :  PORTD=0
TRISA=0  :  TRISB=0  :  TRISC=0  :  TRISD=0
PORTE=0  : TRISE =0
harf_reg var byte
adres_sec var byte
yinele var byte
sutun_reg var byte[300]
veri var byte
yazi_reg var byte
i VAR BYTE
x var byte
z var byte
y var byte
t var byte
q var byte
sure var byte
yedek var byte

CLEAR  :  PORTD=255:sure=200 :GOTO oku:
oku:
call yazi  : yazi_reg=yazi_reg+1  :  z=harf_reg
    for i=1 to z
        call yazi  : yazi_reg=yazi_reg+1  : call data_sec
        for y=0 to yinele
            call datalar
            sutun_reg[t]=veri  :  t=t+1
            adres_sec=adres_sec+1
        next y
    next i
t=0
goto gonder
gonder:
FOR Q=0 TO 5
    for i=0 to 15
        PORTB=sutun_reg[t]  :  t=t+1
        PORTA=i
        PORTC=%11111110:pauseus sure:PORTC=%11111111
    next i
    for i=0 to 15
        PORTB=sutun_reg[t]  :  t=t+1
        PORTA=i
        PORTC=%11111101:pauseus sure:PORTC=%11111111
    next i
    for i=0 to 15
        PORTB=sutun_reg[t]  :  t=t+1
        PORTA=i
        PORTC=%11111011:pauseus sure:PORTC=%11111111
    next i
    for i=0 to 11
        PORTB=sutun_reg[t]  :  t=t+1
        PORTA=i
        PORTC=%11110111:pauseus sure:PORTC=%11111111
    next i
t=0
NEXT Q
goto kaydir
kaydir:
    yedek=sutun_reg[0]
    for i=0 to 239
        sutun_reg=sutun_reg[i+1]
    next i
        sutun_reg[240]=yedek
goto gonder
yazi:
lookup yazi_reg,[40,"KAYACAK YAZI İFADESİ         "],harf_reg
return

data_sec:
select case harf_reg
case "A"
adres_sec=0  :  yinele=5  :  return
case "B"
adres_sec=6  :  yinele=5  :  return
case "C"
adres_sec=12  :  yinele=5  :  return
case "D"
adres_sec=18  :  yinele=5  :  return
case "E"
adres_sec=24  :  yinele=5  :  return
case "F"
adres_sec=30  :  yinele=5  :  return
case "G"
adres_sec=36  :  yinele=5  :  return
case "H"
adres_sec=42  :  yinele=5  :  return
case "I"
adres_sec=48  :  yinele=3  :  return
case "i"
adres_sec=52  :  yinele=3  :  return
case "J"
adres_sec=56  :  yinele=5  :  return
case "K"
adres_sec=62  :  yinele=5  :  return
case "L"
adres_sec=68  :  yinele=5  :  return
case "M"
adres_sec=74  :  yinele=5  :  return
case "N"
adres_sec=80  :  yinele=5  :  return
case "O"
adres_sec=86  :  yinele=5  :  return
case "P"
adres_sec=92  :  yinele=5  :  return
case "Q"
adres_sec=98  :  yinele=5  :  return
case "R"
adres_sec=104  :  yinele=5  :  return
case "S"
adres_sec=110  :  yinele=5  :  return
case "T"
adres_sec=116  :  yinele=5  :  return
case "U"
adres_sec=122  :  yinele=5  :  return
case "ü"
adres_sec=128  :  yinele=5  :  return
case "V"
adres_sec=134  :  yinele=5  :  return
case "W"
adres_sec=140  :  yinele=5  :  return
case "X"
adres_sec=146  :  yinele=5  :  return
case "Y"
adres_sec=152  :  yinele=5  :  return
case "Z"
adres_sec=158  :  yinele=5  :  return
case " "
adres_sec=164  :  yinele=5  :  return
case "0"
adres_sec=170  :  yinele=5  :  return
case "1"
adres_sec=176  :  yinele=3  :  return
case "2"
adres_sec=180  :  yinele=5  :  return
case "3"
adres_sec=186  :  yinele=5  :  return
case "4"
adres_sec=192  :  yinele=5  :  return
case "5"
adres_sec=198  :  yinele=5  :  return
case "6"
adres_sec=204  :  yinele=5  :  return
case "7"
adres_sec=210  :  yinele=5  :  return
case "8"
adres_sec=216  :  yinele=5  :  return
case "9"
adres_sec=222  :  yinele=5  :  return
end select

datalar:

lookup adres_sec,[$7C,$0A,$09,$0A,$7C,0_      ;A
                   ,$7F,$49,$49,$49,$36,0_      ;B
                   ,$3E,$41,$41,$41,$22,0_      ;C
                   ,$7F,$41,$41,$41,$3E,0_      ;D
                   ,$7F,$49,$49,$49,$41,0_      ;E
                   ,$7F,$09,$09,$09,$01,0_      ;F
                   ,$3E,$41,$49,$49,$3A,0_      ;G
                   ,$7F,$08,$08,$08,$7F,0_      ;H
                   ,$41,$7F,$41,0_              ;I
                   ,$44,$7D,$44,0_              ;İ
                   ,$20,$40,$41,$3F,$01,0_      ;J
                   ,$7F,$08,$14,$22,$41,0_      ;K
                   ,$7F,$40,$40,$40,$40,0_      ;L
                   ,$7F,$02,$04,$02,$7F,0_      ;M
                   ,$7F,$04,$08,$10,$7F,0_      ;N
                   ,$3E,$41,$41,$41,$3E,0_      ;O
                   ,$7F,$09,$09,$09,$06,0_      ;P
                   ,$3E,$41,$51,$61,$3E,0_      ;Q
                   ,$7F,$09,$19,$29,$46,0_      ;R
                   ,$26,$49,$49,$49,$32,0_      ;S
                   ,$01,$01,$7F,$01,$01,0_      ;T
                   ,$3F,$40,$40,$40,$3F,0_      ;U
                   ,$1E,$41,$01,$41,$1E,0_      ;Ü
                   ,$1F,$20,$40,$20,$1F,0_      ;V
                   ,$3F,$40,$30,$40,$3F,0_      ;W
                   ,$63,$14,$08,$14,$63,0_      ;X
                   ,$07,$08,$70,$08,$07,0_      ;Y
                   ,$61,$51,$49,$45,$43,0_      ;Z
                   ,$00,$00,$00,$00,$00,0_      ;Space
                   ,$3E,$51,$49,$45,$3E,0_      ;0
                   ,$42,$7F,$40,0_              ;1
                   ,$62,$51,$49,$45,$42,0_      ;2   
                   ,$22,$49,$49,$49,$36,0_      ;3
                   ,$18,$14,$12,$7F,$10,0_      ;4
                   ,$2F,$49,$49,$49,$31,0_      ;5
                   ,$3E,$49,$49,$49,$32,0_      ;6
                   ,$61,$11,$09,$05,$03,0_      ;7
                   ,$36,$49,$49,$49,$36,0_      ;8
                   ,$26,$49,$49,$49,$3E,0],veri ;9
return
END
Bilim tarafsız değildir.

ete

Verdiğin kodlar ile bahsini ettiğin hata mesajının yakından uzaktan alakası yok maalesef.
Programda yalnızca bir yerde hata var ve derlemeye kalktığın zaman;
Out of Argument hatası veriyor. Sebebi de Lookup tablosunda yer alan "İ" karekterinin bu hataya sebep olması.

Aşağıdaki satıra bak;
yazi:
lookup yazi_reg,[40,"KAYACAK YAZI İFADESİ                     "],harf_reg
Burada yer alan İFADESİ kelimesinde yer alan İ harfleri söz konusu hatayı yaratmaktadır. Bu harfleri I ile değiştirdiğin zaman hatasız derleme yapılabilmektedir.
Diğer eksiklikler şöyle;
-Programın başına sigorta ayarlarınıda koysan fena olmayacak.
asm
    __CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H
    __CONFIG _CONFIG2L, _BOR_ON_2L & _BORV_20_2L & _PWRT_OFF_2L
    __CONFIG _CONFIG2H, _WDT_ON_2H & _WDTPS_128_2H
    __CONFIG _CONFIG3H, _CCP2MX_ON_3H
    __CONFIG _CONFIG4L, _STVR_ON_4L & _LVP_OFF_4L & _DEBUG_OFF_4L
    __CONFIG _CONFIG5L, _CP0_OFF_5L & _CP1_OFF_5L & _CP2_OFF_5L & _CP3_OFF_5L
    __CONFIG _CONFIG5H, _CPB_OFF_5H & _CPD_OFF_5H
    __CONFIG _CONFIG6L, _WRT0_OFF_6L & _WRT1_OFF_6L & _WRT2_OFF_6L & _WRT3_OFF_6L
    __CONFIG _CONFIG6H, _WRTC_OFF_6H & _WRTB_OFF_6H & _WRTD_OFF_6H
    __CONFIG _CONFIG7L, _EBTR0_OFF_7L & _EBTR1_OFF_7L & _EBTR2_OFF_7L & _EBTR3_OFF_7L
    __CONFIG _CONFIG7H, _EBTRB_OFF_7H
endasm

- Yine programın başına çalışma frekansınıda belirtmen gerekiyor.
   DEFINE OSC 4 
   Şayet 4 Mhzden farklı bir frekansta çalışıyor isen 4 yerine çalışma frekansını yaz ve frekans 6 Mhz den fazla ise sigorta ayarlarındaki;
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _XT_OSC_1H  satırını aşağıdaki ile değiştir.
__CONFIG _CONFIG1H, _OSCS_OFF_1H & _HS_OSC_1H

- Bir diğer eksiklik de CLEAR komutundan evvel verilmesi gereken açılış gecikmesidir. Oraya PAUSE 500 yerleştirmen gerekiyor.

Hepsi bu kadar
Ete

ibrahim_g

Sayın ete bu konuyla ilgilendiğiniz için size özellikle teşekkür ederim. Ben bu derleme işlemini 2 farklı bilgisayarda denedim. 1. bilgisayarda yukarıda vermiş olduğum hata mesajı ile karşılaştım. Tabi sizin önermiş olduğunuz düzenlemeleri de yaptım. 2. bilgisayarda ise
"the microchip only allows up to 62 characters to be used for path and filename. current length is 113  characters."

"mikroçip tek yolu ve dosya için kullanılmak üzere 62 karaktere kadar izin verir. mevcut uzunluğu 113 karakterdir."

mesajıyla karşılaşıyorum. Bu konuda yardımcı olursanız sevinirim. Teşekkür ederim.

Bilim tarafsız değildir.

ete

Sürekli olarak yineliyorum ama kimse itibar etmiyor. Yol uzunluğu 62 karekteri geçmemesi için PBP derleyicisinin C: ana klasöründe yer alması gerekiyor. Götürüp onu program files içine koyarsanız program adına yoluna ektradan bir sürü karakter yüklemiş olursunuz. Kısaca bu hata sisn derleme için kulkandığınız yol isminin (path) çok uzun olduğunu söylüyor ve derleme yapamayacağını belirtiyor.
Örnek vermek gerekirse derleme yapılırken derlenecek prorogramın nerede kayıtlı olduğu derleyiciye bildiriliyor.
Mesele Dene isimli bir program derlenecek diyelim C:\PBP260\PBPW -p16fxxx \D:\programlarım\Dene.bas
şeklinde bir yol ismi derleyiciye verliyor. Ama gerek PBP derleyicisi ve gerekse derlenecek programın yer aldığı klasör adı iç içe geçmiş klasörleri şeklinde ise yol ismi uzuyor ve sonuçta bahsi geçen hata verliyor.
Bu tür hatalara maruz kalmamak için derleyiciyi C:\ ana klasörüne kurun.
Çalıştığınız programlarıda yine Disk adı ve ardından bir çalışma klasörü şeklinde belirleyin.
Örnek D:\Programlarım\Dene.bas   gibi.
Böylece söz konusu hata meydana gelmez.

Ete

ibrahim_g

Sayın ete yardımlarınız için çok teşekkür ederim. Ancak bir sorum daha olacak, eğer çok fazla olmuyorsam tabi. Dediğiniz işlemi yaptın ve tam derleme yapıyordu ki
"unable to compile untitled.pbp  the source directory is read only."

"untitled.pbp kaynak dizini derleme yapamaz salt okunur."

bu sorunu nasıl aşarım acaba bu konuda da yardımcı olur musunuz.
Bilim tarafsız değildir.

ete

Kaynak dosyanın olduğu klasör yalnızca okunabilir bir klasörmüş. Programı bir başka klasöre kopyala ve orada derlemeye çalış.
Yada klasörün üzerinde sağ tıkla ve özelliklerini aç , read-only seçeneğini iptal etmeye çalış. Her nedense bu windowsun bir özelliği sanırım bazen bir yerden gelmiş (rar içinden açılmış ) klasörleri yalnızca read onloy olarak açıyor windows. Bu özellik dosyaların yenilenmesine imkan tanımıyor.
Bir başka yol ise read only dediği klasörün ismini SIL olarak değiştir.
SOnra eski isimli bir başka klasör aç ve sil isimli kalsör içindekileri yeni klasöre kopyala. Yeniden derlemeye çalış.
Sonra sil isimli klasörü silebilirsin artık.

Ete

Powered by EzPortal