Picproje Elektronik Sitesi

DERLEYİCİLER => Diğer Derleyiciler => KEIL => Konuyu başlatan: Elektroemre - 28 Ağustos 2011, 14:37:56

Başlık: KEIL stack size problemi ??
Gönderen: Elektroemre - 28 Ağustos 2011, 14:37:56
Merhbalar,

Bu aralar KEIL'le uğraşıyorum (daha doğrusu o benle uğraşıyor.) LPC1343.
Yazdığım program büyüyünce ilginç bir şekilde çalışmamaya başladı gerçek devrede.
Daha sonra DEBUG ile işlemcinin HardFault_Handler'e dallandığını farkettim, işlemci orada çakılıp kalıyor.

Daha sonra tesadüfen Stack_Size'a daha büyük bir değer atamayıp değiştirdim ve program çalışmaya başladı.
Ekleme yapınca işlemci yine çakıldı bende daha çok artırdım yine çalıştı!   :)
Şuan;
Stack_Size      EQU     0x00001000
4096 byte'lık kısım ayırdım.

Bu alan bir alt fonka dallandığında bir önceki adres bilgisi ve diğer bilgileri tuttuğu alan değil mi?
BU kadar büyük alana gerçekten ihtiyaç duyuluyor mu?
Ve şurada ilginç bir şey gördüm, lokal değişkenler Stack alanında mı tutuluyor?
http://www.keil.com/forum/19311/ (http://www.keil.com/forum/19311/)

Başlık: Ynt: KEIL stack size problemi ??
Gönderen: Kadir Can(16F84) - 28 Ağustos 2011, 15:11:51
İç içe çok fazla fonksiyon çağrısı yapıyor musunuz?
Mod değişimlerinde yığın kullanılıyormuş galiba.Çok fazla mod değişimi olabilir.
Lokal değişkenler için yığında yer ayrılıyormuş.
https://www.picproje.org/index.php/topic,31195.msg232794.html#msg232794 (https://www.picproje.org/index.php/topic,31195.msg232794.html#msg232794)
Başlık: Ynt: KEIL stack size problemi ??
Gönderen: Elektroemre - 28 Ağustos 2011, 15:37:49
Bu güzel bilgiler için teşekkür ederim hocam.
Kısacası çözüm büyük değişkenleri global yada static tanımlamak :)
Böylece bu değişkenlerin yeri yurdu belli kardeşim deyip, dallanırken bunlar stack'ı şişirmesini engelleyeceğiz doğru mudur hocam?
Başlık: Ynt: KEIL stack size problemi ??
Gönderen: fatihinanc - 28 Ağustos 2011, 16:32:23
Selamlar,

https://www.picproje.org/index.php/topic,34346.0.html (https://www.picproje.org/index.php/topic,34346.0.html)

Bu başlıkta bu konu hakkında biraz konuşmuştuk, belki faydası dokunur ;)
Başlık: Ynt: KEIL stack size problemi ??
Gönderen: fatihinanc - 28 Ağustos 2011, 16:36:32
Alıntı yapılan: Elektroemre - 28 Ağustos 2011, 15:37:49
Bu güzel bilgiler için teşekkür ederim hocam.
Kısacası çözüm büyük değişkenleri global yada static tanımlamak :)
Böylece bu değişkenlerin yeri yurdu belli kardeşim deyip, dallanırken bunlar stack'ı şişirmesini engelleyeceğiz doğru mudur hocam?

Evet doğru ama bu sefer de değişkenler için ayrılan alan RAM'de programın başından sonuna kadar sadece o değişkenler için kullanılabilir olacak. Aslında static tanımlamak da bir nebze global gibi iş görüyor...
Başlık: Ynt: KEIL stack size problemi ??
Gönderen: Elektroemre - 28 Ağustos 2011, 16:59:23
Evet, global daha mantıklı.

Benim mainde 2K'lık bir dizi değişkenim var, alt fonksiyona dallandığında 2K'lık stack işgal edecek.
Yani o 2KB her türlü gözden çıkarılıyor. Global olarak tanımlayıp, hem stackle vs uğraşmamız oluruz.
Hemde başka fonksiyonlarda gerektikçe o değikeni başka amaçlarda kullanabiliriz. Burada iş yükü kod yazana kalıyor.

Birde heap alanı var, bu alan malloc free gibi fonksiyonlarla gerektiğinde değişkenler için tahsis yapılabilecek bir alan galiba.
Tabi MCU'da işletim sistemi yok ama KEIL destekliyor galiba, kullanan var mı daha önce?
Başlık: Ynt: KEIL stack size problemi ??
Gönderen: Elektroemre - 28 Ağustos 2011, 17:02:10
@gerbay hocam,

Sayenizde mantığı daha iyi anladım. Sorun KEIL'de değil, sorun C'ye yeteri kadar hakim olamamakta. Şuan daha iyi anladım, sorunun çözümü için birden fazla yol belirdi zihnimde.