C, C++, assembly - från kod till MCU:ns utförande
För att få en MCU att göra olika önskade saker, kan man programmera detta och översätta till binärt till mcu:n som utför koden. Man kan skriva kod i C, C++, Assembly eller många fler. Assembly är dock det allra närmaste till maskinkod och gör i princip det som egentligen sker i mcu:n senare. Hur ser dock denna process ut
Programmet laddas ju på flashminnet på mcu:n via exempelvis usb, sedan går programräknaren igenom flashminnet där programmet står och saker börjar hända. Hur vet den dock var och hur mycket den ska läsa i flashminnet eller går den igenom alla adresser i flashminnet
Den börjar på en förutbestämd adress (troligen 1) och fortsätter i sekvens tills den kommer till en 'jump' då den hoppar till angiven adress ofta beroende på aktuellt innehåll i något register och ofta villkorligt dvs bara om ett angivet villkor är uppfyllt, t.ex. att innehållet i ett register är större än noll. Sen fortsätter den med nästa instruktion o.s.v. tills den kommer till en 'stop' -instruktion.
I praktiken i en dator finns ett resident program, operativsystemet, som startar ditt program och tar över när det kommer till stop.
Mycket förenklat...
farfarMats skrev:Den börjar på en förutbestämd adress (troligen 1) och fortsätter i sekvens tills den kommer till en 'jump' då den hoppar till angiven adress ofta beroende på aktuellt innehåll i något register och ofta villkorligt dvs bara om ett angivet villkor är uppfyllt, t.ex. att innehållet i ett register är större än noll. Sen fortsätter den med nästa instruktion o.s.v. tills den kommer till en 'stop' -instruktion.
I praktiken i en dator finns ett resident program, operativsystemet, som startar ditt program och tar över när det kommer till stop.
Mycket förenklat...
Jag förstår, angående en mcu med RISC-V. Jag har denna mcu: RV32IMAC med 32 interna register där det bland annat finns temporära register (t0-t6), argument/return (a0-a1) och argument (a2-a7) - register.
Vad skulle hända eller vilka problem skulle man stöta på om man bara hade t-register, inga a-register? Jag kan C, så liknelser kan kopplas med programmeringsspråket
Det beror naturligtvis på vad man använder a-register till om man kan kompensera genom att använda andra register. Lustigt namn temporära register, alla register är väl temporära t.o.m. ännu mer temporära än minnet.
Om du kan använda t-register eller något av de andra 18 registren som adress och index i instruktioner så borde det gå bra. För användningen av a0 /a1 till att peka ut argumentlistan resp returadressen är väl bara en programmerarkonvention och inte inbyggt i hårdvaran?
Den enda RISC-maskin jag haft kontakt med på assemblernivå är CDC6600 på sena 60-talet ( jag vet begreppet RISCprocessor är yngre men den hade bara 64 maskininstruktioner, och det är väl Reduced Instruction Set CPU vi talar om?)