Pbp kesmede program kodunun fazlalaşması

Başlatan Ruzgarbey, 23 Aralık 2009, 23:00:13

Ruzgarbey

merhaba arkadaşlar.16f877 işlemcime 4000 bytelik program hazırladım.eklemem gereken bazı konular oldu ve kesme kullanmam gerekti.sadece kesme tanımlamalarını ve kesme alt programını yazıp derlediğimde kullandığım program kapasitesi 5400 kusur byte oldu.ve hal böyle olunca kodlarım sığmayacak.diyebilirsinizki daha yüksek kapasiteli bir işlemci kullan veya başka bir dil ileyaz.ama ben basicteki bu sorunun çözülebileceği kanaatindeyim.programı derledikten sonra basic in her komuttan sonra kesme bayrağını sorguladığını gördüm buda kodların şişmesine neden oluyor.bu sorunun bir çözümü varmıdır arkadaşlar.saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

ete

Çözüm olsa olsa kesme kısmının ASM de yazılması ile sağlanır sanıırm.
Aşağıda verdiğim linkteki yazışmaları takip edebilirsen bir şeyler çıkacaktır.

Ete

http://www.picbasic.co.uk/forum/showthread.php?t=3251&highlight=interrup
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

Ruzgarbey

ETE hocam ilgilendiğiniz için teşekkür ederim.assembly dilinde kesmeleri inceliyorum.acaba kesme alt programını ve kesme tanımlamalarını assembly ile yazsam nasıl olur onu denecem.saygılarımla....
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

teknikelektronikci

18f452

877 ye göre ucuz
hızlı
daha fazla kapasite
interupt kesmeelri fazla aynı pin yapısına sahip
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

Ruzgarbey

Alıntı yapılan: "teknikelektronikci"18f452

877 ye göre ucuz
hızlı
daha fazla kapasite
interupt kesmeelri fazla aynı pin yapısına sahip
Evet bahsettiğiniz işlemciyi kayan yazı sistemlerinde kullanıyorum.877 e göre kod kapasitesi 4 kat fazla ama 877 den ucuz değil :)  makset burada işlemcinin kapasitesi değil kaldiki yukardada bunu belirtmiştim.amacım picbasicte kesme olaylarında yaşanan kod fazlalaşmasını çözebilmek. mesala asm de bir timer kesmesini kullanmak için verilen örnekte kodlar o kadar basitki anlamakta güçlük çekiyorum. programın başlangıcınde kesme tanımlanıyor ve tanımlanan kesme kesinlikle main programda sorgulanmıyor bizim pbp nin yaptı gibi:)şaşkınlık içindekaldım diyebilirim..saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

bymrz


Erol YILMAZ

Fırsat bu fırsat hemen C ye geçin,
Basic ten bile daha kolay olan bu dili keşfedin !

PICC bölümünde PIC16 için son versiyon HI-TECH PICC 9.70 verildi.

Son derece güzel çalışıyor.

(NOT: Kendini misyoner gibi hissediyorum :D )

KAZIMUGUR

İlk satırları okurken , dedim kendi kendime kesin cecilerden komisyon alıyor bu , ama değilmiş , meğer ... :)

Bu sese kulak verin , her misyoner kötü değildir.

muhittin_kaplan

Hocam Aynen Öylesiniz. "C misyonerliği" kanunda yasakmıdır acaba.
arkadaşın sorusuna gelince ya, ASM de yazacak yada Proton a geçip Hardware intterrupt kullanacak.

wsxwsx

Alıntı YapOnce you try this, you WILL never use ON INTERRUPT again.

http://darreltaylor.com/DT_INTS-18/home.html

muhittin_kaplan

bu hardware değil sanırım. software bence. program belleğini kullanımının artması bundada olur kanısındayım.

Ruzgarbey

alone_lover hocam başka konularada yazmış olduğunuz cevaplarda basicte bir problemle karşılaşıldığında hemen protona davet ediyorsunuz..birgün gerçekten protonu merak edip inceleyeceğim :)

