ST Link - Programlama aşamasında belli bir adrese yazma

Başlatan JKramer, 27 Ağustos 2016, 11:08:07

JKramer

Merhaba,

Başlık kötü oldu ama demek istediğim şu: Çalışma esnasında bazı bilgileri kaydetmek için flash'a yazıyorum, ilk açılışta da bunları okuyorum. Sormak istediğim, bunların varsayılan değerlerini program atarken tek hamlede yüklemek mümkün mü? Normalde ilgili adrese gidip o bölgeyi manual değiştirebiliyoruz St Link'te.

yldzelektronik

Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

JKramer

Dinliyorum, buyrun :). Hani Pic'te eeprom'a yazılacakları .hex'e gömüyoruz, #rom direktifiyle mi neydi. Daha sonra bu .hex'i Pickit'te açınca otomatik olarak eeprom bölümüne değerleri atınca tek hamlede programlamış oluyoruz, onun gibi.

Ek:
__attribute__((__section__(".user_data"))) volatile const uint32_t flashUserVal = 80;

Ben bunun her program açılışında normal bir değişken gibi olacağını zannettiğim için başka yollar aramıştım, neden böyle düşündüm bilmiyorum. Linker script'te gerekli yerleri ayarladıktan sonra sorun olmuyor. Sadece linker ayarlarında "-Wl,--gc-sections" varsa değişkeni uçuruyor; bunu engellemek için bir yerde kullanmak (başka bir değişkene atama yapma, vb.) yeterli. Ya da ufak bir asm satırı da eklenebilirmiş https://answers.launchpad.net/gcc-arm-embedded/+question/280104.

Neyse başka yollardan da bahsedeyim. İlki .hex dosyasında müdahale etmek. Hex dosyasının (Intel) karışık bir tarafı yokmuş, EOF satırından (:00000001FF) önce istediğiniz adresi ve yazmak istediğiniz değeri uygun şekilde ayarlayıp eklemek yeterli: http://www.keil.com/support/docs/1584/ adresinde format hakkında bilgi verilmiş. Checksum'ı online hesaplamak için: http://checksumcalc.live.conceptcontrols.com/ (CheckSum8 2s Complement )

Diğeri de doğrudan linker script'e yazmak:
.user_data :
    {
        . = ALIGN(4);
            LONG(0x000050)
            *(.user_data)
        . = ALIGN(4);
    } > USER

https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/4/html/Using_ld_the_GNU_Linker/sections.html

ST Link'te .hex dosyasını yüklediğinizde "Address ranges" ile programlanacak bölümleri yazıyor.