1 / 34

Mikroprotsessorid AVR loeng 2

Mikroprotsessorid AVR loeng 2. Artur Abels. Praksi tulemused . Ärge unustage AVRButterfly ’ dele paber patarei vahele  Binary – liitmine 8 biti ja carry 200 + 100 Binary – lahutamine 8 biti 50-100 Binary ja Hexadecimal suhe.

Télécharger la présentation

Mikroprotsessorid AVR loeng 2

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Mikroprotsessorid AVR loeng 2 Artur Abels

  2. Praksitulemused • Ärge unustage AVRButterfly’dele paber patarei vahele  • Binary – liitmine 8 bitija carry 200 + 100 • Binary – lahutamine 8 biti 50-100 • Binary ja Hexadecimal suhe. • Binary – 16 bitise väärtuse hoidmine 8 bitilistes registrites. • Binary – liitmine 16 biti, jaotus high baidiksja low baidiks • LED’I vilgutamine == jalaseisumuutmine

  3. RAM • AVR mikrokontrollerites on olemas RAM andmete hoidmiseks. ATMega169’s on 1kB operatiivmälu. • RAMi lugemiseks on olemas instruktsioonid LD (load indirect), LDD(loadindirectwithdisplacement) ja LDS(loaddirectfrom SRAM) ja kirjutamiseks ST, STD ja STS (samad aga load asemel store)

  4. Memorymap • LDS Register, Aadress • STS Aadress, Register

  5. Muutujad mälus C kood ASM kood mälu sisu Mis juhtub siis kui me defineerime 16bitise muutuja peale muutuja f defineerimist ? Ntx uint16_t g;

  6. Muutujad mälus

  7. Muutujad mälus • Me nägime kuidas saab kirjutada ja lugeda RAMi kui koht kuhu kirjutada on teada kompileerimise ajal. See väga erineb mälu kasutusest kui aadressi saadakse teada käivitusajal (näiteks massiiv)

  8. Pointer • Pointer on sisuliselt muutuja mille väärtuseks on aadress, ja mida kasutatakse antud mälukohale pöördumiseks. • AVR arhitektuur on 8bittine. Kuna mälu on suurem kui 256 baiti siis adresseerimiseks tuleb kasutada 2 8bittist registrit. • AVR arhitektuuris on 3 registripaari mida saab kasutada pointeriks X(r27:r26), Y(r29:r28), Z(r31:r30)

  9. Pointer • Oletame et muutuja asub mälus aadressil 0x100 • Selline kood alguses kirjutab registrisse X meie tahetud muutuja aadressi väärtus 0x100 (ehk kõrgema baidi kirjutab r27 sisse ja madalama kirjutab r26 sisse), ja siis salvestab mällu sellele aadressile registri r16 väärtus, ehk 25. Antud juhul registripaar X on POINTER muutujale.

  10. Pointer • Kui meil on kompileerimise ajal teada et meie tahetud muutuja asub mingil kindlal aadressil (ntx. 0x100 nagu näites) siis selline mälule pöördumismeetod ei ole parem kui LDS instruktsiooni abil. • AGA pointeri kasutus lubab realiseerida selliseid programme kus mälukoha aadress selgub programmi jooksutamise käigus. Ilma pointeriteta on võimatu teha massiive, ja palju muud.

  11. Pointer, Massiiv • Olgu meil RAMis massiiv, ja me tahame kirjutada elementi indeksiga k väärtus a (olgu k registrite paaris r17:r16 ja a r18 sees)

  12. Pointer, Massiiv • Kui me tahame teha massiivi ja initsialiseerida seda niimodi • Siis see näeks AVR assembleris nii:

  13. Pointer, Massiiv

  14. Massiivi kopeerimine • Keegi õnnetu kirjutab tahvli peal.

  15. Massiivi kopeerimine

  16. Küsimused!!! • Minimaalselt n+1 tükki.

  17. Siis küsin mina! • Kuidas käia massiiv tagant ette läbi ? • Kuidas kopeerida massiivi “array1” massiivi “array2” sisse nii et elemendid oleks tagurpidi ?

  18. Stack, Stack Pointer • On olemas RAM, spetsiaalne 16bitine register “Stack Pointer” (SP) ja instruktsioonid PUSH Rd ja POP Rd • PUSH Rd salvestab registri Rd sisu RAMi kohta mille aadress on SPs, ja vähendab SP ühe võrra • POP Rd loeb registrisse Rd väärtus RAMi kohast mille aadres on SPs. • See RAMi piirkond kuhu PUSH ja POP instruktsioonide abil ladustatakse väärtused kutsutakse STACK

  19. Stack, SP • Väärtused mis olid pandud STACKi võetakse välja vastupidises järjekorras. • SP TULEB ENNE STACKI KASUTAMIST INITSIALISEERIDA !!!!!! Tavaliselt tehakse nii et programmi alguses SP viitab RAMi viimasele baidile (ATmega169 puhul SP siis peaks initsialiseerima 0x4FF’ks), ja RAMi alguses on muutujad ja igasugused andmed.

  20. Stackoverflow • Mis juhtub kui meil aadressil 0x100 on muutuja, SP=0x105, ja me 6 korda teeme PUSH ? • Mis juhtub kui meil aadressil 0x100 on muutuja, SP=0x4FF ja me 1024 korda teeme PUSH ? • Stack pole lõpmatu, sinna ei saa lõpmata palju baite panna! IGALE PUSHile PEAB VASTAMA ALATI ÜKS POP!!

  21. StackUnderflow • Mis juhtub siis kui SP=0x4FF ja me 2 korda teeme POP ?

  22. Küsimusi! • Miljon tükki palun!

  23. Siis küsin mina • Mida teeks selline programm  PUSH R16 POP R17 ? • Simuleerime stacki tahvli peal

  24. Milleks on stacki vaja ? • Protseduuri kutsed. • Me juba teame mida teeb instruktsioon RJMP. (mida see teeb?) • Sellega aga pole lihtne võimalik teha protseduure – me teame kuhu hüpata protseduuri käivitamiseks aga ei tea kuhu peame tagasi hüpama protseduurist väljudes.

  25. Protseduurid Kui me tahame teha sellise programmi:

  26. Protseduurid Kuidas me prooviks seda teha RJMP instruktsiooni abil ? AGA SEE EI TÖÖTA, sest me ei tea kuhu tagasi hüpata.

  27. CALL(RCALL) ja RET instruktsioonid • CALL instruktsioon teeb sama mida RJMP, aga enne hüpet SALVESTAB stacki peale aadressi kuhu tuleks hüpata protseduurist väljudes. Nn ReturnAddress. • RET instruktsioon võtab stackist tagasipöördumise aadressi mida sinna salvestas CALL, ja hüpab selle aadressi peale.

  28. Protseduurid

  29. Küsi musi :) Miljon plz!

  30. Siis küsin mina • Mitu baiti kirjutab stacki iga protseduuri kutse? • Mis juhtub stackiga kui protseduurits väljutakse? • Mis juhtub siis kui protseduurist kutsutakse teine protseduur ? • Mis juhtub siis kui protseduurist kutsutakse see sama protseduur ?

  31. Protseduurid

  32. Mida teha ? • Protseduuri sees SALVESTAME kõik kasutatavad registrid STACKI, ja enne väljumist taastame.

  33. Protseduuride parameetrid

  34. Parameetrid

More Related