Allegro hocam C diline nedense hiç ısınamadım.eskiden küçük çaplı pc programlarını visual basicte yazdığımdan basic diline karşı bir alışmışlığım var. C dilini biraz inceledim ve kafamı karıştıran birçok işaret olduğunu gördüm ;i{} vs o yüzden ısınamadım.aslında asm yi seviyorum ama kısa kod yazarsam :D uzun kodlarda kodların içinde kayboluyorum.ilk mesajımda yazdığım kodlarda bir GLCD kullandım.farklı amaçlar için  kesme eklemek istedim haliylede eklme yapınca kodda şişme meydana geldi.en iyisi mplab indirerek asm de simüle ederek yavaş yavaş yazmak :D şimdiden korkuyorum ..ilgilendiğiniz için çok teşekkür ederim.saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

BenC

Alıntı yapılan: "ete"Çözüm olsa olsa kesme kısmının ASM de yazılması ile sağlanır sanıırm.
Aşağıda verdiğim linkteki yazışmaları takip edebilirsen bir şeyler çıkacaktır.

Ete

http://www.picbasic.co.uk/forum/showthread.php?t=3251&highlight=interrup


@ete hocam.

Bir zamanlar bende PBP kullanıyordum. Bazı çalışmalarımda da halen kullanmaktayım.  PBP deki kesme mantığı beni hep sinir etmiştir. Sorun Kesme rutini değil gibi geliyor. Kesmeyi asm de de yazsanız PBP her komut satırının başına kesme kontrolünü yine eklemeyecek mi? Bir ara bende baya bir sorun yaşamıştım kesme olayında. C ye geçtim kurtuldum artık. yavaş yavaş C de ilerliyoruz bakalım.  Rüzgarbey e de tavsiyem C olacak ama misyonerlik baaabında değil. İlerleyen çalışmalarda o da anlayacak C gücünü. Başka çare yok gibi ya 18f452 kullanacaksın yada dil değiştireceksin :) ( En zoruda bu ama çook faydası var.Kendi fikrim)
ŞEHİT KANIYLA ALINMIŞ BU GÜZELİM VATANIN TOPRAKLARI KARIŞ KARIŞ SATILIYOR!!  VATAN HAİNİ OLMA!!

akof

http://melabs.com/resources/pbpmanual/9_0.htm

burada pbp da asm kesme için bigi mevcut. 3 sene önce sadece nasıl çalıştığına bakmak için birşeyler yazmıştım

@ DEVICE pic16F628  
@ DEVICE PIC16F628, MCLR_OFF                                                    
@ DEVICE pic16F628, WDT_OFF              
@ DEVICE pic16F628, PWRT_OFF            
@ DEVICE pic16F628, PROTECT_OFF
@ DEVICE pic16F628, XT_OSC

   wsave  var   byte $20 system
   ssave  var   byte bank0 system
   psave  var   byte bank0 system
   
   sn      var byte
   dk     VAR BYTE
   saat   var byte
   sayac   var byte
   i       var word  
   
Goto BASLA
      
   define INTHAND KESME
   asm
KESME
   bcf     INTCON,7   
   movwf   wsave
   swapf   STATUS, W
   clrf   STATUS
   movwf   ssave
   movf   PCLATH, W
   movwf   psave

   ENDASM
TMR1L = $FE '55536 sayısı hex karsılığı D8F0
TMR1H = $D8 '55536 dan basla 65536 da(10 milisaniye) kesme oluşur
           'tmr1 değerleri tekrar yüklendi BURDA BASLADI ÇÜNKÜ İÇERİK DEĞİŞTİ
PIR1.0 = 0 'tekrar kesme olması için kurduk
SAYAC = SAYAC + 1
IF SAYAC = 100  THEN
SAYAC = 0
SN = SN + 1
   IF SN = 60 THEN
   SN = 0
   DK = DK + 1
       if dk = 60 then
       dk = 0
       saat = saat +1
           if saat = 24 then  
           saat = 0
           endif
       endif
   endif        
ENDIF
   ASM   
   movf   psave, W
   movwf   PCLATH
   swapf   ssave, W
   movwf   STATUS
   swapf   wsave, F
   swapf   wsave, W
   bsf     INTCON,7
   retfie
   endasm


