1 / 42

Εισαγωγή στο AT91

Εισαγωγή στο AT91. Νίκος Πετρέλλης, ΠΔ407/80. Αρχιτεκτονική του ARM926EJ-S. Αρχιτεκτονική του ARM9EJ-S. Ιδιαίτερα χαρακτηριστικά του ARM9EJ-S. RISC επεξεργαστής ARM/Thumb σύνολο εντολών Πολλαπλασιαστής βελτιωμένης αρχιτεκτονικής Jazelle: Εκτέλεση Java bytecodes.

Download Presentation

Εισαγωγή στο AT91

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. Εισαγωγή στο AT91 Νίκος Πετρέλλης, ΠΔ407/80

  2. Αρχιτεκτονική του ARM926EJ-S

  3. Αρχιτεκτονική του ARM9EJ-S

  4. Ιδιαίτερα χαρακτηριστικά του ARM9EJ-S • RISC επεξεργαστής • ARM/Thumb σύνολο εντολών • Πολλαπλασιαστής βελτιωμένης αρχιτεκτονικής • Jazelle: Εκτέλεση Java bytecodes

  5. Καταστάσεις Λειτουργίας • User – Εκτέλεση προγραμμάτων • FIQ – μετά από Fast Interrupt • IRQ – μετά από Interrupt • Supervisor – Αυξημένα Δικαιώματα • Abort – Λάθος προσπέλαση μνήμης • Undefined – Εκτέλεση άγνωστης εντολής • System – Αυξημένα δικαιώματα

  6. Καταχωρητές

  7. Καταχωρητής Κατάστασης

  8. Σωρός • R13 – Stack pointer • Μειώνεται κατά 4 κατά την πρόσθεση μιας λέξης 32-bit • Αυξάνεται κατά 4 κατά την απομάκρυνση μιας λέξης 32-bit

  9. Κατηγορίες Εντολών • Μεταφορά δεδομένων • Αριθμητικές πράξεις • Λογικές πράξεις • Διακλαδώσεις • Συστήματος

  10. CS/HS CC/LO EQ NE VS VC MI PL GE GT HI LE LT LS Εκτέλεση εντολής υπό συνθήκη

  11. Ολίσθηση αριστερά κατά 3 θέσεις Χάνονται 0 Κρατούμενο

  12. Carry Κυκλική Ολίσθηση δεξιά (περιστροφή)

  13. Εντολές Ολίσθησης • Logic Shift Left (LSL) • Logic Shift Right (LSR) • Arithmetic Shift Right (ASR) – συμπλήρωση με ψηφία ίδια με το πρόσημο • Rotate Right (ROR)

  14. Εντολές Ολίσθησης • Αριστερή ολίσθηση κατά ν θέσεις= πολλαπλασιασμός με 2ν • Αν χάνονται ψηφία: αριθμός*2ν%232 • Δεξιά ολίσθηση κατά ν θέσεις = διαίρεση με 2ν • Αριστερή ολίσθηση κατά 1=ADCS Rx,Rx,Rx

  15. LDR: RM STR: RM MOV: RR MVN: RNOT(R) SWP: RM LDM: regsmem block STM: regsmem block MRS: CPSRR MSR: CPSRR MRC: CopR MCR: CopR Εντολές Μεταφοράς

  16. Εντολές Μεταφοράς Δεδομένων • Σύνταξη: <εντολή> Rd,[Rb,<offset>] • Το <offset> μπορεί να είναι καταχωρητής ή 8-bit τιμή με ολίσθηση 0 έως 31 ψηφίων • Η παραπάνω σύνταξη βοηθάει στην διαχείριση πινάκων: • Rb είναι η αρχή του πίνακα • <Offset> δείχνει στην τρέχουσα θέση του πίνακα • Προσοχή στο μέγεθος των περιεχομένων κάθε θέσης π.χ,: • Αν είναι 1 byte αύξηση της διεύθυνσης κατά 1 • Αν είναι word (4 bytes) αύξηση της διεύθυνσης κατά 4 • Οι θέσεις πρέπει να είναι στοιχισμένες σε διευθύνσεις που είναι πολλαπλάσια του 1 ή 4 αντίστοιχα (byte, halfword ή word alignment)

  17. Αποθήκευση αριθμού μεγαλύτερου του ενός byte • Little Endian: Το λιγότερο σημαντικό ψηφίο αποθηκεύεται στην χαμηλότερη διεύθυνση • Big Endian: Το περισσότερο σημαντικό ψηφίο αποθηκεύεται στην χαμηλότερη διεύθυνση • Στον ΑΤ91 επιτρέπονται και οι δύο τρόποι αλλά το Linux υιοθετεί Little Endian και αυτή την σύμβαση θα πρέπει να ακολουθούν όλα τα προγράμματα

  18. Προσπέλαση διαδοχικών θέσεων πινάκων με τροποποίηση καταχωρητή βάσης • Τροποποίηση πριν την προσπέλαση • LDR R5,[R0,R2, LSL #2]! • Γίνεται προσπέλαση στην διεύθυνση R0+(R2<<2) και μετά ο R0 γίνεται R0+(R2<<2) • Τροποποίηση μετά την προσπέλαση • LRD R5,[R0],R2,LSL #2 • Γινεται προσπέλαση στην διεύθυνση R0 και μετά ο R0 γίνεται R0+(R2<<2)

  19. Παραδείγματα εντολών φόρτωσης/αποθήκευσης • LDR R0,[R1] • LDR R0,[R1,R5] • LDR R0,[R1,#10] • LDR R0,[R1,R5,LSL #2] • LDR R0,[R1,R5,LSL #4]! • LDR R0,[R1],#12 • STR R0,[R1] • STR R0,[R1,#20]

  20. Εντολές μεταφοράς μπλοκ • Σύνταξη: <εντολή><mode> Rb,{<regs>} • Μεταφέρουν πολλαπλές τιμές από/προς μνήμη προς/από σύνολο καταχωρητών που δηλώνονται μέσα σε άγκιστρα χωρισμένοι με , ή με παύλα • Mode: • Increment Before (IB) • Increment After (IA) • Decrement Before (DB) • Decrement After (DA)

  21. Παραδείγματα • LDMIB R1,{R0,R2-R5} • LDMDA R1,{R0,R2-R5} • LDMDA R1!,{R1,R2-R5} • Μετά την τελευταία μεταφορά ο R1 θα αποθηκεύσει την τελευταία διεύθυνση που προσπέλασε • STMIA R1,{R0,R2-R5} • STMDB R1,{R0,R2-R5} • Χρήση για αποθήκευση περιβάλλοντος • STMDA ακολουθούμενη από LDMIB • STMIA ακολουθούμενη από LDMDB

  22. Μεταφορά καταχωρητή σε καταχωρητή • Σύνταξη: MOV Rd,<operand> • <operand>: καταχωρητής ή τιμή 8-bit με ολίσθηση • Δεν είναι δυνατή η άμεση φόρτωση καταχωρητή με οποιαδήποτε τιμή • Μεταφορές ειδικού τύπου όπως στο συνεπεξεργαστήή από τον CPSR

  23. Παραδείγματα • MOV R1,R2 • MOV R1,R2,LSL #5 • MOVS R1,R2,LSL #5 • MOV R1,#0x35 • MVN R1,#0x35

  24. ADC AND CLZ CMP ORR RSC SUB TST MUL SMULL UMULL ADD BIC CMN EOR RSB SBC TEQ MLA SMLAL UMLAL Αριθμητικές – Λογικές Πράξεις

  25. Παραδείγματα Αριθμητικών-Λογικών Πράξεων • ADD R1,R1,#0x10 ; R1R1+0x10 • SUB R5,R1,R2,LSL #2 ; R5R1-R2*4 • RSB R5,R1,R2,LSL #2 ; R5R2*4-R1 • ADC R5,R1,R2 ; R5R1+R2+CARRY • AND R1,R1,#0x10 ; R1R1 & 0x10 • CMP R2,R4 ; R2-R4 (FLAGS AFFECTED) • CMP R3,0x8000 ; R3-0x8000 ( -”-) • CMN R1,R2 ; R1-(-R2) (FLAGS NOT AFFECTED) • TEQS R1,R4 ; R1 xor R4 (Z AFFECTED)

  26. Παραδείγματα Αριθμητικών-Λογικών Πράξεων • MUL R1,R2,R5 ; R132 LSBs of R2*R5 • MLA R1,R1,R4,R6; R132LSBs of R6+R1*R4 • SMULL R0,R1,R4,R6; R1:R0R4*R6 • UMLAL R1,R2,R4,R6; R2:R1R4*R6+ (R1+R2*232)

  27. ΔΙΑΚΛΑΔΩΣΕΙΣ • Β: Απλή διακλάδωση • BL: Διακλάδωση με αποθήκευση διεύθυνσης επιστροφής στο R14 (για κλήση υπορουτίνας • BX, BLX: όμοια με B, BL αλλά αλλάζουν κατάσταση από ARM σε Thumb κ.αντ. • Παράδειγμα: • Β Loop ; Άλμα στην ετικέτα Loop • BLEQ Loop ; Άλμα στο Loop αν Ζ=1

  28. Σύνταξη Εντολών [ετικέτα:]<κενο>εντολή<κενό>δεδομένα@σχόλια Directives: .abortΣταματά τη μετάφραση .alignΤοποθέτηση δεδομένων σε στοιχισμένες θέσεις .arm Έναρξη 32-bit κώδικα (arm) .ascizΑρχή ακολουθίας αλφαριθμητικών χαρακτήρων .byte Αρχή ακολουθίας bytes .dataΑκολουθούν δεδομένα .equ Αντιστοίχηση τιμής σε σύμβολο .global Δηλώνει ένα σύμβολο ως σφαιρικό .hword Τοποθετεί halfwords .ifΟ κώδικας που ακολουθεί εκτελείται αν ισχύει η συνθήκη του .include Εισάγει τον κώδικα άλλου αρχείου στην τρέχουσα θέση .text Ακολουθεί κώδικας .word Τοποθετεί words

  29. Παραδείγματα directives .align 4 @Τα δεδομένα που ακολουθούν να είναι στοιχισμένα σε διευθύνσεις που είναι πολλαπλάσια του 4 Label: .asciz “Test” @ Οι χαρακτήρες της λέξης Test θα αποθηκευθούν σε διαδοχικές θέσεις μετά τη διεύθυνση της Label Label: .byte 0x10, 0x20, 0x30, 0x33 @οι 4 τιμές μεγέθους byte θα αποθηκευθούν σε διαδοχικές θέσεις μετά τη διεύθυνση Label .equ Mac,#0x1234 @ όπου συναντάται η λέξη Mac θα αντικαθίσταται από την άμεση τιμή 0x1234 .global main @ η ετικέτα main θα μπορεί να προσπελαστεί από άλλα προγράμματα .hword 0x2010, 0x3330 @ όμοια με .byte παραπάνω .word 0x33302010 @ όμοια με .byte / .hword παραπάνω

  30. Παραδείγματα directives .equ CFG,1 .if CFG MOV R0,#0x30 .else MOV R0,#0x10 .endif .include “sfina.asm”

  31. Εγκατάσταση Keil Εξομοιωτή • Εκτέλεση των αρχείων • gccarm331.exe (gnu tools) • Mdk311.exe (uVision3 simulator) • Δημιουργία project • ProjectNew uVision3 projectόνομα • Επιλογή επεξεργαστή από ProjectSelect Device for target ‘Target 1’ • Επιλέξτε AtmelAT91SAM9261

  32. Ρυθμίσεις Εξομοιωτή • ProjectManagementComponents, Environment and Books • Μετάβαση σε καρτέλα Folders/Extensions • Gnu tool prefix: arm-uclibc- • Cygnus Folder: C:\Cygnus\ • ProjectOptions for Target 1Assembler • Misc Controls: -mcpu=arm926ej

  33. Σύνδεση αρχείου με project • FileNew • FileSave AsΌνομα αρχείου με κατάληξη .s • Εγγραφή κώδικα στο νέο αρχείο • Στο project workspace με δεξί κλικ επιλέγουμε Add Files to Group … και επιλέγουμε το αρχείο που ήδη φτιάξαμε • Μετάφραση κώδικα με ProjectBuild Target

  34. Προσοχή κατά την εξομοίωση με Keil • Αν στον κώδικά μας χρησιμοποιείται στοίβα ή κλήση υπορουτινών ο δείκτης στοίβας (SP-R13) θα πρέπει να οριστεί στην κορυφή της περιοχής στοίβας

  35. Εκτέλεση κώδικα στο περιβάλλον του αναπτυξιακού AT91 • Συγγραφή αρχείου assembly με τη βοήθεια του Edit (πχ, edit test.s) • Εναλλακτικά μπορεί να χρησιμοποιηθεί κάποιο έτοιμο αρχείο αποθηκευμένο σε ένα flash stick: • mount /dev/sda1 /mnt

  36. Μετάφραση κώδικα assembly • make as test.s test • Εκκίνηση GNU debugger: • gdb test • Αν η gdb παρουσιάζεται ως άγνωστη εντολή • cd /storage/.gnu • chmod 777 gdb • Κλήση της ως /storage/.gnu/gdb test

  37. Πιο συχνά χρησιμοποιούμενες εντολές gdb • break main @ breakpoint at label main • break Check @ breakpoint at label Check • run @ run until next breakpoint • s @ execute next instruction (same as step) • s 5 @ execute next 5 instructions • n @ execute next instruction, if it is a call @ don’t step into the routine • Αποφύγετε τη χρήση της n • c @ continue execution after breakpoint (same as cont)

  38. Πιο συχνά χρησιμοποιούμενες εντολές gdb • break *0x80c0 @ break at address 0x80c0 • break *(main+12) @ 12 bytes after main • info break @ show breakpoints • delete 2 @ delete 2nd breakpoint • clear 12 @ clear breakpoint at line 12 of code

  39. Περιεχόμενα μνήμης/καταχωρητών • x/nfu @ n-number, f-format, u-size • x/4xb 0x10544 @ show 4 bytes starting at 10544 in hex fmt • x/8tw (&Values+2) @ show 8 words in binary fmt starting at address of Values+2 • x/dw &Values @ show in decimal the word at address of label Values

  40. Περιεχόμενα μνήμης/καταχωρητών • p/f address • p/x *((char*) &Values+2) • Show in hex, the byte value of address &Values+2 • p/x *((short*) &Values • Show in hex the half word value of addr &Values • p/x *((long*) &Values • Show in hex the long word value of addr &Values • p/x $r2 @ show the value of R2 • p/t $cpsr @ show the binary value of CPSR (don’t use $ • p/x $sp @ show the value of SP (don’t use $R13 instead of SP)

  41. Άλλες εντολές του gdb • list @ show 10 lines around current line • list 15,18 @ show lines 15-18 • disassemble (main+20) @ shows 20 instructions starting from main.

More Related