[elektro] dsPIC33 bootloader
Pipi
lista at puzsar.hu
Tue Sep 28 12:20:03 CEST 2010
2010.09.28. 12:03 keltezéssel, Balla Zoltán írta:
> Feladó: "Moczik Gabor"<pm_levlista at progzmaster.hu>
>> NEM feladata a változók relokálása, ezt a linkernek kell megtennie, hisz
>> fordítás időben kell eldőlnie. Ha nincs gyári crt0, akkor állítom, hogy
>> ha az ORG 0 címre bepattintasz egy JMP _main utasítást, akkor el kell
>> induljon. Ott kézzel minden változót inicializálni kell (nullára is).
>> A main soha ne térjen vissza, JMP-vel ugorjon a bootolandó programra.
>>
> Igen, ebben van valami...., hogy a változókat stb még fordítási időben kell relokálizálni, mégis
> amikor pl kiveszem a linkerben a crt0-t, akkor már el is rontja a változók címét! És ez tuti így
> van, direk néztem, mert meg is szívatott egyszer rendesen, miközben reszeltem a dolgot. Azt nem
> tudom miért van így, de tény hogy ezt műveli a microchip C30...
>
>> Nem lehet olyan nagy etwas ezt kisebb PIC-en megoldani, a PIC32 crt0-ja
>> is csak inicializálást csinál. Csak azért van ilyen nagy arcom, mert
>> annak idején Watcom C++ -ban bootolható objektum-orientált oprendszert
>> kezdtem írni. Nem igazán vannak ezek a dolgok dokumentálva, na abból
>> kihagyni a gyári crt0 rutint, majd megírni ami ahhoz kell, hogy
>> egyáltalán a konstruktorok helyes sorrendben lefussanak... Pár sor lib
>> forráskódot át kellett nyálazni. Végül be lehetett bootolni, de már el
>> sem hiszem, hogy ezt tényleg megcsináltam. :-)
>>
> Mivel kihagyott crt0 esetén elrontja a címeket, nem csoda, hogy hiába ugrik a 0-ról a megfelelő
> címre, és azon a címen már tényleg az én boot loaderem is van, mégsem fog jól működni a program
> emiatt!!
>
>>
>> Tuti hogy nem jó helyen van a vezérlés. A 0 az NOP, végigfut rajta, és
>> elindul a cuccod a terület végén, ha más van benne, akkor meg elakad.
>>
> De, jó helyen van!!! Ez nem kérdés, látom a fordított memóriáben a sz ugró címet, és hogy ott mi van
> ahová ugrik, na meg a szimulátrban is eszerint megy...de egyszer csak elszáll a program, nyílván,
> hiszen ilyenkor átfedett változó címek vannak...(kihagyott crt0-nál)
>
>> Milyen fordító?
>> Nem lehetne memory map-et kérni?
>> Akkor látni lehetne mir hova méltóztatott relokálni, utána az asmlist
>> tanulmányozásával kideríteni, hogy miként is hívódnak meg a dolgok.
>>
> Pontosan azt teszem....A fordító által látrehozott programkódot, memória térképet használom csak
> deugolásra, vagyis szimulálásra inkább, mert csak arra van lehetőségem igazából...
>
>> Némi kódrészletet, vagy az egészet is mellékelhetnéd (ha nem titkos).
>>
> Az egészet azt nem tehetem közre, de kódrészeket igen...csak nem tudom,mi az ami egyeltalán segítene
> akárcsak elgondolkodni a problémán....
Szia!
nem tudom elképzelni hogy azonos C programban lehet a bootloader, a progival.
ha megváltoztatod egyiküket, a változók szerintem szétcsúsznak/felülírják egymást.
ha ugye külön progiban van külön-külön meg tudod mondani hová forduljon, mely területeket használhatja kizárólagosan...
--
Pipi
http://www.puzsar.hu
More information about the Elektro
mailing list