BASLA :    
sn = 0
dk = 0
saat = 0
sayac = 0
TMR1L = $FE '55536 sayısı hex karsılığı D8F0
TMR1H = $D8 '55536 dan basla 65536 da(10 milisaniye) kesme oluşur
CMCON = 7'porta I/O
INTCON = %11000000 'kesme , çevresel kesmeler açık
PIE1.0 = 1' timer1 kesmesine izin ver
T1CON.1 = 0 'zamanlayıcı F/4  
T1CON.0 = 1 'zamanlayıcı çalıştır
   
goster :
PAUSE 100
lcdout 254,1
LCDOUT $FE,$84,DEC2 SAAT,":",DEC2 DK,":",dec2 sn
goto goster

END

3 sene önce böyle birşeyler yazmışım ve düzgün çalıştı. pause 100 varken bile interrupt oluşabiliyor. Ama daha sonra protona geçtim.  proton+ da basic temelli sorun yaşamazsın ve tavsiye ederim

ete

Hem ASM hem C hemde Basic bilen birisi olarak yazdığım programların yüzde doksanını basic de yazıyorum. Şimdiye kadar yazamadığım bir tek program kaldı. Deveye hendek atlatmakta dahil basic te yapamayacağım iş yok gibi nerdeyse.
Çok sıkışınca içine biraz ASM katıyorum yine işimi hallediyorum. Kesmelerde çok sıkıntı yaşadığımıda söyleyemeyeceğim.  Ne yaptımsa çalıştı.
C dilini gerçekten tartışmak istemiyorum. Olanakları sınırsız. Ama sana yazma hürriyeti bırakmıyor. C de program yazarken İngiliz saray protokolüne girmiş birisi gibi hissediyorum kendimi. Şöyle yazılmış programlara bir bakınca basicde sanki türkçe yazılmış roman gibi her şeyi bakarak okuyabiliyorum. Ama C ve ASM de kırk saat düşünmek zorunda kalıyorum. Bunlarda beni sıkıyor. Bu yalnızca bana ait bir sorundur. Başkaları olayı farklı görüyordur ona saygım var. Kimseyi şuna geç buna geç diye zorlamıyorum. Kim ne isterse onu yapsın. Kişi kendini nerde veya hangi dilde rahat hissederse orda yazar bu en tabii hakkıdır. Ben Protonda iyi biliyorum hatta ilk protonda program yazmaya başlamıştım. Ama derleyicilerdeki bug lar beni yıldırdı. Henüz hatasız çalışan bir derleyiciye rastlamadım henüz. O nedenle kendi yolumda gidiyorum. Nereye kadar giderim bilinmez. Belkide tam teşekküllü fonskiyonlar tipinde yazılabilen bir derleyici bulana kadar. Aslında var ama henüz deneme fırsatı bulamadım. Yanlış hatırlamıyorsam swordfish gibi bir şey idi adı. Biraz incelemiştim ama kullanmak mümkün olmadı henüz. Kısaca, pic basit  bir işlemci ve öyle çok teferruatlı bir programlama diline gerek yok diye düşünüyorum.

Benim için önemli olan dışarıdan bağladığım her şeyi kolaylıkla kontrol edebileyim başka bir şey istemem onuda yaptırıyor bana basic. Derlemeler sorunsuz anlayacağınız hayatımdan son derece memnunum. Çok zor ve karmaşık programları neredeyse yarım saatte yazabiliyorum. Çoğu zaman 25-30 satır tutan programları 5-10 dakikada yazabiliyorum daha ne isteyeyimki.
Rahatım, kolay çalışıyorum. Her kes kendi tercihinide bu yönde yapmalı.


Bu arada kesme konusunu hemen belirteyim. Kesme yi Basic içinde ama ASM de yazarsanız ASM kesmesi gibi çalışır. Adı sütünde zaten ASM de yazdınız. Öyle olmasa ASM de direk yazılan kesmelerinde çalışmaması gerekmezmi?. Zaten öyle olmasa neden uğraşıpta ASM de kesme yaratayımki. Bir farkı var elbette.
Herkese  iyi akşamlar dilerim.
Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com