STM32F4 keil malloc() ?

Başlatan DaRt, 30 Nisan 2015, 10:50:05

DaRt

Merhaba Arkadaşlar;
Birkaç haftadır c ve stm32f4 discovery kit ile haşır neşir olmaktayım. Lede yakıp söndürme ile başlayan serüvenimde board üzerinde software mp3 decoder kullanarak cs43l22 ses çipinden ses alma niyetindeyim. Bu amaçla başladığım çalışmalarda sdcard üzeriden aldığım pcm formatındaki verileri cs43l22 kulaklık çıkışından alabiliyor, usb cdc client arayüzü ile usbden bağlantı kurarak i2c formunda komutlarla cs43l22 yi yöneterek ses azaltıp arttırma, mute beep vs gibi işlemler yapıyorum. Ancak mp3 dosyasından pcm dataları oluşturacak mp3 ecoderi konusunda takıldım. Helix decoderi keile aktarıp sorunsuz derliyorum ancak şöyle bir sorunum var.

mp3DecInfo_pointer = (MP3DecInfo *)malloc(sizeof(MP3DecInfo));
	if (!mp3DecInfo_pointer)
		return 0;


Yukarıdaki fonksiyon sorunsuz derleniyor ancak program çalışırken sürekli 0 döndürüyor yani kendine ramda kullanım alanı açamıyor. Bu da programın ilerleyen adımlarında decoderin işlevini yerine getirmemesine sebep oluyor. Bu koddan bağımsız olarak boş bir projede  malloc() ile kendi fonksiyonumu oluşturduğumda en fazla 256 byte ram alanı açabiliyorum. 256 byte alan açıkken bir başka 256 byte alan açmaya çalıştığımda yine fonksiyon 0 döndürüyor. İlk açtığım 256 byte alanı free yaptığımda tekrar 256 byte alan açabiliyorum. 64 kbyte sram a sahip m3lere göre yazılan ve sorunsuz çalışan (denemedim ama yayınlandığına göre böyledir eminim ki) kodlar 192kbyte srama sahip m4te çalışmaması bir ayar sorunu olduğunu düşündürüyor. Bu konuda bilgi sahibi olan arkadaşlar var mı aramızda?

yamak

Hocam startup dosyasından HEAP i artırırsanız sorununuz muhtemelen çözülür.

DaRt

Çok teşekkür ederim Hocam. HEAP size 0x200 den 0xf000 a büyütünce sorun çözüldü. Çok basitmiş ayarı ama bilmeyince çok uğraştırıyor. Tekrar çok teşekkür ederim.

yldzelektronik

Alıntı yapılan: yamak - 30 Nisan 2015, 10:54:09
Hocam startup dosyasından HEAP i artırırsanız sorununuz muhtemelen çözülür.

startup dosyasında birde
Stack_Size      EQU     0x00000400

                AREA    STACK, NOINIT, READWRITE, ALIGN=3
Stack_Mem       SPACE   Stack_Size
__initial_sp

kısmı var.Bu nedir?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

CLR

Stack section(stack memory alanı) byte sayısı için kullanılır , max byte sayısını değiştirebilirsin. Stack section ne işe yarar diyorsan, local variables, parametler , fonksiyon dönüş edresleri vs tutulur. Mesela içi içe çok fazla fonksiyon çağırırsan stack overflow(taşması) olabilir.
Knowledge and Experience are Power