16f1827 stack taşması

Başlatan F®T, 15 Mayıs 2015, 00:24:03

F®T

Arkadaşlar selamlar.
Stack sigortası açık ve RETURN problemide yok.Ama sürekli reset atıyor.

;-------------------------------------------------------------------------------
;**** Added by Fuse Configurator ****
; Use the Fuse Configurator plug-in to change these settings

Device = 16F1827

Config1 FOSC_INTOSC,WDTE_OFF,PWRTE_ON,MCLRE_OFF,CP_ON,CPD_ON,BOREN_OFF,CLKOUTEN_OFF,IESO_ON,FCMEN_On
Config2 WRT_ALL,PLLEN_ON,STVREN_ON,LVP_OFF,BORV_19,LVP_OFF

;**** End of Fuse Configurator Settings ****
;-------------------------------------------------------------------------------       

Declare Xtal=32     
OSCCON= %11110000   'PLL enabled, Internal RC-8MHz   


TRISA=%00110000:PORTA=0
TRISB=%00000010:PORTB=0 

Dim SATIR    As Byte
Dim SUTUN    As Byte


Symbol DS   =PORTB.0                 '74hct595 ayak bağlantıları
Symbol SHCP =PORTB.1
Symbol STCP =PORTB.2

BASLA:
           
SATIR=20
SUTUN=20

GoSub SUT



GoTo BASLA 


SUT:     
Low STCP
SHOut DS,SHCP,1,[SATIR,SUTUN]
High STCP 
Return 
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

Tris regsterinde PortB.1giriş yapılmış çıkış olması gerekirdi.
Başka bir kusur göremedim. Ama bu işlemcide Comparatör , Analog pinler , Kapasitif buton sensing, gibiilave özellikler olması gerekir. Bunların bir kısmı default seçilidir onları da devre dışı bırakmak gerekir.

Ete

F®T

#2
Hocam portu düzelttim fakat yine aynı stack taşması yapıyor.Fakat SHOut DS,SHCP,1,[SATIR,SUTUN]  satırını iptal edince düzeliyor.Bir anlam veremedim.

EK:Hata mesajındada stack  owerflow  (BIT_STKOVF set)  gibi bir mesaj var.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

İlyas KAYA

pause 10 gibi küçük bir bekleme verip denermisin.
Göz odur ki dağ ardını görsün,
Akıl odur ki başa geleceği bilsin.!

ete

Data sheet deki açıklamaya baklırsa Config registerdeki _STVREN_ON şeklinde yani STVREN biti ON olarak ayarlanır ise 16 kademeli stack program çalışıpta 16 cı kademeye geldiğinde stack taşması meydana gelip pic resetlenir diyor. Muhtemelen sorun budur. Bu biti _STVREN_OFF şeklinde ayarla ve tekrar dene bakalım.
 
"3.4.2 OVERFLOW/UNDERFLOW RESET
If the STVREN bit in Configuration Word 2 is
programmed to '1', the device will be reset if the stack
is PUSHed beyond the sixteenth level or POPed
beyond the first level, setting the appropriate bits
(STKOVF or STKUNF, respectively) in the PCON
register."

Aslında yazdığın programda bir CALL işlemi yani stack'a push yada pull yaptıracak bir şey yok ama derleyici derlerken bunu yaptırıyor sanırım. Sorun bana kalırsa derleyici. Sırf meraktan PBP da aynı programı yazacağım bakalım stack taşması yaratacakmıdır.

Ete

ete

Programı PBP da denedim. Bir kusurun daha ortaya çıktı. Şemada 595 lerin CLK girişi PORTB.2 de gözüküyor ama programda PORTB.1 yazmışsın. Onu düzeltince her şey çalıştı.
Dosyalar ilişiktedir.

Böylece PROTON derleyicinin önemli bir BUG'ı daha ortaya çıkmış oluyor. Kullananlara duyurulur. SHOUT komutunu kullanırken dikkat etmek gerek.

Ete

F®T

#6
Yok İlyas hocam farketmiyor.Bana kalırsada protonun yine saçmalaması ile alakalı.Ete hocam STVREN_ON denildiğinde 16 stack seviyesine kadar resetlememesi lazım değilmi.OFF olursa 16 stack seviyesi devre dışı kalması lazım fakat bu proton bu işlemci için bu iş yapamıyor.3.5.5.5 sürümü ve 3.5.7.1 sürümüde aynı farketmiyor.Bana kalırsa sizin dediğiniz gibi proton güven vermiyor.

Evet hocam öyle çok deneme yaptım ki unutmusum o ayakları değiştirmeyi.Normalde ayak konfigrasyonum doğru.Bu deneme programında SHOut DS,SHCP,1,[SATIR,SUTUN] komutunda sorun olduğunu bende farketmiştim ve onunla uğraşırken alternatif olarak ayak değişikliği yapmıştım.Siteye yüklerken unutmuşum o kısmı düzeltmeyi.

Ayrıca RaMu Hocamın asm de proton hatasını bulup düzelttiği videoyuda sonra bu hata ile karşılaşacak arkadaşlara faydası olması için paylaşıyorum.
https://www.youtube.com/watch?feature=player_embedded&v=6o5Ld38g8jE

Hocam yardımınız için teşekkür ediyorum.Programı protonla yazmamaya karar verdim.Yine en iyisi basic.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

ete

stack taşması olduğunda program reset atsınmı atmasınmı şeklinde bir ayar veriyor o bit. Yoksa zaten 16 kademe doluncaya kadar işlemci herhangi bir sorun yaratmaz. Ayrıca stak taşması olunca reset atmaz işlemci çoğunlukla kilitlenir. Bu yeni nesil işlemcide bunu önlemek için oraya bir bit kontrolü koyarak işlemcinin kilitlenmesini önlemişler. Bak bu sayede derleyicide sorun olduğunu anladık. İşe yarar bir özellik bence.

Ama sorun kesinlikle senin derleyicide ve mutlaka ASM sinde bir yerden RETURN ile dönmeyip başka yerlere atlıyor ve goto ile dönüp her seferinde stack bir artırılıyor. Sonuçta 16 yı aştığın içinde stack taşması meydana geliyor. Sende Sigorta ayarından Stack taşması olunca pici resetle seçeneğini seçtiğin için reset atılıyor sürekli olarak.

Ete

F®T

Evet hocam hata protonda.asm bilmiyorum RaMu hoca asm sinde return oluşmadığını tesbit edip düzeltince proton kodu çalışmaya başladı.Ama protonda gerçekten dediğiniz gibi aşırı hatalar var.Hocam proton bıkkınlık verdi.Şahsen artık sizin dediklerinizi daha iyi anlamaya başladım.
"Hakk" şerleri hayr eyler Zannetme ki gayr eyler Ârif anı seyreyler Mevlâ görelim neyler Neylerse güzel eyler.

Powered by EzPortal