Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

Bootloader voor ARM7 controller

Pagina: 1
Acties:

  • kippy
  • Registratie: September 2004
  • Laatst online: 16:39
Ik ben bezig met het porten van een boorloader voor een arm7 controller van de de Keil IDE naar de IAR ide. De loader is geport is de tussen tijd, en kan hem netjes in de controller flashen. Wanneer ik nieuw hex code via de bootloader in de controller laad wordt deze ook in het geheugen geschreven. Maar nu kwam ik er achter dat de hex code gemixt er in komt te staan, en vraag me af hoe de hex code er exact in moet staan.

als ik een hex file heb. bijvoorbeeld de volgende regel:
100010E3FBFF

Lijkt het me logisch dat op een volgend in de 16 bit adressen van de controller de data als volgt geschreven word.

adr1 = 1000
adr2 = 10E3
adr3 = FBFF

Maar wanneer ik het geheugen ga uit lezen staat de code er op de volgende manier:

adr1 = 0010
adr2 = E310
adr3 = FFFB

Als ik naar de code kijk van de bootloader klopt het ook dat de code er op manier 2 in het geheugen staat. Ik vraag me alleen af, hoort dit.


Samengevat:
Als ik de orginele hex file van de bootloader pak en deze in de controller flash. En nieuwe software via de bootloader er in flash draait de nieuwe software goed. Maar als ik de geporte verzie van de bootloader pak werkt het dus niet.
Kan dat liggen aan hoe de software in het geheugen zit?

  • 3V3RT
  • Registratie: Januari 2004
  • Laatst online: 16-08 22:30
heeft dit niet te maken met of je target little of big endian is?

  • Sprite_tm
  • Registratie: September 2002
  • Laatst online: 29-10 06:07

Sprite_tm

Semi-Chinees

Ik denk dat je ergens een little<->bigendian-probleem hebt. Je 16 bits worden met de ene compiler MSB-first naar het geheugen geschreven en met de andere LSB-first.

Relaxen und watchen das blinkenlichten. | Laatste project: Ikea Frekvens oog


  • Thralas
  • Registratie: December 2002
  • Laatst online: 00:23
3V3RT schreef op donderdag 16 april 2009 @ 11:09:
heeft dit niet te maken met of je target little of big endian is?
Lijkt erop, zeker icm.
one of the things to consider when porting code from IAR EW8051 to the Keil C compiler is that they have different endianness (little endian vs big endian, respectively).

  • kippy
  • Registratie: September 2004
  • Laatst online: 16:39
Hummm, daar heb ik nog helemaal niet bij stil gestaan.

Wat ik wel vreemd vind is dat de controller die ik gebruik (ADuC7026) alleen met little endian werkt. En als ik ga kijken naar de settings in zowel Keil als IAR staan ze beide op little endian.


edit
Had nog nooit van big en little endian's gehoord maar ik snap nu het princiepen er van. Maar dat was niet de reden dat de bootloader niet werkte. Het probleem zat hem in variabelen die in interrupts werden geschreven en in de main loop gelezen. Deze variabelen stonden niet als volatile geinitializeerd. En daardoor resette de loader nooit.

Maar het werkt nu en ik ben blij en nog bedankt voor het endian probleem. *O* *O* *O*

[ Voor 46% gewijzigd door kippy op 16-04-2009 17:06 ]