Det finns en massa luft i segmenten för SFR - kan man använda dessa adresser för sina GPR?
Antagligen inte, trots att de står oanvända, men värt dubbelkolla ändå....
Och, som sagt, lite tillägg i inlägget på förra sidan.
Angående macron... En skip före ett macro fungerar inte som det ser ur. Tänk på den expanderade koden, skippen kommer att köra hela macrot utom första instruktionen.
Det finns en massa luft i segmenten för SFR - kan man använda dessa adresser för sina GPR?
Antagligen inte, trots att de står oanvända, men värt dubbelkolla ändå....
Och, som sagt, lite tillägg i inlägget på förra sidan.
Nej, det är helt o-implementerat och försöker du läsa dessa adresser, så får du antingen 0xFF eller 0x00, det existerar helt enkelt inget kisel på dessa adresser.
Resultatet, dvs 0x00 eller 0xFF, står med största sannolikhet i databladet, samma gäller o-implementerade bitar i SFR.
Normalt har vi:
BANKSEL TRISIO
BSF TRISIO, TRISIO5
Där "BANKSEL" är b'00001', tror jag...
...dvs:
MOVLW 0x01
MOVWF BSR
Allt detta ger BSR + OPCODE:
00001 - BSR
0101 - BSF
101 - TRISIO5
(00001)0001100 - TRISIO
Vad händer om jag helt sonika skriver BSR + OPCODE...
0000101011010001100b
...eller...
0568Ch
...som en programrad?
Eller ska den skrivas annorlunda?
Hur ser det ut om man nyttjar FSR?
(Ja, jag blir mer och mer irriterad på detta att vi tvingas snubbla runt i en labyrint av saker att hålla koll på - saker som redan är exakt, rakt och, framförallt, enkelt både definierade, namngivna, tillgängliga och adresserade.)
Ärligt talat Erik, vad jiddrar du om? Vad vill du veta? Vad vill du uppnå?
(Ja, jag blir mer och mer irriterad på detta att vi tvingas snubbla runt i en labyrint av saker att hålla koll på - saker som redan är exakt, rakt och, framförallt, enkelt både definierade, namngivna, tillgängliga och adresserade.)
Livet är sådant, massor av saker att hålla reda på. Eller så får man nöja sig med att konsumera smartfånappar.
Att PIC inte håller reda på var registren är på egen hand.
När du skriver en instruktion måste du tala om i vilken bank du tror registret återfinns.
Detta trots att den slutliga raden innehåller den informationen på egen hand...
...under förutsättning att du inte har skrivit fel eller missar var du står i för bank och skriver att du står i banken bredvid.
De färdiga varianterna på koden följer detta mönster:
BSR + OPCODE + ALT + REGISTER (-BSR)
Från exemplet ovan:
BSR [00001] OPCODE [0101] BIT [101] REGISTER [000010001100]
Om registret fick behålla hela sin adress skulle vi slippa hålla på med banker etc.
Hela adressen måste ju ändå vara med, annars vet inte koden var den är.
Nej, det vet den inte. Den måste gå å kolla vart den är precis hela tiden, eftersom den inte får med sig vilken bank den ska agera i... Medans den information finns mitt framför näsan på den...
Och ett register vet inget annat än i vilken bank och i vilket fack det befinner sig.
Dvs det finns inget som håller reda på i vilket fack i vilken bank ett register finns.
Utan det finns i en bank och i ett fack.
Problemet uppstår inte riktigt ordentligt förrän BSR blir större än en bit.
Det är irriterande redan då, men inte oöverstigligt. Dvs det är enkelt hålla reda på rätt bank.
Det blir värre när man har 32 banker, BSR på fem bitar, och än värre då det är gott om luft i den och ingen direkt logik att följa.
Det finns ju en smula logik i att GPIO och TRISIO ligger å samma rad i sina respektive banker. Inte mycket, men visst. Dessvärre hjälper detta inte något speciellt.
Nå, tillbaka till ovan...
Istället för...
BSR [00001] OPCODE [0101] BIT [101] REGISTER [000010001100]
...dvs...
Så kunde det se ut såhär...
BSF TRISIO5
...för all information finns redan.
För vad det står på den raden - egentligen - är...
OPCODE REGISTER BIT
Det står inte...
BSR (från MSB av REGISTER) OPCODE BIT REGISTER (utan MSB för BSR)
...men det är så strukturen MicroChip ser ut och som vi tvingas anpassa vår tid och energi till.
Informationen om bank får inte plats i instuktionen.
Därför behövs bank på pic för att hålla reda på detta.
Det finns andra Picfamiljer som detta är fixat på, alternativt andra processorfamiljer som inte heller dras med
detta.... de har naturligtvis andra egenheter.
Icecap kommer som vanligt med konstruktiva förslag. Själv är jag betydligt sämre.
Men det finns ju massor av olika processorarkitekturer och Icecap gillar (har jag för mig) Renesas.
Själv föredrar jag ARM Cortex-Mx som finns från nästan gratis till betydligt häftigare än ur-PCn. Och fortfarande billiga.
Edit: Därmed inte sagt att du skulle trivas bättre med något annat än PIC.
Edit 2: Du kanske skulle programmera i C?
Det handlar naturligtvis om att inte grotta ned sig, utan acceptera att saker är som de är, och leva med det.
Finns överhuvudtaget ingen anledning att fundera på varför man gör si eller så.