Byte-ordning bakvänd i MPLAB

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Byte-ordning bakvänd i MPLAB

Inlägg av Chribbe76 »

Är det fler än jag som tycker att Microchips(MPLAB) sätt att skriva byte-ordning på variabler är bakvänt.

Ett exempel:

Byte Order HIGH:LOW
Fösta adressen innehåller värdet 3
Andra adressen innehåller värdet 1
16-bitars variabeln innehåller värdet 259


Jag tycker det logiska är att resultatet blir 769

Vad tycker ni?
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Var/hur i MPLAB ser du detta ?
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

I ett Watch-fönster kan man välja hur variabler ska visas.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Hög adress = höga värdet, låg adress = låga värdet, på vilket vis är det ologisk?

Det har med Little/Big Endian att göra och har nära nog alltid varit en tvistefråga mellan (org) Motorola och Intel.

Motorola kör Big Endian, alltså höga värden byten på lägsta minnesadress och Intel kör Little Endian.

Jag tycker att Big Endian är ologisk och skillnaden kan ställa till det när man portar kod (t.ex. C-program) som plockar ut delar av ett större värde.

Sen började jag också med Z80 med Little Endian....
Användarvisningsbild
Chribbe76
EF Sponsor
Inlägg: 1167
Blev medlem: 17 januari 2004, 22:43:17
Ort: Stockholm

Inlägg av Chribbe76 »

Jag ifrågasätter inte vilken ordning som är logisk att använda, i MPLAB kan man välja själv.
Det är sättet dom beskriver ordningen på som är ologisk, titta på mitt exempel igen.

[EDIT] Jag tycker att HIGH:LOW borde betyda Höga byten först och låga byten sen men detta sätt att beskriva det på är kanske standard.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Det intressanta är om det avviker från hur det fungerar i PIC'en för övrigt.
Ta t.ex TMR1H:TMR1L i en PIC18.

Där är den första adressen (den lägre, h'FD6') TMR1L
och den andra (den högre, h'FD7') TMR1H.

Dock skrivs det som 'högre_adress:lägre_adress', alltså 'TMR1H:TMR1L'.

Så sättet som MPLAB benämner det stämmer överens med det sätt
som är standard i datablad och i arkitekturern för övrigt.
Användarvisningsbild
Icecap
Inlägg: 26650
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Man anger ofta sammansatta värden med ett ':' som delning och det betyder inte att adressen ligger så men att det totala värdet styckas ihop på det vis.

Alltså Totala värdet = 'Högsta byte:Lägsta Byte'.

Att tillverkarna också försöker att göra samma sak i praktiken vid att placera adressorna så att det passar med den valda Endian är ju bara bra, det kan iaf. lösa en del buggar som kommer av obetänksamhet.
Användarvisningsbild
Henrik
Inlägg: 661
Blev medlem: 26 maj 2003, 23:39:14
Ort: Göteborg
Kontakt:

Inlägg av Henrik »

För att inte tala om B. Knudsens varianter med flyttal. För att kunna visa dessa i mplab måste man anpassa floaten i en funktion/makro, och sedan anpassa tillbaks den...
Skriv svar