sodjan skrev:
Och det är mer linjärt än t.ex AVR (d.v.s ingen uppdelning mellan
"register" och "RAM"). Allt är samma sak och hanteras på samma sätt.
Hela minnet kan hanteras som "register" och med alla instruktioner.
Att kalla en processor med dedikerad registerfil (och arbetsminne) för "inte linjär" är i mitt tycke helt felaktigt. Linjärt minne ("flat memory model") innebär att allt _minne_ kan addresseras direkt och linjärt utan nån form av segmentering (banking) eller paging.
Därmed skulle jag säga att en hel del PIC18 (jag tittade på databladet för 18F8722) _inte_ har linjär addressering, då du fortfarande har banker och de fyra högsta bitarna i addressen för de flesta instruktioner hämtas från BSR (Bank Select Register). Det finns ett undantag då MOVFF instruktionen specificerar hela 12-bitars addressen och därmed inte behöver bankselekteras. Att sen register och "RAM" är ekvivalent kan ju ses som att du bara har register och inget internt RAM, men det är ju eg egalt. Det som skulle tala emot det är att många instruktioner på PIC(18) har W-registret som underförståd operand (dvs alla instruktioner kan inte hantera hela minnet), så man skulle också kunna säga att du har ett register och sen bankselekterat RAM.
AVR å andra sidan följer RISC-traditionen (AVR bygger på ARM som är väldigt RISC-ig) med en relativt stor registerfil, ett helt linjärt RAM (16 bitars addresser) och en åtskillnad mellan "vanliga" instruktioner som opererar på registerfilen och minnesinstruktioner (load/store) som accessar hela RAM:et.
Vilket som är "bäst" är väll en fråga om tycke och smak, men det man kan konstatera iaf är att PICens sätt att göra det inte fungerar när man börjar få mer RAM, och i lite större MCU:er och CPU:er är arkitekturen med separat registerfil och RAM samt (ofta) dedikerade load/store-instruktioner totalt regerande.