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?
Hocam startup dosyasından HEAP i artırırsanız sorununuz muhtemelen çözülür.
Ç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.
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?
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.