Quadroped Robot - (NIOSII församlingen) (7 / 13 steg)
Steg 7: Coding - motoriska funktioner
Först av allt, skapa en ny synliga filen för din motor funktioner. Vi kommer referera till dessa funktioner i vår senare kod, så det är skönt att sätta dem på ett ställe. -Kom ihåg att församlingen indatavärden funktioner skickas i r4, r5, r6, r7, och sedan på stacken. Vi kommer att förutsatt att motorisk kontroll adress skickas in med r4.För att spara utrymme, hänvisa jag bara till alla poppar och driver från stacken med #pop & #push respektive. För att klargöra för den nya församlingen, avser popping och trycka spara registeruppgifter till minne så att register som kan användas för något annat, och att sätta värdena tillbaka när att något annat är gjort :)
.global motors_forward # REMEMBER THE .global! Om du inte, undrar du varför du inte kan använda dina funktioner.
motors_forward:
#push
Movia r9, 0x004000008
stwio r9,0(r4)
#pop
ret
.global motors_forward
motors_reverse:
#push
Movia r9, 0x00400000a
stwio r9,0(r4)
#pop
ret
.global motors_forward
motors_stop:
#push
Movia r9, 0x004000ff
stwio r9,0(r4)
#pop
ret
.global motors_forward
motors_turn_left:
#push
Movia r9, 0x0040000b
stwio r9,0(r4)
#pop
ret
.global motors_forward
motors_turn_right:
#push
Movia r9, 0x0040000c
stwio r9,0(r4)
#pop
ret
Nu, någon som vet dessa motorer inuti och ut kommer att nämna nu när vi bara använder ett ben som när vrida, och att detta är ineffektiva. Jag håller, och ursprungligen hade vi båda benen bistå i roterande. Tyvärr våra ben drabbats av bristande styvhet och på hög friktion ytbehandlar (klassiskt bra för promenader robotar), Hecaton slet nästan sig isär. Så, vi fast med en dubbelhäftande tur. Känn dig fri att ändra detta, eller lägga till detta som du tycker passar.
För enkelhetens skull har jag inkluderat den motors.s filen vi skrev för vår robot nedan: