C ile Bootloder yazamak icin nereden baslanmali?

Başlatan ecunnu, 17 Temmuz 2016, 01:53:11

ecunnu

Merhaba arkadaslar msp430 serisi islemcilere c ile bootloder yazabilmek icin nereden baslamaliyim bir kaynak gosterebilirmisiniz acaba?

Erol YILMAZ

Öncelikle FLASH'a kolayca yazıp silebilmeli, CRC kontrolü yapabilmelisin.

Sonrasında çalışan koddan başka bir yere dallanabilmelisin, burada INTERRUPT vector'ü taşımak söz konusu oluyor. 
Mcu destekliyorsa çok şanslısın. Desteklemiyorsa da olmasına mani değil. Bu özellik Cortex M0 da yok M0+, M3 ve M4 de var.

Hangi haberleşme kanalını kullanacaksan bootloader ile pc? arasında sağlıklı bir iletişim kurmalısın.

Çalıştıracağın opcode ların olduğu BIN dosyayı pc'den gönderebilmelisin.

Tabi bunları yaparken bir çok ayrıntı çıkacak. Ama genel mantığı anladıysan ve mcu yu kullanıyorsan problem olmaz.

ecunnu

Allegro hocam oncelikle degerli bilgileriniz icin tesekkurler.
Flash hafızayı okuma ve yazma icin kullanabiliyorum.

PC ile islemci arasindaki iletisimi FT4222 entegresinin USB to SPI ozelligini kullanarak gercekliyorum bu entegre hem master hemde slave olarak yuksek hızlarda calisabilmekte yani iletisimim SPI uzerinden olacak.

Dallanma konusunda fonksiyon pointer larını kullanmak istiyorum benim takildigim noktada burası. Bootloder programinin bittigi adresi nasıl bilecegim yada dallanacagim fonksiyonun adresinin c ile degistirmem mumkunmu. Orenegin bir fonksiyon yazip 0x1000 adresten baslamasını saglayabilirmiyim.

yldzelektronik

@ecunnu

Bootloaderin bitiş adresini default bir adres yaparsan rahat bir şekilde bilirsin.Yani atıyorum senin programın 2kbyte ise 0x00 adresinden itibaren 2kb bootloaderin olduğunu bilirsin.

Ama dinamik yapmak istersen de flash içinde belli karakterleri arka arkaya koyarsan da çözebilirsin sanırım.

Örneğin 10bytelık bir tanımlayıcı karakter dizisi koyarsan sorunu muhtemel çözersin.Ancak zaten bootloaderin dinamik olması çok da gerekli imiş gibi gelmiyor.Zaten main programa bootloader bittiği adresten zıplanacağından, sıkıntı var gibi gözükmüyor.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

mufitsozen

Alıntı yapılan: ecunnu - 17 Temmuz 2016, 02:55:33
Dallanma konusunda fonksiyon pointer larını kullanmak istiyorum benim takildigim noktada burası. Bootloder programinin bittigi adresi nasıl bilecegim yada dallanacagim fonksiyonun adresinin c ile degistirmem mumkunmu. Orenegin bir fonksiyon yazip 0x1000 adresten baslamasını saglayabilirmiyim.

@gerbay'in daha once birkac kere forumda yaptigi aciklamalar var DLL kullanimi ile ilgili. Sizin yapmaniz gereken kabaca bir jmp/call table kullanip indirect baglanti kurmak. Bunu bir kac degisik sekilde yapabilirsiniz.

@gerbay bunu okursa yinemi diyecek ve dayanamayip bir kere daha konuyu anlatacaktir umuyorum.
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

Alıntı yapılan: gerbay - 17 Temmuz 2016, 16:35:23
Abi tatildeyim bilgisayarım yok. Hiç üşenmeden anlatırım yoksa, yeterki ciddi ciddi o bilgiyi kullanmak isteyen birileri olsun.

Sen gelene kadar ben picproje'de buldugum mesaji koyayim, isteyen bakar. DSO Quad kaynak kodu bu konuda cok guzel bir ornek olur demistin, oradan aklima geldi, mesaji aradim buldum.

"Ynt: Tutsak yazilim felsefesi - Cipe Uzaktan kod yuklemek basliginda imis."

https://www.picproje.org/index.php/topic,52838.msg400727.html#msg400727
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

ecunnu

@yldzelektronik
Yorumunuz icin tesekkurler bunu deneyecegim ama once bootloder programımı bitirmem gerekiyor.
@mufitsozen
Konuyu inceledim fakat daha DSO Quad kaynak kodunu inceleme fırsatim olmadi. Konuda guzel bilgiler mevcut ama ben bu asamada sifreleme isine girmeyi dusunmuyorum.
@gerbay Hocam musait oldugunuzda degerli bilgilerinizi bizle paylasırsanız cok mutlu oluruz.

Saygılar,