ST link ile MCU'nun flashına data kaydetmek.

Başlatan isoment01, 20 Mayıs 2020, 17:36:15

isoment01

Arkadaşlar yaklaşık 900kb lık bir arrayim var bu array bana kodun yüklenmesi sırasında vakit kaybettiriyor. Ben de bu datayı hafızaya kalıcı olarak kaydetmek istiyorum. Program'da çağrılırsa yüklendiği adress aralığını gösterecek  bir yöntem yapmak istiyorum fakat bilgim yok tecrübesi olan arkadaşlar yardım edebilir mi ?

isoment01

Öncelikle galiba .c file'ım da bulunan bu arrayi .bin file'a çevirmem gerek yardımcı olabilecek var mı ??

MrDarK

Hxd isminde bir program var o program üzerinden bin formatında data elde edebilirsin.

Picproje Eğitim Gönüllüleri ~ MrDarK

mr.engineer

Alıntı yapılan: isoment01 - 20 Mayıs 2020, 19:11:53Öncelikle galiba .c file'ım da bulunan bu arrayi .bin file'a çevirmem gerek yardımcı olabilecek var mı ??

Hocam bunu ben KEIL'den yapmıştım. Hex dosyasını binary dosyaya çevirebilirsin. Şuradan bakabilirsiniz. Diğer IDE'lerde de vardır benzer bir yöntem.

http://www.keil.com/support/docs/274.htm

RaMu

Nasıl yapıldığını bilmiyorum ama yapılabileceğini düşünüyorum.
Bir ara benzer bir şeye bakmıştım.
Yöntemlerden biri ki bence iyi bir yöntem değil,
ya ide üzerinden yada kullanıyorsan direk stlink pc programı üzerinden,
mikrodenetleyicinin program hafızası adresi şu şu aralıktır diye değiltirmek.
Bu yanlış hatırlıyor olabilirim ama ide üzerinde çalışırken linker dosyasını değiştirerek yapılıyor olabilir.

Belki 900kb ı program hafızasının yazdığın bölümünü kod korumaya alıp
bir defa programlayıp
sonraki programlamalarda bu bölüme yazmadan devam edebilirsin.

Yazdıklarımım doğru olmama ihtimali yüksek.
Bu konuda @z nin çalışmaları olması lazım,
konularını ve blogunu araştırabilirsin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

MrDarK

Ne yapmak istediğini daha net anlatırsa farklı çözüm önerilerimiz olabilir. linker script file değiştirilerek farklı şeyler yapılabiliyor.

Picproje Eğitim Gönüllüleri ~ MrDarK

z

#6
Bir kaç yolu var. Scatterda iki bölge tanımlamayla uğraşmak istemiyorsan;

900Kb uzunluğundaki datalarını binary olarak diske kaydet.

STLink programını aç ve bu bin datayı oku.

Bu datanın boyunu zaten biliyorsun. Datalarının hafızaya yerleştigi adresi, STlinkde Address: kısmına yaz.
Size kısmına da dataların byte cinsinden uzunluğunu yaz.

Ardından programla.

Bundan sonraki proje gelistirme aşamasında artık projene dataları ekleme. Stlinkte dataları flasha yüklediğin adresi, yazdigin programin ilgili satırinda buffer adresi olarak belirtmen yeterli.

Çip erase yapmadıkça artık dataların flashda kalır sadece kod alanına ait flash sektörü silinir ve yazılır.
Bu yüzden datalarını flashın sonuna yazmanda fayda var.

Bana e^st de diyebilirsiniz.   www.cncdesigner.com

isoment01

Alıntı yapılan: z - 21 Mayıs 2020, 04:47:04Bir kaç yolu var. Scatterda iki bölge tanımlamayla uğraşmak istemiyorsan;

900Kb uzunluğundaki datalarını binary olarak diske kaydet.

STLink programını aç ve bu bin datayı oku.

Bu datanın boyunu zaten biliyorsun. Datalarının hafızaya yerleştigi adresi, STlinkde Address: kısmına yaz.
Size kısmına da dataların byte cinsinden uzunluğunu yaz.

Ardından programla.

Bundan sonraki proje gelistirme aşamasında artık projene dataları ekleme. Stlinkte dataları flasha yüklediğin adresi, yazdigin programin ilgili satırinda buffer adresi olarak belirtmen yeterli.

Çip erase yapmadıkça artık dataların flashda kalır sadece kod alanına ait flash sektörü silinir ve yazılır.
Bu yüzden datalarını flashın sonuna yazmanda fayda var.


hocam bende bir c programi yazdim  900kb lik diziyi  .bin file a yazdim. Ama .bin file 1.7 MB oldu geri kalan herşeyi sizin mantiginizla yapcam fakat benin max flash size 1MB olduğu için problem oldu.

z

900KB data nasil 1.7Mbyt oldu?

Datalarin baslangic adresinden itibaren 900 KByte data bin dosya olarak yazilirsa dosyanin boyu da 900KByte olur.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

isoment01


Alıntı yapılan: MrDarK - 21 Mayıs 2020, 00:45:06Ne yapmak istediğini daha net anlatırsa farklı çözüm önerilerimiz olabilir. linker script file değiştirilerek farklı şeyler yapılabiliyor.


Hocam sample.c adinda bir ses dosyam var icerisinde uint16_t tipinde büyük bir arrayim var. 900kb size ında. Şu anda ben her kod yükleme yaptığımda bu dosya çok vakit kaybettiriyor. Ben de bundan kurtulmak bu dosyayi işlemcinin flashına yazmak istiyorum.

isoment01

Alıntı yapılan: z - 21 Mayıs 2020, 10:01:35900KB data nasil 1.7Mbyt oldu?

Datalarin baslangic adresinden itibaren 900 KByte data bin dosya olarak yazilirsa dosyanin boyu da 900KByte olur.

FILE *write_ptr; write_ptr = fopen("test.bin","wb"); // w for write, b for binary fwrite(buffer,sizeof(buffer),1,write_ptr); // writes buffer
 
sadece bunu yaptim buffer da bnm dizin array di burda. PC ye gectigimde tam kodu paylasirim hocam.