AVR: προγραμματισμός στο περιβάλλον AVR Studio. Ενσωματωμένο περιβάλλον εντοπισμού σφαλμάτων AVR Studio από το Atmel Avr studio

Για να εργαστείτε με το AVR Studio 4 πρέπει να το εγκαταστήσετε μόνο του. Εάν είναι ήδη εγκατεστημένο, μπορείτε να παραλείψετε αυτό το βήμα.

Εγκατάσταση:
δημιουργήστε έναν κατάλογο c:/avr/ - εδώ θα βρίσκονται τα προγράμματα εργασίας.
δημιουργήστε έναν κατάλογο, για παράδειγμα c:/works/ – εδώ θα αποθηκευτούν τα έργα σας.
Είναι απαραίτητο να υπάρχουν συντομεύσεις για να μην υπάρχουν προβλήματα με αυτές.

Υπάρχει γενικά το AVRStudio5, αλλά το AVRStudio4 εξακολουθεί να είναι αρκετά.

Όλες οι εργασίες θα πραγματοποιηθούν στο AVRStudio4, το WinAVR χρειάζεται μόνο λόγω της βιβλιοθήκης AVR-GCC (Για να μπορείτε να γράφετε σε C)
ΑΛΛΑ! Πρέπει πρώτα να εγκαταστήσετε το WinAVR, διαφορετικά δεν θα παραληφθεί η βιβλιοθήκη AVR-GCC.

Νομίζω ότι θα το καταλάβεις εδώ.
AVR-GCC για γραφή σε C
Atmel Avr Assembler αντίστοιχα για assembler.

Είναι καλύτερα να αρχίσετε να κατανοείτε το MK από την αρχή. Και αυτό σημαίνει από το Assembler, που σημαίνει ότι δημιουργείτε αυτό που είναι το Atmel AVR Assembler.

Στη συνέχεια, επιλέξτε τον μικροελεγκτή Atmega8.

όταν δημιουργηθεί το έργο, θα υπάρχει μια μεγάλη, λευκή, κενή πλάκα. θα υπάρχει κωδικός εδώ.

λίγα λόγια για το περιεχόμενο αυτού του φύλλου

Τα "σχόλια" είναι κείμενο που παραλείπει ο μεταγλωττιστής κατά τη μεταγλώττιση.
Πρέπει να υπάρχει ένα ειδικό σύμβολο πριν από την αρχή του σχολίου, χρησιμοποιώ το σύμβολο. "Ερωτηματικό", υπάρχει επίσης "διπλή κάθετο" (//),
εδώ είναι παραδείγματα σχολίων

/* * Ένα σχόλιο αυτού του τύπου (πολλαπλών γραμμών), * που συνήθως χρησιμοποιείται για * συνοδευτικές πληροφορίες * σχετικά με τον πηγαίο κώδικα, π.χ. * όνομα, προγραμματιστής κ.λπ. */ NOP // Αυτό το σχόλιο χρησιμοποιείται κυρίως για να εξηγήσει τον σκοπό μιας εντολής ή ενός κομματιού κώδικα SLEEP . Αυτό το σχόλιο, όπως και το προηγούμενο, μπορεί να χρησιμοποιηθεί για επεξήγηση (για σημειώσεις) στον κώδικα

εντολές γράφονται σε κάθε γραμμή. εκείνοι. μία εντολή - μία γραμμή.
Ας πούμε ότι υπάρχουν εντολές με δύο «παραμέτρους», με μία ή χωρίς τίποτα

MOV R16, R17 ; δύο παράμετροι INC R16 ; μία παράμετρος SEI. χωρίς παραμέτρους

MOV R16, R17 ; τρία byte INC R16; δύο byte SEI ; ένα byte

Βλέπετε τη σύνδεση μεταξύ του μεγέθους της ομάδας και των παραμέτρων;

Κάθε μικροελεγκτής έχει το δικό του assembler, αν και τα μνημονικά τους είναι παρόμοια, δηλ. Η εντολή MOV για MK μιας σειράς θα εμφανίζεται στον κώδικα μηχανής, ας πούμε 0x12, και για μια άλλη 0x55.
Για να μεταγλωττιστεί κατά τη μεταγλώττιση στον κώδικα που χρειαζόμαστε, πρέπει να πούμε στον μεταγλωττιστή για ποιον μικροελεγκτή γράφουμε το πρόγραμμα.
Αυτό επιλέγεται γενικά κατά τη δημιουργία ενός έργου.
Για το λόγο αυτό, επιλέξαμε τον μικροελεγκτή Atmega8.

Αλλά δεν είναι μόνο αυτό. Για να κάνουμε τη ζωή μας πιο εύκολη, το AVRStudio4 έχει ένα σύνολο σταθερών, οι οποίες ονομάζονται κάτι σαν "Macroassembler".

Για να τα φορτώσετε, πρέπει να εισαγάγετε τη γραμμή στην αρχή του κώδικα

Συμπεριλάβετε το "m8def.inc" // χρησιμοποιώντας την εντολή .include, φορτώσαμε το αρχείο m8def.inc και τώρα θα γίνει πιο εύκολο για εμάς;)

Στην αρχή του κώδικα, τοποθετείται ένας πίνακας διακοπών. Θα εξηγήσω τι είναι και πώς λειτουργεί σε άλλη ανάρτηση. Αλλά προς το παρόν, ας το γράψουμε ως εξής:

ΕΠΑΝΑΦΟΡΑ RJMP ; Επαναφορά χειριστή RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Handler σύγκρισης RETI; RJMP TIM2_OVF ; Timer2 Overflow Handler RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 Overflow Handler RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR Empty Handler RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Αναλογικός χειριστής σύγκρισης RETI; RJMP TWSI ; Χειριστής σειριακής διεπαφής δύο καλωδίων RETI; RJMP SPM_RDY ; Αποθηκεύστε το πρόγραμμα χειρισμού μνήμης ετοιμότητας

Μετά από αυτό έρχεται ο ίδιος ο κωδικός

ΕΠΑΝΕΚΚΙΝΗΣΗ: ; διακριτικό προετοιμασίας MAIN: NOP ; δείκτης κύριου βρόχου RJMP MAIN

Υπάρχει όμως ένα (ή μάλλον όχι ένα, αλλά πολλά) χαρακτηριστικά.

Για τη διευκόλυνση της σύνταξης κώδικα, για τη σαφήνειά του και για τη διευκόλυνση των σχετικών μεταβάσεων, μας δόθηκαν δείκτες, πώς μοιάζουν; Τα "RESET:" και "MAIN:" είναι δείκτες· τα ονόματά τους μπορούν να περιέχουν σχεδόν όλους τους λατινικούς χαρακτήρες και αριθμούς. Οι δείκτες δεν μπορούν να έχουν ονόματα συναρτήσεων και εντολών, για παράδειγμα "NOP".
Πώς φτάνει κανείς σε αυτά; Ας πούμε την εντολή RJMP.

Επίσης, από το Markers, μπορούμε να φτιάξουμε μια υπορουτίνα (διαδικασία), με την ολοκλήρωση της οποίας θα επιστρέψουμε από όπου κλήθηκε. Για να το καλέσετε, χρησιμοποιήστε την εντολή «RCALL (υπορουτίνα)» και για να επιστρέψετε από την Υπορουτίνα (διαδικασία), πρέπει να το τερματίσετε με την εντολή «RET». Θα πρέπει να καταλήξουμε με κώδικα όπως αυτός:

ΕΠΑΝΕΚΚΙΝΗΣΗ: ΚΥΡΙΑ: NOP RCALL PPP1 ; καλέστε την υπορουτίνα RJMP MAIN PPP1: NOP RET ; βγείτε από την υπορουτίνα

Πώς λειτουργεί η εντολή "RCALL", όταν καλείται, η διεύθυνση από την οποία κλήθηκε τοποθετείται στο STACK και όταν καλείται η εντολή "RET", αφαιρείται από τον καταχωρητή "stack". Το STACK πρέπει να αρχικοποιηθεί.

Για να δουλέψουμε με το MK μας, πρέπει να το αρχικοποιήσουμε. επειδή mk, αυτή η συσκευή είναι καθολική, έχει πολλές θύρες εισόδου/εξόδου και περιφερειακές συσκευές. όπως USART, PWM, DAC, ADC κ.λπ. Το πρώτο βήμα για την προετοιμασία του μικροελεγκτή είναι να υποδείξετε την αρχή της «στοίβας». Πραγματοποιούμε την προετοιμασία μετά τον δείκτη "RESET:".

LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16

Αν δεν είχαμε εισάγει την εντολή .include “m8def.inc” στην αρχή του κώδικα, θα έπρεπε να τον γράψουμε ως εξής:

LDI R16,0x04 OUT SPH,R16 LDI R16,0x5f OUT SPL,R16

Η διαφορά είναι σημαντική, κατά τη γνώμη μου.

Το STACK είναι μια μνήμη τύπου αποθήκευσης: (τελευταία είσοδος, πρώτη έξοδος).
Ο τύπος του καταστήματος δεν είναι σούπερ μάρκετ, αλλά κόρνα από πολυβόλο. Ελπίζω ο καθένας να μπορεί να φανταστεί πώς φορτώνονται τα φυσίγγια και πώς αφαιρούνται στη συνέχεια από εκεί.
Πρέπει να δώσετε μεγάλη προσοχή στη μνήμη STACK, γιατί... οποιοδήποτε μικρό λάθος στην εργασία με αυτό μπορεί να οδηγήσει σε αστοχία στοίβας. Αυτό είναι τόσο σημαντικό θέμα που αποφάσισα να του αφιερώσω ένα ολόκληρο θέμα και θα το γράψω σε ξεχωριστό σημείωμα.

Έτσι πήραμε τον παρακάτω κώδικα:

Συμπεριλάβετε "m8def.inc" RJMP RESET ; Επαναφορά χειριστή RETI; RJMP EXT_INT0 ; IRQ0 Handler RETI; RJMP EXT_INT1 ; IRQ1 Handler RETI; RJMP TIM2_COMP ; Timer2 Handler σύγκρισης RETI; RJMP TIM2_OVF ; Timer2 Overflow Handler RETI; RJMP TIM1_CAPT ; Timer1 Capture Handler RETI; RJMP TIM1_COMPA ; Timer1 CompareA Handler RETI; RJMP TIM1_COMPB ; Timer1 CompareB Handler RETI; RJMP TIM1_OVF ; Timer1 Overflow Handler RETI; RJMP TIM0_OVF ; Timer0 Overflow Handler RETI; RJMP SPI_STC ; SPI Transfer Complete Handler RETI; RJMP USART_RXC ; USART RX Complete Handler RETI; RJMP USART_UDRE ; UDR Empty Handler RETI; RJMP USART_TXC ; USART TX Complete Handler RETI; RJMP ADC ; ADC Conversion Complete Handler RETI; RJMP EE_RDY ; EEPROM Ready Handler RETI; RJMP ANA_COMP ; Αναλογικός χειριστής σύγκρισης RETI; RJMP TWSI ; Χειριστής σειριακής διεπαφής δύο καλωδίων RETI; RJMP SPM_RDY ; Αποθήκευση προγράμματος μνήμης Ready Handler ΕΠΑΝΑΦΟΡΑ: LDI R16,HIGH(RAMEND) OUT SPH,R16 LDI R16,LOW(RAMEND) OUT SPL,R16 RGMP RESET MAIN: NOP ; δείκτης κύριου βρόχου RJMP MAIN

Σε αυτό το στάδιο, μπορούμε να μεταγλωττίσουμε το έργο και να το εκτελέσουμε για εντοπισμό σφαλμάτων, αλλά επειδή ο κώδικάς μας δεν κάνει τίποτα, μπορούμε να εντοπίσουμε μόνο συντακτικά σφάλματα στον κώδικα.

Για τη σωστή διαδικασία εντοπισμού σφαλμάτων, πρέπει να ορίσετε στον εξομοιωτή τη συχνότητα με την οποία θα λειτουργεί το MK, αυτό γίνεται μόνο μετά τη μεταγλώττιση και την έναρξη του εντοπισμού σφαλμάτων,
Αυτό σημαίνει ότι βρίσκουμε το "Build" στη γραμμή μενού, το ανοίγουμε και βλέπουμε το "Build and Run", μετά από το οποίο θα δούμε ένα κίτρινο βέλος απέναντι από την πρώτη εντολή στη λίστα κωδικών μας. Τώρα αναζητούμε το "Debug" στη γραμμή μενού και κάνουμε κλικ στο "AVR Simulator Options", ανοίγει το ακόλουθο παράθυρο:

Στο οποίο μπορούμε να αλλάξουμε το MK και τη συχνότητά του, επίσης, στον πίνακα στα δεξιά, βλέπουμε μερικές πληροφορίες για το MK μας: τη μέγιστη συχνότητα, τη χωρητικότητα μνήμης (EEPROM, RAM, FLASH). Τώρα ανοίξτε το φύλλο δεδομένων στο Atmega8, στη σελίδα 203 (γενική λίστα καταχωρητών) και 205 (γενική λίστα εντολών) και ξεκινήστε να γράφετε το πρόγραμμά σας.
Και θυμηθείτε, μην φοβάστε να πειραματιστείτε με τον προσομοιωτή, δεν θα σπάσει!


Γειά σου.

Αυτό το άρθρο θα αρέσει σε όσους πιστεύουν ότι έχουν «μεγαλώσει» από το Arduino και είναι έτοιμοι να μπουν στον κόσμο του «σοβαρού» προγραμματισμού μικροελεγκτών. Εκτός από το γεγονός ότι θα «ανεβάσετε τις δεξιότητες του προγραμματιστή σας», θα έχετε την ευκαιρία να επιλέξετε οποιονδήποτε μικροελεγκτή για τα έργα σας και φυσικά θα εκτιμήσετε την ταχύτητα των προγραμμάτων και το μέγεθος της μνήμης που καταλαμβάνουν.

Όλα θα περιγραφούν (για    ), από την αρχή μέχρι το τέλος, - εγκατάσταση και προετοιμασία του απαραίτητου λογισμικού, συναρμολόγηση του απλούστερου προγραμματιστή “Gromov” (μη φοβάστε, υπάρχουν μόνο τρεις δίοδοι και επτά αντιστάσεις), υλικολογισμικό MK και κώδικας εγγραφής στο AVR Studio. Η όλη διαδικασία θα συνοδεύεται από εικονογραφήσεις και παραδείγματα.

Επιτρέψτε μου να κάνω μια κράτηση αμέσως: ο υπολογιστής πρέπει να είναι εξοπλισμένος με θύρα COM (ο προσαρμογέας USB σε COM δεν λειτουργεί καλά). Εάν ο υπολογιστής σας δεν έχει τέτοια υποδοχή στο πίσω μέρος, τότε πιθανότατα βρίσκεται στη μητρική πλακέτα (με τη μορφή ακίδων), τότε όλα μπορούν να λυθούν με αυτήν την "εξαγωγή"

Δυστυχώς, για τους κατόχους φορητών υπολογιστών χωρίς COM, το άρθρο έχει μόνο ακαδημαϊκό ενδιαφέρον.

Λοιπόν, ας ξεκινήσουμε…

Τι θα χρειαστείτε;

"Μαλακός"


UniProf- ένα γενικό πρόγραμμα για το φλας διαφόρων μικροελεγκτών ATmega, απλό και βολικό, και το πιο σημαντικό, λειτουργεί τέλεια με τον προγραμματιστή μας. Ο συγγραφέας είναι ο Ρώσος προγραμματιστής Mikhail Nikolaev.

Φυσικά, μπορείτε να κάνετε flash το MK από το AVR Studio, αλλά για αυτό χρειάζεστε έναν ειδικό προγραμματιστή. Επομένως, θα γράψουμε τον κώδικα στο στούντιο και θα αναβοσβήσουμε τα εξαγωνικά αρχεία που προκύπτουν με το UniProf χρησιμοποιώντας τον σπιτικό προγραμματιστή μας. Επιπλέον, θα περιγραφεί η μέθοδος αναλαμπής του υλικολογισμικού από τη γραμμή εντολών.

Οι χρήστες Linux θα πρέπει να χρησιμοποιούν είτε εικονική μηχανή είτε Wine. Δεν μου βγήκε με το Wine, δεν μπορώ να δω καθόλου τη θύρα και δεν το έχω δοκιμάσει με εικονική μηχανή.

  Λειτουργεί άψογα στο Wine (Debian 8.5, wine1.6).

Όλο το λογισμικό είναι δωρεάν.

"Σίδερο"

Θα κάνουμε πειράματα πάνω Arduino pro miniμε τσιπ ATmega328. Συχνότητα χαλαζία (8/16 MHz), καθώς και τάση (3,3/5v), δεν πειράζει. (Δες παρακάτω)

Στο μέλλον θα προγραμματίσετε διάφορους μικροελεγκτές Atmel, αλλά για πρώτη φορά αυτή η πλακέτα είναι σωστή. Είναι καλό γιατί είναι πρακτικά ένα γυμνό χειριστήριο με ελάχιστη καλωδίωση και κολλημένους πείρους. Ακριβώς αυτό που χρειάζεστε.

Σχετικά με τις σημάνσεις στους μικροελεγκτές

Μετά το όνομα υπάρχουν αριθμοί, οι οποίοι τις περισσότερες φορές δηλώνουν την ποσότητα της μνήμης.

Το γράμμα μετά τους αριθμούς υποδεικνύει τις παραμέτρους της τάσης τροφοδοσίας.

Κανένα γράμμα- η τάση τροφοδοσίας του ελεγκτή είναι εντός 4,5-5,5 βολτ.
μεγάλο- εκδόσεις ελεγκτών που λειτουργούν σε μειωμένη (Χαμηλός)τάση τροφοδοσίας (2,7 - 5,5 βολτ).
V- εκδόσεις ελεγκτών που λειτουργούν σε χαμηλή τάση τροφοδοσίας (1,8-5,5 βολτ).
U- εκδόσεις ελεγκτών που λειτουργούν σε εξαιρετικά χαμηλή τάση τροφοδοσίας (0,7-5,5 βολτ).
Π- εκδόσεις χαμηλής κατανάλωσης (έως 100 nA σε λειτουργία απενεργοποίησης).
ΕΝΑ- μειωμένη κατανάλωση ρεύματος, καλύπτοντας όλο το εύρος συχνοτήτων ρολογιού όλων των εκδόσεων, τάση τροφοδοσίας 1,8-5,5 βολτ (σε ορισμένα μοντέλα, έχουν προστεθεί νέες δυνατότητες και νέα μητρώα, διατηρώντας παράλληλα πλήρη συμβατότητα με προηγούμενες εκδόσεις).

μικροελεγκτές « ΕΝΑ" και οχι- ΕΝΑ" έχουν συνήθως την ίδια υπογραφή, κάτι που προκαλεί κάποιες δυσκολίες, αφού τα Fuse-bits είναι διαφορετικά.

Παραδείγματα:

ATmega8- Η χωρητικότητα μνήμης προγράμματος είναι 8 kilobyte, η τάση τροφοδοσίας είναι 4,5-5,5 βολτ.
ATmega8L- Η χωρητικότητα μνήμης προγράμματος είναι 8 kilobyte, η τάση τροφοδοσίας είναι 2,7-5,5 βολτ.
ATtiny43U- χωρητικότητα μνήμης 4 kilobyte, τροποποίηση - 3, τάση τροφοδοσίας - 0,7-5,5 βολτ.
ATtiny44A- χωρητικότητα μνήμης 4 kilobyte, τροποποίηση - 4, μειωμένη κατανάλωση ρεύματος, τάση τροφοδοσίας 1,8-5,5 βολτ.

Συμβαίνει ότι ένας ελεγκτής χωρίς γράμμα μπορεί να έχει μειωμένη τάση τροφοδοσίας (1,7 ή 1,8 βολτ). Αυτό πρέπει να διευκρινιστεί στο φύλλο δεδομένων.

ATtiny841- χωρητικότητα μνήμης 8 kilobyte, τροποποίηση - 41, τάση τροφοδοσίας - 1,7-5,5 βολτ.

Μετά την παύλα, υποδεικνύεται η έκδοση του μικροελεγκτή, που αποτελείται από αριθμούς που υποδεικνύουν τη μέγιστη συχνότητα του ελεγκτή (στην κατάλληλη τάση τροφοδοσίας), και από γράμματα που υποδεικνύουν την επιλογή περιβλήματος, το εύρος θερμοκρασίας λειτουργίας και τα χαρακτηριστικά κατασκευής.

Ένα ή δύο γράμματα που ακολουθούν τη συχνότητα υποδεικνύουν τον τύπο του περιβλήματος:

UniProf
Το να γράψετε ένα πρόγραμμα είναι η μισή μάχη· πρέπει ακόμα να το στριμώξετε με κάποιο τρόπο στο χειριστήριο. Ας δώσουμε λοιπόν μεγαλύτερη προσοχή σε αυτό.

Θα ήταν ωραίο αν το Arduino σας ήταν φορτωμένο με τυπικό Blink (το συνοδεύει από το εργοστάσιο).

Ας ξεκινήσουμε το UniProf... Ίσως εμφανιστεί το ακόλουθο παράθυρο:

Αυτό είναι συνδεδεμένο στη θύρα LPT, οπότε απλώς κάντε κλικ Εντάξει.

Στη συνέχεια θα ανοίξει το παράθυρο του προγράμματος:

Εάν η θύρα δεν έχει επιλεγεί σωστά, θα εμφανιστεί ένα παράθυρο που σας ρωτά...

Κάντε κλικ στο OK και επιλέξτε τη θύρα που θέλετε.

Εάν το MK δεν εντοπιστεί αυτόματα, τότε θα εμφανιστεί ένα παράθυρο με μη αυτόματη επιλογή:

Δυστυχώς δεν υπάρχει στη λίστα atmega328, οπότε επιλέγουμε μέγα32 (έχουν την ίδια ποσότητα μνήμης flash) και πατήστε Εντάξει.

Μετά από αυτό, αντί για τη λέξη άγνωστο, θα εμφανιστεί ο συνδεδεμένος ελεγκτής...

32 Χιλείναι η ποσότητα της μνήμης Flash και 1024 - Ένταση EEPROM.

Τώρα, αν όλα είναι όπως στην εικόνα, τότε ανοίξτε τη βοήθεια   και διαβάστε προσεκτικά τι γράφεται εκεί. Ο συγγραφέας ήταν πολύ συνοπτικός, επομένως δεν θα πάρει πολύ χρόνο. Μην πατήσετε ακόμα κανένα κουμπί.

Εχεις συναντησει? Ωραία, τώρα μπορούμε να προχωρήσουμε. Καταργήστε την επιλογή του πλαισίου δίπλα στο EEPROM και θα δείτε την αλλαγμένη διεπαφή:

Αφού καταργήσετε την επιλογή του πλαισίου ελέγχου EEPROM, η ανάγνωση και η εγγραφή αυτής της περιοχής μνήμης δεν εκτελείται.

Δεδομένου ότι θα λειτουργούμε με hex αρχεία, θα αφαιρέσουμε τα "σήματα ελέγχου" ΓενικόςΚαι ΑΠΟΘΗΚΗκαι επιλέξτε επίσης το πλαίσιο Φρένο!, αυτό θα αυξήσει τον χρόνο ανάγνωσης/εγγραφής, αλλά θα αυξήσει τη σταθερότητα.

Η διαδικασία δεν είναι γρήγορη, οπότε θα πρέπει να περιμένετε. Τα μπλε τετράγωνα θα ανιχνεύονται παρακάτω και οι αριθμοί θα μετρώνται στην κάτω δεξιά γωνία. Το πρώτο πάσο θα διαβάζει την περιοχή ΠΡΟΓΡΑΜΜΑ και το δεύτερο θα διαβάζει την EEPROM.

Έχω ένα νέο Arduino με ενσωματωμένο ένα τυπικό Blink (όταν συνδεθεί ο προγραμματιστής, η δίοδος θα σταματήσει να αναβοσβήνει). Εάν έχετε το ίδιο πράγμα, τότε θα εμφανιστεί η παρακάτω εικόνα:

Στα δεξιά βλέπουμε ότι δεν υπάρχει τίποτα στο EEPROM, και στα αριστερά, στο PROGRAM, υπάρχει ένα ηχογραφημένο πρόγραμμα (όπως είπα, αυτό είναι το Blink). Τώρα χρησιμοποιήστε το κάτω βέλος για να μετακινηθείτε στο ρυθμιστικό μέχρι να εξαντληθούν τα δεδομένα...

...τώρα μετακινηθείτε στο τέλος. Θα δείτε περισσότερα δεδομένα - αυτός είναι ο bootloader του Arduino.

Τώρα προτείνω να κάνετε ένα διάλειμμα από το άρθρο μου και να διαβάσετε για τη δομή του MK, αυτό θα αυξήσει σημαντικά την κατανόησή σας για το υλικό. Όλα είναι γραμμένα πολύ καλά και καθαρά. Λοιπόν, μόλις το διαβάσετε, επιστρέψτε και ας συνεχίσουμε...

Καταργήστε την επιλογή του EEPROM. Δεν το χρειαζόμαστε πραγματικά, αλλά θα είναι σαφές ότι υπάρχει ένα "τσιμπούρι" Φρένο!

Τώρα ας αποθηκεύσουμε ό,τι είναι firmware στον ελεγκτή, ώστε μετά από πειράματα να το επαναφέρουμε στην αρχική του κατάσταση.

Πατήστε το κουμπί   και αποθηκεύστε το υλικολογισμικό, ονομάζοντάς το κάπως - origProMini328.hex. Αυτό ήταν, τώρα έχετε ένα αντίγραφο ασφαλείας.

... και, στη συνέχεια, κάντε κλικ στο ήδη γνωστό κουμπί Ανάγνωση. Μετά από αυτό, θα δείτε ότι όλα τα κελιά στο PROGRAM είναι άδεια. Δεν αφαιρέθηκε μόνο το πρόγραμμα, αλλά και ο bootloader του Arduino.
Δηλαδή, τώρα δεν θα μπορείτε να ανεβάσετε σκίτσα χρησιμοποιώντας την παραδοσιακή μέθοδο. Στη συνέχεια, αν θέλετε, με ένα ελαφρύ κούνημα του χεριού σας, επαναφέρετε τα πάντα από το αντίγραφο ασφαλείας.

Τώρα θα αναβοσβήσουμε το χειριστήριο με το ίδιο "Blink", γραμμένο μόνο στο AVR Studio.

Έτσι φαίνεται ο κώδικας:

#define F_CPU 16000000UL #include #περιλαμβάνω #define PIN_PB5 5 // PB5 (Arduino - D13) #define PIN_PB5_PORT PORTB #define PIN_PB5_DDR DDRB int main(void) ( PIN_PB5_DDR = 1<< PIN_PB5; // устанавливаем PIN_PB5 (PB5 (ардуина - D13)) как ВЫХОД while(1) { PIN_PB5_PORT = 1 << PIN_PB5; _delay_ms(300); PIN_PB5_PORT = 0 << PIN_PB5; _delay_ms(300); } return 0; }
Εάν χρησιμοποιείτε ένα Arduino με χαλαζία 8 MHz, τότε δεν υπάρχει τίποτα κακό με αυτό, η δίοδος θα αναβοσβήνει ακριβώς τη μισή συχνότητα.

Δείτε πόσο χώρο καταλαμβάνει:

AVRDude

Το Uniprof, όπως και πολλά άλλα παρόμοια προγράμματα, είναι μόνο ένα γραφικό πρόσθετο πάνω από το πρόγραμμα AVRDude (AVR Downloader-Uploader), το οποίο στη συνέχεια εκτελεί όλες τις παραπάνω ενέργειες στον μικροελεγκτή.
Επειδή η AVRDudeδεν έχει τη δική του γραφική διεπαφή· πρέπει να εργαστείτε μαζί του από τη γραμμή εντολών. Αυτό μπορεί να φαίνεται άβολο σε κάποιους, αλλά είναι ακριβώς το αντίθετο: η εργασία από την κονσόλα είναι απλά εξαιρετική. Βολικό, απλό και μη δεμένο με κανένα λειτουργικό σύστημα, γιατί το avrdude μάλλον υπάρχει για όλα. Τώρα θα το δείτε αυτό.

Για χρήστες

Avrdudeπεριλαμβάνεται στην αλυσίδα εργαλείων AVR, οπότε εγκαταστήστε το (μετά την εγκατάσταση του AVR Studio)όπως γράφτηκε στην αρχή του άρθρου.

CD\
...πηγαίνετε στη ρίζα του δίσκου ΜΕ.

Εισάγοντας την εντολή:

Αν είναι έτσι, τότε avrdudeέτοιμο να πάει και να συνεχίσει.

Τώρα πρέπει να προσθέσουμε τον προγραμματιστή μας στο αρχείο ρυθμίσεων avrdude (C:\Program Files (x86)\Atmel\AVR Tools\AVR Toolchain\bin\ avrdude.conf) . Ανοίξτε το στο πρόγραμμα Σημειωματάριο ++και μετά την επιγραφή «ΟΡΙΣΜΟΙ ΠΡΟΓΡΑΜΜΑΤΙΣΤΗ» προσθέστε αυτές τις γραμμές:

Αναγνωριστικό προγραμματιστή = "gromov"; desc = "σειριακή θύρα χτυπά, επαναφορά=dtr sck=rts mosi=txd miso=cts"; τύπος = Σέρβος; επαναφορά = 4; scck = 7; mosi = 3; miso = 8; ;
Μπιτ-χτύπημα.

Αποθηκεύστε και κλείστε το αρχείο, δεν χρειάζεται πλέον.

Επιστρέψτε στο τερματικό και δώστε την εντολή για έλεγχο της επικοινωνίας μεταξύ του MK και του προγραμματιστή:

Avrdude -n -c gromov -P com1 -p m328p
Μπορεί να έχετε διαφορετική θύρα com.

Εγκαθιστώ avrdude

Sudo apt εγκατάσταση avrdude

Εισάγοντας την εντολή:

Θα πρέπει να δείτε πληροφορίες βοήθειας.

Αν είναι έτσι, τότε avrdudeΕΤΟΙΜΟΣ ΓΙΑ ΔΟΥΛΕΙΑ.

Διαμόρφωση της θύρας:

Sudo stty 9600 ignbrk -brkint -icrnl -imaxbel -opost -isig -icanon -iexten -echo noflshΑυτό πρέπει να γίνει μετά από κάθε επανεκκίνηση του υπολογιστή ή να τον προσθέσετε στο rc.local.

Όπου είναι το /dev/ttyS0 com1, /dev/ttyS1 - com2και τα λοιπά.
Στο μέλλον, σε ομάδες θα γράφω /dev/ttyS0, ίσως έχεις /dev/ttyS1και τα λοιπά.

Προσθέστε τον προγραμματιστή στο αρχείο διαμόρφωσης /etc/avrdude.conf

Sudo nano /etc/avrdude.conf

Μετά το «ΟΡΙΣΜΟΙ ΠΡΟΓΡΑΜΜΑΤΙΣΤΗ» προσθέστε τις ακόλουθες γραμμές:

Αναγνωριστικό προγραμματιστή = "gromov"; desc = "σειριακή θύρα χτυπά, επαναφορά=dtr sck=rts mosi=txd miso=cts"; type = "serbb"; επαναφορά = 4; scck = 7; mosi = 3; miso = 8; ;
Ο προγραμματιστής χρησιμοποιεί τεχνολογία Bit-banging.

Βεβαιωθείτε ότι κατά την αντιγραφή, τα εισαγωγικά παραμένουν απλώς εισαγωγικά, διαφορετικά μπορεί να αλλάξουν (λόγω διαφοράς στις κωδικοποιήσεις) και η avrdude θα βρίσει.

Αποθηκεύστε και κλείστε το αρχείο.

Δώστε την εντολή για να ελέγξετε τη σύνδεση μεταξύ του MK και του προγραμματιστή:

Sudo avrdude -n -c gromov -P /dev/ttyS0 -p m328p

Εάν υπάρχει σύνδεση, τότε η απάντηση θα είναι η εξής:

Εδώ τελειώνουν οι διαφορές μεταξύ των λειτουργικών συστημάτων και οι εντολές αντιγράφονται.

Προσθέστε ένα όρισμα στην εντολή -vή -v -v (μπορεί να προστεθεί σε οποιεσδήποτε εντολές)για να εμφανίσετε πλήρεις πληροφορίες:

Avrdude -n -v -c gromov -P com1 -p m328p ###WIN###
sudo avrdude -n -v -c gromov -P /dev/ttyS0 -p m328p ###Linux###


Το συμπέρασμα του Avrdude είναι ότι και στα Windows και στο Linux είναι το ίδιο, οπότε από εδώ και πέρα ​​θα βγάζω στιγμιότυπα μόνο στο Win.

Υπάρχουν περισσότερες πληροφορίες εδώ, για παράδειγμα, μπορείτε να δείτε ποιες ασφάλειες είναι εγκατεστημένες. Εδώ βγαίνουν σε δεκαεξαδικό (ΓΟΗΤΕΥΩ)αριθμοί. Για παράδειγμα, hfuse 0xDA, σε δυαδικό σχήμα μοιάζει με αυτό - . Δηλαδή, αυτά είναι τα ίδια bits που ελέγχονται σε γραφικές διεπαφές.

Όταν ασχολείστε με ασφάλειες, να θυμάστε ότι στους μικροελεγκτές ATmega οι ασφάλειες είναι ανεστραμμένες. Αυτό είναι 0 - Αυτό επί Yucheno, και 1 - μακριά από Yucheno. Αυτό προκαλεί σύγχυση στις ηλεκτρονικές αριθμομηχανές (δείτε παρακάτω).

Ας διαβάσουμε το firmware από την περιοχή λάμψη (ίδιο με το PROGRAM στο uniprof)εντολή:

Avrdude -c gromov -P com1 -p m328p -U flash:r:readfl.txt:h ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:r:readfl.txt:h ###Linux###

Στο uniprof ο κώδικας εμφανίστηκε στο πρόγραμμα, αλλά εδώ θα γραφτεί σε ένα αρχείο.

Το υλικολογισμικό διαβάζεται και εγγράφεται στο αρχείο readfl.txt. Γράμμα η (γοητεύω)στο τέλος, υποδεικνύει ότι τα δεδομένα πρέπει να γραφτούν σε δεκαεξαδική μορφή. Αν γράψεις γράμμα σι (δυάδικος), θα γραφτεί στο δυαδικό σύστημα, και αν r (ακατέργαστος), τότε τα δεδομένα θα είναι σε "ακατέργαστη" μορφή (kryakozyabra).

Από εδώ και πέρα ​​θεωρείται ότι οι χρήστες win βρίσκονται στη ρίζα του δίσκου ΜΕ (ΝΤΟ:\), και οι χρήστες Linux εργάζονται από τον αρχικό τους φάκελο, επομένως τα αρχεία θα αποθηκευτούν εκεί (εκτός αν ορίζεται διαφορετικά). Το υλικολογισμικό που θα ανέβει στο MK θα πρέπει να βρίσκεται εκεί.

Για τη νίκη, το αρχείο θα βρίσκεται εδώ C:\readfl.txt και για το linux, στο /home/user/readfl.txt. Μπορείτε να ανοίξετε αυτό το αρχείο και να ρίξετε μια ματιά.

Διαβάζοντας το EEPROM:

Avrdude -c gromov -P com1 -p m328p -U eeprom:r:reader.txt:h ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U eeprom:r:reader.txt:h ###Linux###

Ανάγνωση φλας και eeprom μαζί:

Avrdude -c gromov -P com1 -p m328p -U flash:r:readfl.txt:h -U eeprom:r:reader.txt:h ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:r:readfl.txt:h -U eeprom:r:reader.txt:h ###Linux###

Διαγραφή του ελεγκτή:

Avrdude -e -c gromov -P com1 -p m328p ###WIN###
sudo avrdude -e -c gromov -P /dev/ttyS0 -p m328p ###Linux###

Αποσυνδέστε τον πείρο "επαναφοράς" - η δίοδος δεν θα αναβοσβήνει, το πρόγραμμα θα διαγραφεί.

Ας κάνουμε flash το MK με το αρχείο που κατεβάσατε προηγουμένως 328τεστ.εξάγωνο. Βρίσκεται στη ρίζα του δίσκου ντο(c:\328test.hex) στα Windows ή στον αρχικό φάκελο (/home/user/328test.hex) στο linux.

Avrdude -c gromov -P com1 -p m328p -U flash:w:328test.hex ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:w:328test.hex ###Linux###

Τώρα, αν απενεργοποιήσετε την "επαναφορά", ο ελεγκτής θα ζωντανέψει.

Σημείωση. Όταν αναβοσβήνει το MK μέσω avrdude, δεν είναι απαραίτητο να διαγράψετε τον ελεγκτή, το πρόγραμμα το κάνει μόνο του. Ωστόσο, εάν καθορίσετε την παράμετρο -ΡΕ, τότε το MK δεν θα καθαριστεί αυτόματα.

Υλικολογισμικό EEPROM:

Avrdude -c gromov -P com1 -p m328p -U eeprom:w:eeprom.hex ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U eeprom:w:eeprom.hex ###Linux###

Διαβάζοντας όλες τις ασφάλειες:

Avrdude -c gromov -P com1 -p m328p -U hfuse:r:hfuse.txt:h -U fuse:r:lfuse.txt:h -U lock:r:lock.txt:h -U fuse:r:fuse .txt:h ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U hfuse:r:hfuse.txt:h -U fuse:r:lfuse.txt:h -U lock:r:lock.txt:h -U fuse :r:efuse.txt:h ###Linux###

Ορισμένοι ελεγκτές ενδέχεται να μην έχουν ασφάλεια.

Μόνο για ανάγνωση Χαμηλή ασφάλεια:

Avrdude -c gromov -P com1 -p m328p -U lfuse:r:lfuse.txt:h ###WIN###
sudo avrdude -c gromov -P com1 -p m328p -U lfuse:r:lfuse.txt:h ###Linux###

Η χαμηλή ασφάλεια είναι υπεύθυνη για την επιλογή της πηγής σήματος ρολογιού (εσωτερική, εξωτερική), της συχνότητάς της και της παύσης πριν από την εκκίνηση του ελεγκτή μετά την παροχή ρεύματος σε αυτόν. Τώρα έχετε την τιμή γραμμένη εκεί - 0xff, που αντιστοιχεί σε εξωτερικό χαλαζία από 8 MHz και πάνω.

Τώρα θα αναβοσβήσουμε ένα άλλο fuse, το οποίο θα μεταφέρει το ATmeg σας σε λειτουργία από μια εσωτερική γεννήτρια 8 MHz.

Avrdude -c gromov -P com1 -p m328p -U lfuse:w:0xe2:m ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U lfuse:w:0xe2:m ###Linux###

Εάν έχετε Arduino 16 MHz, η δίοδος θα αναβοσβήνει δύο φορές πιο αργά.
Στο μέλλον, κατά την κωδικοποίηση στο AVR Studio, μπορείτε να καθορίσετε μια συχνότητα 8 MHz και να ξεκολλήσετε τον χαλαζία, έχοντας έτσι στη διάθεσή σας δύο ακόμη δωρεάν ψηφιακές ακίδες.

Αλλά αυτό είναι αργότερα, και τώρα ας επιστρέψουμε τα πάντα όπως ήταν αναβοσβήνοντας την προηγούμενη ασφάλεια:

Avrdude -c gromov -P com1 -p m328p -U lfuse:w:0xff:m ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U lfuse:w:0xff:m ###Linux###

Η δίοδος θα αναβοσβήνει σωστά.

Οι ασφάλειες μπορούν να αναβοσβήσουν μεμονωμένα ή μαζί:

Avrdude -c gromov -P com1 -p m328p -U hfuse:w:0xda:m -U fuse:w:0xff:m -U fuse:w:0x05:m ###WIN###
sudo avrdude -c gromov -P /dev/ttyS0 -p m328p -U hfuse:w:0xda:m -U lfuse:w:0xff:m -U fuse:w:0x05:m ###Linux###
Αυτές οι εντολές δεν χρειάζεται να δοθούν. Τα παρουσιάζω για λόγους σαφήνειας.

Στο μέλλον, όταν χρειαστεί να χρησιμοποιήσετε άλλους ελεγκτές, θα τσεκάρετε τα πλαίσια στην ηλεκτρονική αριθμομηχανή και θα λάβετε τις τιμές (ο σύνδεσμος βρίσκεται στην επάνω αριστερή γωνία)σε μορφή hex και αναβοσβήνει.

Τώρα το μόνο που μένει είναι να καταλάβουμε τις παραμέτρους avrdudeκαι μπορείτε να προχωρήσετε στο τελευταίο μέρος.

-c gromov- τύπος προγραμματιστή, ή μάλλον το όνομα με το οποίο είναι γραμμένο στο config (avrdude.conf).
-P com1- Λοιπόν, όλα είναι ξεκάθαρα εδώ.
-p m328p- ονομασία τύπου MK.
-U- μετά από αυτήν την επιλογή εμφανίζεται η περιοχή μνήμης (φλας, eeprom, xfuse), στο οποίο θα εκτελεστούν τυχόν ενέργειες (r - read, w - write).
Τα άνω και κάτω τελεία χρησιμεύουν ως διαχωριστικά.

Εδώ, με τα ονόματα των μικροελεγκτών και τα ψευδώνυμά τους, προγραμματιστές και άλλες επιλογές.

Παρατσούκλια MK

uc3a0512- AT32UC3A0512
c128- AT90CAN128
c32- AT90CAN32
c64- AT90CAN64
pwm2- AT90PWM2
pwm2b- AT90PWM2B
pwm3- AT90PWM3
pwm316- AT90PWM316
pwm3b- AT90PWM3B
1200 - AT90S1200 (****)
2313 - AT90S2313
2333 - AT90S2333
2343 - AT90S2343 (*)
4414 - AT90S4414
4433 - AT90S4433
4434 - AT90S4434
8515 - AT90S8515
8535 - AT90S8535
usb1286- AT90USB1286
usb1287- AT90USB1287
usb162- AT90USB162
usb646- AT90USB646
usb647- AT90USB647
usb82- AT90USB82
m103- ATmega103
m128- ATmega128
m1280- ATmega1280
m1281- ATmega1281
m1284p- ATmega1284P
m1284rfr2- ATmega1284RFR2
m128rfa1- ATmega128RFA1
m128rfr2- ATmega128RFR2
m16- ATmega16
m161- ATmega161
m162- ATmega162
m163- ATmega163
m164p- ATmega164P
m168- ATmega168
m168p- ATmega168P
m169- ATmega169
m16u2- ATmega16U2
m2560- ATmega2560 (**)
m2561- ATmega2561 (**)
m2564rfr2- ATmega2564RFR2
m256rfr2- ATmega256RFR2
m32- ATmega32
m324p- ATmega324P
m324pa- ATmega324PA
m325- ATmega325
m3250- ATmega3250
m328- ATmega328
m328p- ATmega328P
m329- ATmega329
m3290- ATmega3290
m3290p- ATmega3290P
m329p- ATmega329P
m32u2- ATmega32U2
m32u4- ATmega32U4
m406- ATMEGA406
m48- ATmega48
m48p- ATmega48P
m64- ATmega64
m640- ATmega640
m644- ATmega644
m644p- ATmega644P
m644rfr2- ATmega644RFR2
m645- ATmega645
m6450- ATmega6450
m649- ATmega649
m6490- ATmega6490
m64rfr2- ATmega64RFR2
m8- ATmega8
m8515- ATmega8515
m8535- ATmega8535
m88- ATmega88
m88p- ATmega88P
m8u2- ATmega8U2
t10-ATtiny10
t11- ATtiny11
t12- ATtiny12
t13- ATtiny13
t15-ATtiny15
t1634- ATtiny1634
t20- ATtiny20
t2313- ATtiny2313
t24- ATtiny24
t25- ATtiny25
t26- ATtiny26
t261- ATtiny261
t4- ATtiny4
t40- ATtiny40
t4313-ATtiny4313
t43u- ATtiny43u
t44- ATtiny44
t45- ATtiny45
t461- ATtiny461
t5- ATtiny5
t84- ATtiny84
t85- ATtiny85
t861- ATtiny861
t88- ATtiny88
t9- ATtiny9
x128a1- ATxmega128A1
x128a1d- ATxmega128A1revD
x128a1u- ATxmega128A1U
x128a3- ATxmega128A3
x128a3u- ATxmega128A3U
x128a4- ATxmega128A4
x128a4u- ATxmega128A4U
x128b1- ATxmega128B1
x128b3- ATxmega128B3
x128c3- ATxmega128C3
x128d3- ATxmega128D3
x128d4- ATxmega128D4
x16a4- ATxmega16A4
x16a4u- ATxmega16A4U
x16c4- ATxmega16C4
x16d4- ATxmega16D4
x16e5- ATxmega16E5
x192a1- ATxmega192A1
x192a3- ATxmega192A3
x192a3u- ATxmega192A3U
x192c3- ATxmega192C3
x192d3- ATxmega192D3
x256a1- ATxmega256A1
x256a3- ATxmega256A3
x256a3b- ATxmega256A3B
x256a3bu- ATxmega256A3BU
x256a3u- ATxmega256A3U
x256c3- ATxmega256C3
x256d3- ATxmega256D3
x32a4- ATxmega32A4
x32a4u- ATxmega32A4U
x32c4- ATxmega32C4
x32d4- ATxmega32D4
x32e5- ATxmega32E5
x384c3- ATxmega384C3
x384d3- ATxmega384D3
x64a1- ATxmega64A1
x64a1u- ATxmega64A1U
x64a3- ATxmega64A3
x64a3u- ATxmega64A3U
x64a4- ATxmega64A4
x64a4u- ATxmega64A4U
x64b1- ATxmega64B1
x64b3- ATxmega64B3
x64c3- ATxmega64C3
x64d3- ATxmega64D3
x64d4- ATxmega64D4
x8e5- ATxmega8E5

Οι χρήστες Linux μπορούν να χρησιμοποιήσουν κρασί.

Ελπίζω να έχετε ήδη εγκαταστήσει τα πάντα, οπότε ας ξεκινήσουμε το AVR Studio...


Εδώ μας ζητείται να δημιουργήσουμε ένα νέο έργο ή να ανοίξουμε ένα παλιό. Κάντε κλικ Νέο Έργο


Επιλέγω AVR GCC, αφού θα γράφουμε σε SI, και όχι σε assembler.
Δίνουμε όνομα στο έργο και τσεκάρουμε τα πλαίσια.
Επιλέγω Τοποθεσία (Δημιουργώ το φάκελο AVR στη μονάδα δίσκου C:\)Εκεί θα δημιουργηθούν αυτόματα φάκελοι με έργα.
Κάντε κλικ Επόμενο


Επιλέγω Προσομοιωτής AVR, αφού δεν έχουμε ειδικό προγραμματιστή που να επιτρέπει τον εντοπισμό σφαλμάτων και ο μικροελεγκτής μας είναι ATmega328p.
Κάντε κλικ Φινίρισμα.

Μετά από αυτούς τους χειρισμούς, το στούντιο είναι έτοιμο για δουλειά.

Αριστερά είναι τα μονοπάτια προς το έργο. Στο κέντρο υπάρχει ένα πρόγραμμα επεξεργασίας κειμένου στο οποίο είναι γραμμένος ο κώδικας. Στα δεξιά είναι οι καταχωρητές ελεγκτών. Κάτω αριστερά υπάρχουν πληροφορίες εντοπισμού σφαλμάτων.

Από τα κουμπιά που μας ενδιαφέρουν αυτή τη στιγμή -

Κατασκευάστε το έργο.
Δημιουργήστε το έργο και ξεκινήστε τον εντοπισμό σφαλμάτων.
Σύνταξη του αρχείου.
Καθάρισμα.
Ρύθμιση έργου. Κάντε κλικ πάνω του λοιπόν...

Εδώ μπορείτε να αλλάξετε τον τύπο του MK, να ορίσετε τη συχνότητα του ρολογιού (θα το γράψουμε απευθείας στον κωδικό), επίπεδο βελτιστοποίησης, καθώς και να καθορίσετε ποια αρχεία θα δημιουργηθούν.
Κάντε κλικ στα εικονίδια στα αριστερά για ενδιαφέρον και κάντε κλικ Ματαίωση.
Δεν θα εξηγήσω αυτές και άλλες επιλογές, αλλά αργότερα θα παράσχω έναν σύνδεσμο με μια κατάλληλη περιγραφή.

Τώρα αντιγράψτε τον κώδικα που γράφτηκε στην αρχή του άρθρου και επικολλήστε τον στον επεξεργαστή:

Καθορίσαμε τη συχνότητα ρολογιού στον κώδικα επειδή η βιβλιοθήκη το απαιτεί καθυστέρηση.η.

Η κατασκευή ήταν επιτυχής, δεν υπήρχαν σφάλματα ή προειδοποιήσεις.

Τώρα ας συνεχίσουμε το δρόμο μας C:\AVR\my328\default\, βρίσκουμε εκεί το αρχείο hex που δημιουργήσαμε - my328.hexκαι αναβοσβήνει στον ελεγκτή. Τι να αναβοσβήνει (avrdude ή uniprof)επιλέξτε μόνοι σας.

Στο avrdude θα μοιάζει με αυτό:

Avrdude -c gromov -P com1 -p m328p -U flash:w:\AVR\my328\default\my328.hex ###WIN###
avrdude -c gromov -P /dev/ttyS0 -p m328p -U flash:w:my328.hex ###Linux###

Απενεργοποιήστε την «επαναφορά» και δείτε τη δίοδο να αναβοσβήνει μία φορά το δευτερόλεπτο. Ελπίζω να σας έπεισα για την απλότητα και την ευκολία της γραμμής εντολών.

Για να μετατρέψετε το Arduino ξανά σε Arduino, έχετε ένα αντίγραφο ασφαλείας.

Όπως ήδη γράφτηκε παραπάνω, δεν θα μπω σε επεξηγήσεις για τη συνεργασία με το AVR Studio, ούτε θα δώσω μαθήματα για τη γλώσσα SI. Πρώτα απ 'όλα, αυτό δεν ήταν το σχέδιό μου. (Ήθελα απλώς να βοηθήσω να γίνει η μετάβαση από το Arduino στο AVR Studio)

Το IDE είναι ένα ολοκληρωμένο περιβάλλον ανάπτυξης που περιλαμβάνει διάφορα πρότυπα, βιβλιοθήκες και λειτουργίες εντοπισμού σφαλμάτων. Αν μιλάμε, από το 2004 έχει αναπτυχθεί για αυτούς ένα ισχυρό πακέτο λογισμικού, το AVR studio.

Πρώτες εκδόσεις

Οι πρώτες εκδόσεις του στούντιο περιελάμβαναν ένα assembler για το , μπορείτε να το εξαγάγετε από τις πρώτες συναρμολογήσεις, αλλά αργότερα αυτό το έργο εγκαταλείφθηκε και η C AVR επιλέχθηκε ως κύρια γλώσσα. Ο μεταγλωττιστής ήταν ένα πληρωμένο και πολύ σοβαρό προϊόν IAR. Μπορείτε να κάνετε λήψη του δωρεάν WINAVR· για να το κάνετε αυτό, μετά την εγκατάσταση του στούντιο πρέπει να το εγκαταστήσετε.

Σημείωση! Είναι καλύτερα να το κάνετε αυτό μόνο αφού εγκαταστήσετε το AVR studio 4 και άλλες εκδόσεις.

Το AVR studio 4 (φωτογραφία παραπάνω) προβλήθηκε για μεγάλο χρονικό διάστημα. Πολλοί προγραμματιστές μικροελεγκτών έχουν αντιμετωπίσει αυτό το πρόβλημα. Αργότερα, το IDE αναβαθμίστηκε σε AVR studio 5. Εκτός από τη διεπαφή, δεν υπήρξαν ιδιαίτερες αλλαγές και μόνο τότε η εταιρεία ανάπτυξης μετονομάστηκε στο προϊόν και άλλαξε το όνομα σε Atmel studio 6.

Το περιβάλλον AVR studio 5 υποστήριζε τους ακόλουθους μικροελεγκτές:

  • AVR32;
  • XMEGA.

Το Atmel studio 6 διέφερε σημαντικά από το AVR studio 5· οι πιο αξιοσημείωτες καινοτομίες στην έκδοση ήταν:

  1. Το Microsoft Visual Studio 2010 άρχισε να συνεργάζεται με την οικογένεια AVR.
  2. Βελτιωμένη επισήμανση σύνταξης σε σύγκριση με το AVR studio 5.
  3. Προστέθηκαν συμβουλές και αυτόματη συμπλήρωση ενός συνόλου εντολών, που επιταχύνει τη διαδικασία ανάπτυξης.
  4. Γενικά, η όλη λειτουργία του περιβάλλοντος έχει γίνει πιο αξιόπιστη.
  5. Προστέθηκε υποστήριξη για το ARM Cortex-M.
  6. Το WinAVR δεν χρειάζεται πλέον να εγκατασταθεί ξεχωριστά· το GCC εγκαθίσταται πλέον κατά τη διαδικασία εγκατάστασης, σε αντίθεση με τις νεότερες εκδόσεις.

Στο Atmel studio 6 έγινε ένα άλμα προς το καλύτερο για τον χρήστη του προγράμματος, το οποίο επηρέασε τη δημοτικότητα των οικογενειών Atmel. Ωστόσο, δεν ήταν δυνατό να επιτευχθεί επαρκής υποστήριξη για ρωσικούς χαρακτήρες στις διαδρομές αρχείων.

Τρέχουσα έκδοση – Atmel studio 7

Το περιβάλλον ανάπτυξης που χρησιμοποίησα ήταν το Visual Studio Isolated Shell 2015. αφενός, αυτή η λύση δεν υποστηρίζεται στα Windows XP, αφετέρου, αυτά τα μέτρα ελήφθησαν για τη βελτίωση τόσο της εμφάνισης του προγράμματος όσο και της λειτουργικότητάς του.

Ίσως το πιο σημαντικό είναι η προσθήκη υποστήριξης Arduino στο Atmel studio 7. Αυτό σημαίνει ότι μπορείτε να μεταβείτε από ένα σύνολο απλών σκίτσων στη χρήση όλων των συναρτήσεων C, του εντοπισμού σφαλμάτων, του προσομοιωτή MCU και άλλων λειτουργιών. Ο συνδυασμός Arduino και Atmel studio 7 έδωσε έναν νέο γύρο στην ανάπτυξη αυτής της απλής πλατφόρμας εκμάθησης.

Η μελέτη του Atmel studio με το Arduino θα δώσει την ευκαιρία να προχωρήσουμε σε μια πλήρη και παραγωγική μαεστρία και βαθύτερη γνωριμία με την καρδιά του Arduino - του μικροελεγκτή Atmega.

Επιπλέον, από την ιστοσελίδα της Atmel μπορείτε να κατεβάσετε ένα πακέτο για τη λειτουργία και τη σύνδεση της LCD. Ως παράδειγμα για το mastering, μπορείτε να χρησιμοποιήσετε την LCD 1602, υπάρχουν πολλά μαθήματα σχετικά με αυτό στο Διαδίκτυο και ο προγραμματιστής έχει 16 χαρακτήρες και 2 γραμμές διαθέσιμες στην οθόνη.

Από πού να αρχίσω να μαθαίνω;

Θα πρέπει να ξεκινήσετε, φυσικά, με την αγορά ενός προγραμματιστή. Το πιο φιλικό προς τον προϋπολογισμό είναι το USBASP. Ο προγραμματιστής USBASP δεν υποστηρίζεται στο Atmel Studio 7.


Κάντε λήψη των προγραμμάτων οδήγησης για τον προγραμματιστή και το πρόγραμμα AVRdude και για να λειτουργήσουν όλα μαζί, μπορείτε να χρησιμοποιήσετε την εντολή μέσω της γραμμής εντολών:

"avrdude -c usbasp -p atmega32 -U flash:w: όνομα του αρχείου υλικολογισμικού. γοητεύω -U fuse:w:0x6a:m -U hfuse:w:0xff:m"

και ενεργοποιήστε την υποστήριξή του δημιουργώντας ένα προφίλ στο atmel studio 7 (τίτλος – εξωτερικά εργαλεία) και στο αντικείμενο Arguments πληκτρολογήστε “-c usbasp -p atmega32 -U flash:w:$(TargetName).hex” και ούτω καθεξής για κάθε τύπου που χρησιμοποιείτε μικροελεγκτές.

Αυτός είναι ο μόνος τρόπος για να συνδέσετε το στούντιο και τον προγραμματιστή USBASP. Να είστε προσεκτικοί όταν αναβοσβήνει - μπορείτε να καταστρέψετε την υπογραφή του μικροελεγκτή και μπορεί να αποκατασταθεί μόνο με προγραμματιστή 12 V (υψηλής τάσης).

Ποια βιβλιογραφία πρέπει να χρησιμοποιήσω για εκπαίδευση;

Πρώτα απ 'όλα, κατεβάστε εγχειρίδια από την επίσημη ιστοσελίδα για κάθε μικροελεγκτή. Είναι δύσκολο να προτείνεις ένα συγκεκριμένο εγχειρίδιο, αλλά υπάρχει το «DI Halt - AVR. Εκπαιδευτικό μάθημα" μπορείτε να το χρησιμοποιήσετε - ο δημιουργός αυτού του υλικού είναι επαγγελματίας, συγγραφέας πολλών άρθρων σε διάφορους πόρους του Διαδικτύου και απλώς ένα σεβαστό άτομο σε ειδικούς κύκλους.

Έχω πει περισσότερες από μία ή δύο φορές ότι η μελέτη MK πρέπει να ξεκινά με assembler. Ένα ολόκληρο μάθημα στον ιστότοπο αφιερώθηκε σε αυτό (αν και δεν είναι πολύ συνεπές, αλλά σταδιακά το χτενίζω σε μια επαρκή εμφάνιση). Ναι, είναι δύσκολο, το αποτέλεσμα δεν θα είναι την πρώτη μέρα, αλλά θα μάθετε να καταλαβαίνετε τι συμβαίνει στο χειριστήριό σας. Θα ξέρετε πώς λειτουργεί και δεν θα αντιγράψετε τις πηγές άλλων ανθρώπων σαν μαϊμού και θα προσπαθήσετε να καταλάβετε γιατί σταμάτησε ξαφνικά να λειτουργεί. Επιπλέον, είναι πολύ πιο εύκολο για το C να δημιουργήσει κώδικα redneck που θα βγει με pitchfork την πιο ακατάλληλη στιγμή.

Δυστυχώς, όλοι θέλουν άμεσα αποτελέσματα. Έτσι αποφάσισα να πάω από την άλλη πλευρά - να κάνω ένα tutorial στο C, αλλά με το να δείχνει τα εσώρουχά του. Ένας καλός προγραμματιστής ενσωμάτωσης κρατά πάντα το υλικό του σφιχτά από το μπουλόνι, χωρίς να του επιτρέπει να κάνει ούτε ένα βήμα χωρίς άδεια. Οπότε πρώτα θα υπάρχει ο κώδικας C, μετά τι παρήγαγε ο μεταγλωττιστής και πώς λειτουργούν όλα :)

Από την άλλη, το δυνατό σημείο του C είναι η φορητότητα του κώδικα. Αν φυσικά τα γράψεις όλα σωστά. Διαχωρισμός των αλγορίθμων εργασίας και των υλοποιήσεων υλικού τους σε διαφορετικά μέρη του έργου. Στη συνέχεια, για να μεταφέρετε τον αλγόριθμο σε άλλο μικροελεγκτή, θα αρκεί να ξαναγράψετε μόνο το επίπεδο διασύνδεσης, όπου είναι γραμμένες όλες οι κλήσεις προς το υλικό, και να αφήσετε όλο τον κώδικα εργασίας ως έχει. Και, φυσικά, αναγνωσιμότητα. Ο πηγαίος κώδικας C είναι πιο κατανοητός με την πρώτη ματιά (αν και... για παράδειγμα, δεν με νοιάζει τι να δείξω - είτε είναι C είτε ASM :)), αλλά, και πάλι, αν όλα είναι γραμμένα σωστά. Θα προσέξω επίσης αυτά τα σημεία.

Ο πίνακας εντοπισμού σφαλμάτων μου θα χρησιμεύσει ως το πειραματικό υλικό στο οποίο θα εγκατασταθεί η μερίδα του λέοντος όλων των παραδειγμάτων.

Το πρώτο πρόγραμμα C για AVR

Επιλογή μεταγλωττιστή και ρύθμιση του περιβάλλοντος
Υπάρχουν πολλοί διαφορετικοί μεταγλωττιστές C για AVR:
Πρώτα από όλα αυτά IAR AVR C- αναγνωρίζεται σχεδόν σίγουρα ως ο καλύτερος μεταγλωττιστής για AVR, γιατί ο ίδιος ο ελεγκτής δημιουργήθηκε σε στενή συνεργασία μεταξύ της Atmel και ειδικών της IAR. Αλλά πρέπει να πληρώσετε για όλα. Και αυτός ο μεταγλωττιστής δεν είναι μόνο ένα ακριβό εμπορικό λογισμικό, αλλά έχει επίσης τόσο μεγάλο αριθμό ρυθμίσεων που χρειάζεται πολλή προσπάθεια για να το μεταγλωττίσετε απλά σε αυτόν. Πραγματικά δεν ανέπτυξα φιλία μαζί του· το έργο σάπιζε λόγω περίεργων σφαλμάτων στο στάδιο της σύνδεσης (αργότερα ανακάλυψα ότι ήταν μια στραβά ρωγμή).

Έρχεται το δεύτερο WinAVR GCC- ένας ισχυρός μεταγλωττιστής βελτιστοποίησης. Πλήρως ανοιχτού κώδικα, cross-platform, γενικά, όλες οι χαρές της ζωής. Επίσης, ενσωματώνεται τέλεια στο AVR Studio, επιτρέποντάς σας να κάνετε εντοπισμό σφαλμάτων ακριβώς εκεί, κάτι που είναι βολικό. Γενικά το επέλεξα.

Υπάρχει επίσης CodeVision AVR Cείναι ένας πολύ δημοφιλής μεταγλωττιστής. Έγινε δημοφιλές λόγω της απλότητάς του. Μπορείτε να λάβετε ένα πρόγραμμα εργασίας σε αυτό μέσα σε λίγα μόνο λεπτά - ο οδηγός κώδικα έναρξης το διευκολύνει πολύ, εξαλείφοντας πρότυπα για την προετοιμασία όλων των ειδών. Για να είμαι ειλικρινής, το έχω κάπως καχύποπτο - μόλις χρειάστηκε να αποσυναρμολογήσω ένα πρόγραμμα που είχε γραφτεί από αυτόν τον μεταγλωττιστή, αποδείχθηκε ότι ήταν κάποιο χάλι και όχι κώδικας. Ένας τρομερός αριθμός περιττών κινήσεων και λειτουργιών, που οδήγησαν σε σημαντικό αριθμό κώδικα και αργή απόδοση. Ωστόσο, ίσως υπήρχε σφάλμα στο DNA του ατόμου που έγραψε το αρχικό υλικολογισμικό. Επιπλέον θέλει λεφτά. Όχι τόσο όσο το IAR, αλλά αισθητό. Και σε λειτουργία επίδειξης σας επιτρέπει να γράψετε όχι περισσότερο από 2 kb κώδικα.
Φυσικά υπάρχει μια ρωγμή, αλλά αν πρόκειται να κλέψεις, είναι ένα εκατομμύριο, με την έννοια του IAR :)

Υπάρχει επίσης Image Craft AVR CΚαι MicroCαπό τη μικροηλεκτρονική. Δεν χρειάστηκε να χρησιμοποιήσω κανένα από τα δύο, αλλά S.W.G.πολύ επαινετικό MicroPascal, λένε, ένα τρομερά βολικό περιβάλλον προγραμματισμού και βιβλιοθήκες. Νομίζω ότι το MicroC δεν θα είναι χειρότερο, αλλά είναι επίσης πληρωμένο.

Όπως είπα, επέλεξα WinAVRγια τρεις λόγους: είναι δωρεάν, ενσωματώνεται στο AVR Studio και υπάρχει μόνο ένας τόνος έτοιμου κώδικα γραμμένο για αυτό για όλες τις περιπτώσεις.

Κατεβάστε λοιπόν την εγκατάσταση του WinAVR με το AVR Studio. Στη συνέχεια, το στούντιο εγκαθίσταται πρώτα και, στη συνέχεια, το WinAVR τυλίγεται από πάνω και συνδέεται με το στούντιο με τη μορφή πρόσθετου. Συνιστώ ανεπιφύλακτα να εγκαταστήσετε το WinAVR σε μια σύντομη διαδρομή, κάτι σαν C:\WinAVR, έτσι θα αποφύγετε πολλά προβλήματα με τις διαδρομές.

Δημιουργία έργου
Έτσι, το στούντιο έχει εγκατασταθεί, το C είναι βιδωμένο, ήρθε η ώρα να προσπαθήσετε να προγραμματίσετε κάτι. Ας ξεκινήσουμε με το απλό, το πιο απλό. Εκκινήστε το στούντιο, επιλέξτε ένα νέο έργο εκεί, ως μεταγλωττιστή AVR GCC και πληκτρολογήστε το όνομα του έργου.

Ανοίγει ένα πεδίο εργασίας με ένα κενό αρχείο *.c.

Τώρα δεν θα σας βλάψει να διαμορφώσετε την εμφάνιση των διαδρομών στους σελιδοδείκτες του στούντιο. Για να το κάνετε αυτό, μεταβείτε στη διεύθυνση:
Εργαλεία μενού - Επιλογές - Γενικά - Καρτέλες αρχείου και επιλέξτε "Μόνο όνομα αρχείου" από την αναπτυσσόμενη λίστα. Διαφορετικά, θα είναι αδύνατο να λειτουργήσει - η καρτέλα θα περιέχει την πλήρη διαδρομή του αρχείου και δεν θα υπάρχουν περισσότερες από δύο ή τρεις καρτέλες στην οθόνη.

Ρύθμιση έργου
Γενικά, θεωρείται κλασική η δημιουργία ενός αρχείου make στο οποίο περιγράφονται όλες οι εξαρτήσεις. Και μάλλον αυτό είναι σωστό. Αλλά για μένα, που μεγάλωσα με πλήρως ενσωματωμένα IDE όπως uVisionή AVR Studioαυτή η προσέγγιση είναι βαθιά ξένη. Ως εκ τούτου, θα το κάνω με τον τρόπο μου, τα πάντα χρησιμοποιώντας στούντιο σημαίνει.

Πιέστε το κουμπί με το γρανάζι.


Αυτές είναι οι ρυθμίσεις για το έργο σας, ή μάλλον οι ρυθμίσεις για την αυτόματη δημιουργία ενός αρχείου δημιουργίας. Στην πρώτη σελίδα πρέπει απλώς να εισαγάγετε τη συχνότητα με την οποία θα λειτουργεί το MK σας. Αυτό εξαρτάται από τα bit της ασφάλειας, οπότε υποθέτουμε ότι η συχνότητά μας είναι 8000000Hz.
Προσέξτε επίσης τη γραμμή βελτιστοποίησης. Τώρα υπάρχει -Os - αυτό είναι βελτιστοποίηση μεγέθους. Αφήστε το ως έχει προς το παρόν, τότε μπορείτε να δοκιμάσετε να παίξετε με αυτήν την παράμετρο. -Το O0 δεν είναι καθόλου βελτιστοποίηση.

Το επόμενο βήμα είναι να διαμορφώσετε τις διαδρομές. Πρώτα απ 'όλα, προσθέστε τον κατάλογο του έργου σας εκεί - θα προσθέσετε βιβλιοθήκες τρίτων εκεί. Η διαδρομή ".\" θα εμφανιστεί στη λίστα.

Το αρχείο Make δημιουργήθηκε, μπορείτε να το δείτε στον προεπιλεγμένο φάκελο του έργου σας, απλώς ρίξτε μια ματιά και δείτε τι υπάρχει εκεί.


Αυτα για τωρα. Κάντε κλικ στο OK παντού και μεταβείτε στην πηγή.

Διατύπωση του προβλήματος
Ένα κενό φύλλο χαρτιού είναι δελεαστικό να εφαρμόσετε κάποια πονηρή ιδέα, αφού το κοινό αναβοσβήνει μιας διόδου δεν λειτουργεί πλέον. Ας πάρουμε αμέσως τον ταύρο από τα κέρατα και ας εφαρμόσουμε τη σύνδεση με τον υπολογιστή - αυτό είναι το πρώτο πράγμα που κάνω.

Θα λειτουργήσει ως εξής:
Όταν φτάσει ένα ένα (κωδικός 0x31) στη θύρα COM, θα ενεργοποιήσουμε τη δίοδο και όταν φτάσει ένα μηδέν (κωδικός 0x30) σβήνει. Επιπλέον, όλα θα γίνονται σε διακοπές και η εργασία στο παρασκήνιο θα είναι το αναβοσβήσιμο μιας άλλης διόδου. Απλό και ουσιαστικό.

Συναρμολόγηση του κυκλώματος
Πρέπει να συνδέσουμε τη μονάδα μετατροπέα USB-USART στις ακίδες USART του μικροελεγκτή. Για να το κάνετε αυτό, πάρτε έναν βραχυκυκλωτήρα από δύο καλώδια και τοποθετήστε τον σταυρωτά στους πείρους. Δηλαδή, συνδέουμε το Rx του ελεγκτή στο Tx του μετατροπέα, και το Tx του μετατροπέα στο Rx του ελεγκτή.

Στο τέλος, αυτό είναι το διάγραμμα:


Δεν σκέφτομαι να συνδέσω τις υπόλοιπες ακίδες, την τροφοδοσία ή την επαναφορά, είναι τυπικό.

Κώδικας γραφής

Επιτρέψτε μου να κάνω μια κράτηση αμέσως ότι δεν θα εμβαθύνω συγκεκριμένα στην περιγραφή της ίδιας της γλώσσας C. Υπάρχει απλώς ένας τεράστιος όγκος υλικού για αυτό, που κυμαίνεται από την κλασική "Γλώσσα Προγραμματισμού C" από το K&R έως διάφορα εγχειρίδια.

Βρήκα μια τέτοια μέθοδο στο απόρρητό μου· κάποτε τη χρησιμοποίησα για να μελετήσω αυτή τη γλώσσα. Όλα εκεί είναι σύντομα, ξεκάθαρα και επί της ουσίας. Σταδιακά το συναρμολογώ και το μεταφέρω στον ιστότοπό μου.

Είναι αλήθεια ότι δεν έχουν μεταφερθεί ακόμα όλα τα κεφάλαια, αλλά νομίζω ότι δεν θα αργήσει πολύ.

Είναι απίθανο να μπορώ να το περιγράψω καλύτερα, επομένως από το εκπαιδευτικό μάθημα, αντί για μια λεπτομερή εξήγηση των λεπτοτήτων, θα παράσχω απλώς απευθείας συνδέσμους σε μεμονωμένες σελίδες αυτού του εγχειριδίου.

Προσθήκη βιβλιοθηκών.
Πρώτα απ 'όλα, προσθέτουμε τις απαραίτητες βιβλιοθήκες και κεφαλίδες με ορισμούς. Εξάλλου, η C είναι μια καθολική γλώσσα και πρέπει να του εξηγήσουμε ότι εργαζόμαστε ειδικά με το AVR, οπότε γράψτε τη γραμμή στον πηγαίο κώδικα:

1 #περιλαμβάνω

#περιλαμβάνω

Αυτό το αρχείο βρίσκεται στο φάκελο WinAVRκαι περιέχει μια περιγραφή όλων των καταχωρητών και των θυρών του ελεγκτή. Επιπλέον, όλα εκεί είναι πονηρά, με δέσμευση σε έναν συγκεκριμένο ελεγκτή, ο οποίος μεταδίδεται από τον μεταγλωττιστή μέσω φτιαχνω, κανωαρχείο στην παράμετρο MCUκαι με βάση αυτή τη μεταβλητή, ένα αρχείο κεφαλίδας συνδέεται με το έργο σας με μια περιγραφή των διευθύνσεων όλων των θυρών και των μητρώων για τον συγκεκριμένο ελεγκτή. Ουάου! Χωρίς αυτό, είναι επίσης δυνατό, αλλά τότε δεν θα μπορείτε να χρησιμοποιήσετε συμβολικά ονόματα μητρώου όπως SREG ή UDR και θα πρέπει να θυμάστε τη διεύθυνση του καθενός όπως "0xC1", κάτι που θα σας προκαλέσει πονοκέφαλο.

Η ίδια η ομάδα #περιλαμβάνω<имя файла> σας επιτρέπει να προσθέσετε τα περιεχόμενα οποιουδήποτε αρχείου κειμένου στο έργο σας, για παράδειγμα, ένα αρχείο με περιγραφή συναρτήσεων ή ένα κομμάτι άλλου κώδικα. Και για να μπορέσει η οδηγία να βρει αυτό το αρχείο, καθορίσαμε τη διαδρομή προς το έργο μας (ο κατάλογος WinAVR είναι ήδη καταχωρημένος εκεί από προεπιλογή).

Κύρια λειτουργία.
Ένα πρόγραμμα C αποτελείται εξ ολοκλήρου από συναρτήσεις. Μπορούν να φωλιαστούν και να καλούνται μεταξύ τους με οποιαδήποτε σειρά και με διαφορετικούς τρόπους. Κάθε συνάρτηση έχει τρεις απαιτούμενες παραμέτρους:

  • Η επιστρεφόμενη τιμή είναι π.χ. αμαρτία (x)επιστρέφει την τιμή του ημίτου του x. Όπως στα μαθηματικά, εν ολίγοις.
  • Οι μεταδιδόμενες παράμετροι είναι οι ίδιες X.
  • Σώμα λειτουργίας.

Όλες οι τιμές που μεταδίδονται και επιστρέφονται πρέπει να είναι κάποιου τύπου, ανάλογα με τα δεδομένα.

Κάθε πρόγραμμα C πρέπει να περιέχει μια συνάρτηση κύριοςως σημείο εισόδου στο κύριο πρόγραμμα, διαφορετικά δεν είναι καθόλου C :). Με την παρουσία του main στον πηγαίο κώδικα κάποιου άλλου από ένα εκατομμύριο αρχεία, μπορείτε να καταλάβετε ότι αυτό είναι το κύριο μέρος του προγράμματος, όπου ξεκινούν τα πάντα. Ας ρωτήσουμε λοιπόν:

1 2 3 4 5 int main(void) (επιστροφή 0 ;)

int main(void) (επιστροφή 0;)

Αυτό ήταν, το πρώτο πιο απλό πρόγραμμα έχει γραφτεί, δεν πειράζει που δεν κάνει τίποτα, μόλις ξεκινήσαμε.

Ας καταλάβουμε τι κάναμε.
ενθΑυτός είναι ο τύπος δεδομένων που επιστρέφει η κύρια συνάρτηση.

Φυσικά, σε μικροελεγκτή κύριοςκαταρχήν τίποτα δεν μπορεί να επιστραφεί και θεωρητικά θα έπρεπε να υπάρχει κενό κύριο (κενό), αλλά το GCC έχει σχεδιαστεί αρχικά για υπολογιστή και εκεί το πρόγραμμα μπορεί να επιστρέψει την τιμή στο λειτουργικό σύστημα μετά την ολοκλήρωσή του. Ως εκ τούτου GCC σε κενό κύριο (κενό)ορκίζεται στην Προειδοποίηση.

Αυτό δεν είναι σφάλμα, θα λειτουργήσει, αλλά δεν μου αρέσουν οι προειδοποιήσεις.

κενόςαυτός είναι ο τύπος δεδομένων που διαβιβάζουμε στη συνάρτηση, σε αυτήν την περίπτωση κύριοςεπίσης δεν μπορεί να δεχτεί τίποτα από έξω, επομένως κενός- ένα ομοίωμα. Ένα στέλεχος χρησιμοποιείται όταν δεν χρειάζεται να μεταδοθεί ή να επιστρέψει οτιδήποτε.

Εδώ είναι { } Τα σγουρά τιράντες είναι ένα μπλοκ προγράμματος, σε αυτήν την περίπτωση το σώμα μιας συνάρτησης κύριος, ο κωδικός θα βρίσκεται εκεί.

ΕΠΙΣΤΡΟΦΗ- αυτή είναι η τιμή επιστροφής που θα επιστρέψει η κύρια συνάρτηση με την ολοκλήρωση, αφού έχουμε ένα int, δηλαδή έναν αριθμό, τότε πρέπει να επιστρέψουμε έναν αριθμό. Αν και αυτό δεν έχει νόημα, γιατί... στον μικροελεγκτή, δεν μπορούμε να πάμε πουθενά μόνο από το κεντρικό. Επιστρέφω μηδενικό. Γιατί δεν πειράζει. Αλλά ο μεταγλωττιστής είναι συνήθως έξυπνος και δεν δημιουργεί κώδικα για αυτήν την περίπτωση.
Αν και, αν είναι διεστραμμένο, τότε από κύριοςΜπορείτε να μεταβείτε στο MK - για παράδειγμα, να πέσετε στην ενότητα του bootloader και να το εκτελέσετε, αλλά αυτό θα απαιτήσει επεξεργασία χαμηλού επιπέδου με το υλικολογισμικό προκειμένου να διορθωθούν οι διευθύνσεις μετάβασης. Παρακάτω θα δείτε μόνοι σας και θα καταλάβετε πώς να το κάνετε. Για τι? Αυτή είναι μια άλλη ερώτηση, στο 99,999% των περιπτώσεων αυτό δεν είναι απαραίτητο :)

Το κάναμε και προχωρήσαμε. Ας προσθέσουμε μια μεταβλητή, δεν τη χρειαζόμαστε πραγματικά και δεν έχει νόημα να εισάγουμε μεταβλητές χωρίς αυτήν, αλλά μαθαίνουμε. Αν προστεθούν μεταβλητές μέσα στο σώμα μιας συνάρτησης, τότε είναι τοπικές και υπάρχουν μόνο σε αυτή τη συνάρτηση. Όταν βγείτε από τη συνάρτηση, αυτές οι μεταβλητές διαγράφονται και η μνήμη RAM εκχωρείται για πιο σημαντικές ανάγκες. .

1 2 3 4 5 6 int main(void) (ανυπόγραφο char i; επιστροφή 0 ;)

int main(void) (ανυπόγραφο char i; επιστροφή 0; )

ανυπόγραφοσημαίνει ανυπόγραφο. Το γεγονός είναι ότι στη δυαδική αναπαράσταση, το πιο σημαντικό bit εκχωρείται στο πρόσημο, πράγμα που σημαίνει ότι ο αριθμός +127/-128 χωράει σε ένα byte (char), αλλά εάν το πρόσημο απορριφθεί, θα χωρέσει από το 0 έως το 255. Συνήθως το σημάδι δεν χρειάζεται. Έτσι ανυπόγραφο.
Εγώείναι απλώς ένα όνομα μεταβλητής. ΟΧΙ πια.

Τώρα πρέπει να αρχικοποιήσουμε τις θύρες και UART. Φυσικά, μπορείτε να πάρετε και να συνδέσετε τη βιβλιοθήκη και να καλέσετε κάποιο είδος UartInit(9600). αλλά τότε δεν θα ξέρετε τι πραγματικά συνέβη.

Κάνουμε αυτό:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int main(void ) ( ανυπόγραφο char i; #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1)#define HI(x) ((x)>>8) #define LO(x) ((x)& 0xFF) UBRRL = LO(bauddivider) ; UBRRH = HI(bauddivider) ; UCSRA = 0 ; UCSRB = 1<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; }

int main(void) ( ανυπόγραφο char i; #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1) #define HI(x) ((x)>>8) #define LO( x) ((x)& 0xFF) UBRRL = LO(bauddivider); UBRRH = HI(bauddivider); UCSRA = 0; UCSRB = 1<

Τρομακτικός? Στην πραγματικότητα, υπάρχουν μόνο πέντε τελευταίες γραμμές πραγματικού κώδικα. Ολα όσα #καθορίζωΕίναι μια γλώσσα μακροεντολών προεπεξεργαστή. Σχεδόν τα ίδια πράγματα όπως στο Assembly, αλλά η σύνταξη είναι ελαφρώς διαφορετική.

Θα διευκολύνουν τις συνήθεις πράξεις σας για τον υπολογισμό των απαραίτητων συντελεστών. Στην πρώτη γραμμή λέμε ότι αντί XTALμπορείτε να αντικαταστήσετε με ασφάλεια το 8000000 και μεγάλο- ένδειξη του τύπου, λέγοντας long είναι η συχνότητα ρολογιού του επεξεργαστή. Το ίδιο baudrate— συχνότητα μετάδοσης δεδομένων μέσω UART.

bauddividerήδη πιο περίπλοκο, αντί για αυτό θα αντικατασταθεί η έκφραση που υπολογίζεται χρησιμοποιώντας τον τύπο από τους δύο προηγούμενους.
Καθώς και L.O.Και ΓΕΙΑτο χαμηλό και το υψηλό byte θα ληφθούν από αυτό το αποτέλεσμα, επειδή Προφανώς μπορεί να μην χωράει σε ένα byte. ΣΕ ΓΕΙΑΤο X (η παράμετρος εισόδου μακροεντολής) μετατοπίζεται οκτώ φορές προς τα δεξιά, με αποτέλεσμα να απομένει μόνο το πιο σημαντικό byte. Και στο L.O.κάνουμε λίγο AND με τον αριθμό 00FF, ως αποτέλεσμα θα παραμείνει μόνο το χαμηλό byte.

Οπότε όλα όσα γίνονται είναι σαν #καθορίζωμπορείτε να το πετάξετε με ασφάλεια και να υπολογίσετε τους απαραίτητους αριθμούς σε μια αριθμομηχανή και να τους εισαγάγετε αμέσως στις γραμμές UBBRL = …. και UBBRH = …..

Μπορώ. Αλλά! Κάνε αυτό ΑΠΟΛΥΤΑ ΑΔΥΝΑΤΟ!

Θα λειτουργήσει έτσι ή αλλιώς, αλλά θα έχετε τα λεγόμενα μαγικοί αριθμοί- αξίες που λαμβάνονται από το πουθενά και για άγνωστους λόγους, και αν ανοίξετε ένα τέτοιο έργο σε μερικά χρόνια, θα είναι πολύ δύσκολο να καταλάβετε ποιες είναι αυτές οι αξίες. Ακόμα και τώρα, αν θέλετε να αλλάξετε την ταχύτητα ή τη συχνότητα του χαλαζία, όλα θα πρέπει να υπολογιστούν ξανά, αλλά αλλάξατε μερικούς αριθμούς στον κωδικό και αυτό είναι. Γενικά, αν δεν θέλετε να χαρακτηριστείτε ως κωδικοποιητής, κάντε τον κώδικά σας έτσι ώστε να είναι ευανάγνωστος, κατανοητός και εύκολος στην τροποποίηση.

Τότε όλα είναι απλά:
Όλα αυτά τα “UBRRL and Co” είναι καταχωρητές διαμόρφωσης του πομπού UART με τη βοήθεια του οποίου θα επικοινωνούμε με τον κόσμο. Και τώρα τους έχουμε εκχωρήσει τις απαιτούμενες τιμές, ρυθμίζοντας τις στην επιθυμητή ταχύτητα και λειτουργία.

Τύπος εγγραφής 1<Σημαίνει το εξής: πάρτε 1 και βάλτε το στη θέση του RXENσε byte. RXENαυτό είναι το 4ο bit του μητρώου UCSRB, Ετσι 1<σχηματίζει τον δυαδικό αριθμό 00010000, TXEN- αυτό είναι το 3ο bit, και 1<θα δώσει 00001000. Μονό "|" είναι bitwise Ή, άρα 00010000 | 00001000 = 00011000. Με τον ίδιο τρόπο, τα υπόλοιπα απαραίτητα bit διαμόρφωσης ρυθμίζονται και προστίθενται στο γενικό σωρό. Ως αποτέλεσμα, ο αριθμός που συλλέγεται καταγράφεται στο UCSRB. Περισσότερες λεπτομέρειες περιγράφονται στο φύλλο δεδομένων του MK στην ενότητα USART. Ας μην παρασυρόμαστε λοιπόν από τεχνικές λεπτομέρειες.

Έγινε, ήρθε η ώρα να δούμε τι έγινε. Κάντε κλικ στη μεταγλώττιση και ξεκινήστε την εξομοίωση (Ctrl+F7).

Εντοπισμός σφαλμάτων
Όλα τα είδη των γραμμών προόδου έτρεχαν, το στούντιο άλλαξε και ένα κίτρινο βέλος εμφανίστηκε κοντά στην είσοδο της κύριας λειτουργίας. Εδώ εκτελείται ο επεξεργαστής και η προσομοίωση διακόπτεται.

Το γεγονός είναι ότι αρχικά, στην πραγματικότητα, ήταν στη γραμμή UBRRL = LO(bauddivider). Εξάλλου, αυτό που έχουμε στο ορισμό δεν είναι κώδικας, αλλά απλώς προκαταρκτικοί υπολογισμοί, γι' αυτό και ο προσομοιωτής είναι λίγο βαρετός. Αλλά τώρα κατάλαβε, η πρώτη οδηγία έχει ολοκληρωθεί και αν σκαρφαλώσετε στο δέντρο Προβολή I/O, στην ενότητα USART και κοιτάξτε το byte UBBRL εκεί, θα δείτε ότι η τιμή είναι ήδη εκεί! 0x33.

Πηγαίνετε ένα βήμα παραπέρα. Δείτε πώς αλλάζουν τα περιεχόμενα του άλλου μητρώου. Λοιπόν, διαβάστε τα όλα, δώστε προσοχή στο γεγονός ότι όλα τα υποδεικνυόμενα bit έχουν οριστεί όπως σας είπα και ρυθμίζονται ταυτόχρονα για ολόκληρο το byte. Δεν θα πάει άλλο από το Return - το πρόγραμμα τελείωσε.

Ανοιγμα
Τώρα επαναφέρετε την προσομοίωση στο μηδέν. Κάντε κλικ εκεί Επαναφορά (Shift+F5). Ανοίξτε την αποσυναρμολογημένη λίστα, τώρα θα δείτε τι πραγματικά συμβαίνει στον ελεγκτή. Προβολή -> Αποσυναρμολόγηση. Και όχι ΓΙΑΑΑΑΑΑ!!! Συμβολομεταφράστης!!! ΦΡΙΚΗ!!! ΚΑΙ ΕΙΝΑΙ ΑΠΑΡΑΙΤΗΤΟ. Έτσι ώστε αργότερα, όταν κάτι πάει στραβά, να μην είστε ανόητοι στον κώδικα και να μην κάνετε κουτό ερωτήσεις στα φόρουμ, αλλά αμέσως να μπείτε στα κότσια και να δείτε πού έχετε κολλήσει. Δεν υπάρχει τίποτα τρομακτικό εκεί.

Πρώτα θα υπάρχουν κορυφές από τη σειρά:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +00000000: 940C002A JMP 0x0000002A Jump +00000002: 940C0034 JMP 0x00000034 Jump +00000004: 940C0034 JMP 0x3000000C 0x00000034 Jump +00000008: 940C0034 JMP 0x00000034 Jump +0000000A: 940C0034 JMP 0x00000034 Jump +00000000C: 940MP000C: 940MP00C 0000000E: 940C0034 JMP 0x00000034 Jump +00000010: 940C0034 JMP 0x00000034 Jump +00000012: 940C0034 JMP 0x0000000C Jump : 940C0034 JMP 0x00000034 Jump +0000001E: 940C0034 JMP 0x00000034 Jump +00000020: 940C0034 JMP 0x00000034 JMP 0x00000034 JMP 0x00000034 JMP 0x00000034 άλμα +00000034 άλμα 0x00000034 940C0034 JMP 0x0000000034 34 Jump +00000024: 940C0034 JMP 0x00000034 Jump +00000026: 940C0034 JMP 0x00000034 Jump +00000028: 940C0034 Jump 0x00000026

00000000: 940C002A JMP 0x0000002A Jump +00000002: 940C0034 JMP 0x00000034 Jump +00000004: 940C0034 JMP 0x00000000C 0x00000034 Jump +00000008: 940C0034 JMP 0x00000034 Jump +0000000A: 940C0034 JMP 0x00000034 Jump +00000000C: 940000000C: 94000000C: 94000000C : 940C0034 JMP 0x00000034 Jump +00000010: 940C0034 JMP 0x00000034 Jump +00000012: 940C0034 JMP 0x00000034 JMP 0x00000034 JMP 0x00000034 άλμα 0x00000034 JMP 0x00000034 άλμα 0x00000034 940C0034 34 Jump +00000016: 940C0034 JMP 0x00000034 Jump +00000018: 940C0034 JMP 0x00000034 Jump +0000001A: 940C0034 Jump +00000034 Jump +00000018 : 940C0034 JMP 0x00000034 Jump +0000001E: 940C0034 JMP 0x00000034 Jump +00000020: 940C0034 JMP 0x00000034 JMP 0x00000034 JMP 0x00000034 JMP 0x00000034 άλμα +00000034 άλμα 0x00000034 940C0034 JMP 0x0000000034 34 Jump +00000024: 940C0034 JMP 0x00000034 Jump +00000026: 940C0034 JMP 0x00000034 Jump +00000028: 940C0034 Jump 0x00000026

Αυτός είναι ο διανυσματικός πίνακας διακοπής. Θα επιστρέψουμε σε αυτό αργότερα, αλλά προς το παρόν κοιτάξτε και θυμηθείτε ότι υπάρχει. Η πρώτη στήλη είναι η διεύθυνση του κελιού flash στο οποίο βρίσκεται η εντολή, η δεύτερη είναι ο κώδικας εντολής, η τρίτη είναι η εντολή μνημονική, η ίδια οδηγία συναρμολόγησης, η τρίτη είναι οι τελεστές της εντολής. Λοιπόν, αυτόματο σχόλιο.
Έτσι, αν κοιτάξετε, υπάρχουν συνεχείς μεταβάσεις. Και ο κώδικας εντολής JMP είναι τέσσερα byte, περιέχει τη διεύθυνση άλματος γραμμένη προς τα πίσω - το χαμηλό byte στη χαμηλή διεύθυνση και τον κωδικό εντολής άλματος 940C

0000002B: BE1F OUT 0x3F, R1 Έξοδος σε θέση I/O

Καταγραφή αυτού του μηδενός στη διεύθυνση 0x3F. Εάν κοιτάξετε τη στήλη προβολής εισόδου/εξόδου, θα δείτε ότι η διεύθυνση 0x3F είναι η διεύθυνση του καταχωρητή SREG - ο καταχωρητής σημαίας του ελεγκτή. Εκείνοι. επαναφέρουμε το SREG για να τρέξει το πρόγραμμα σε μηδενικές συνθήκες.

1 2 3 4 +0000002C: E5CF LDI R28,0x5F Φόρτωση άμεση +0000002D: E0D4 LDI R29,0x04 Φόρτωση άμεση +0000002E: BFDE OUT 0x3E,R29 Έξοδος σε θέση I/O +000000002F Θέση I/O +0000000002F

0000002C: E5CF LDI R28,0x5F Άμεση φόρτωση +0000002D: E0D4 LDI R29,0x04 Άμεση φόρτωση +0000002E: BFDE OUT 0x3E,R29 Έξοδος σε θέση I/O +000000002F Θέση I/O +0000000002F

Αυτό φορτώνει τον δείκτη στοίβας. Δεν μπορείτε να φορτώσετε απευθείας σε καταχωρητές I/O, μόνο μέσω ενός ενδιάμεσου καταχωρητή. Επομένως, πρώτα LDI σε ενδιάμεσο, και μετά από εκεί OUT στο I/O. Θα σας πω επίσης περισσότερα για τη στοίβα αργότερα. Προς το παρόν, να ξέρετε ότι πρόκειται για μια δυναμική περιοχή μνήμης που κρέμεται στο τέλος της μνήμης RAM και αποθηκεύει διευθύνσεις και ενδιάμεσες μεταβλητές. Τώρα έχουμε υποδείξει από πού θα ξεκινά η στοίβα μας.

00000032: 940C0041 JMP 0x00000041 Άλμα

Μεταβείτε στο τέλος του προγράμματος και εκεί έχουμε μια απαγόρευση των διακοπών και του σφιχτού looping στον εαυτό του:

1 2 +00000041: 94F8 CLI Καθολική διακοπή Απενεργοποίηση +00000042: CFFF RJMP PC-0x0000 Σχετικό άλμα

00000041: 94F8 CLI Global Interrupt Disable +00000042: CFFF RJMP PC-0x0000 Σχετικό άλμα

Αυτό συμβαίνει σε περίπτωση απρόβλεπτων περιστάσεων, όπως η έξοδος από την κύρια λειτουργία. Ο ελεγκτής μπορεί να βγει από έναν τέτοιο βρόχο είτε με επαναφορά υλικού, είτε, πιο πιθανό, με επαναφορά από έναν φύλακα. Λοιπόν, ή, όπως είπα παραπάνω, διορθώστε το στο εξάγωνο πρόγραμμα επεξεργασίας και καλπάστε όπου θέλει η καρδιά μας. Σημειώστε επίσης ότι υπάρχουν δύο τύποι μεταβάσεων: JMP και RJMP· ο πρώτος είναι μια άμεση μετάβαση σε μια διεύθυνση. Καταλαμβάνει τέσσερα byte και μπορεί να μεταπηδήσει απευθείας σε ολόκληρη την περιοχή της μνήμης. Ο δεύτερος τύπος μετάβασης είναι RJMP - σχετικός. Η εντολή του παίρνει δύο byte, αλλά μετακινείται από την τρέχουσα θέση (διεύθυνση) 1024 βήματα προς τα εμπρός ή προς τα πίσω. Και οι παράμετροί του υποδεικνύουν τη μετατόπιση από το τρέχον σημείο. Χρησιμοποιείται πιο συχνά γιατί καταλαμβάνει το μισό χώρο σε ένα flush, και σπάνια χρειάζονται μεγάλες μεταβάσεις.

1 +00000034: 940C0000 JMP 0x00000000 Άλμα

00000034: 940C0000 JMP 0x00000000 Άλμα

Και αυτό είναι ένα άλμα στην αρχή του κώδικα. Μια επανεκκίνηση του είδους. Μπορείτε να ελέγξετε ότι όλα τα διανύσματα πηδούν εδώ. Το συμπέρασμα από αυτό είναι ότι εάν ενεργοποιήσετε τώρα τις διακοπές (είναι απενεργοποιημένες από προεπιλογή) και συμβεί η διακοπή σας αλλά δεν υπάρχει χειριστής, τότε θα υπάρξει επαναφορά λογισμικού - το πρόγραμμα θα επιστρέψει στην αρχή.

Λειτουργία κύρια. Όλα είναι παρόμοια, δεν χρειάζεται καν να τα περιγράψεις. Απλώς κοιτάξτε τον ήδη υπολογισμένο αριθμό που εισάγεται στα μητρώα. Ο μεταγλωττιστής προεπεξεργαστής ροκάρει!!! Όχι λοιπόν «μαγικοί» αριθμοί!

1 2 3 4 5 6 7 8 9 10 11 12 <

00000036: E383 LDI R24,0x33 Φόρτωση άμεσης +00000037: B989 OUT 0x09,R24 Έξοδος στη θέση I/O 15: UBRRH = HI(bauddivider); +00000038: BC10 OUT 0x20,R1 Έξοδος σε θέση I/O 16: UCSRA = 0; +00000039: B81B OUT 0x0B, R1 Έξοδος στη θέση I/O 17: UCSRB = 1<

Και εδώ είναι το σφάλμα:

1 2 3 +0000003E: E080 LDI R24.0x00 Φόρτωση άμεση +0000003F: E090 LDI R25.0x00 Φόρτωση άμεση +00000040: 9508 RET Επιστροφή υπορουτίνας

0000003E: E080 LDI R24.0x00 Φόρτωση άμεση +0000003F: E090 LDI R25.0x00 Φόρτωση άμεση +00000040: 9508 RET Επιστροφή υπορουτίνας

Το ερώτημα είναι γιατί ο μεταγλωττιστής προσθέτει τέτοιες κορυφές; Και αυτό δεν είναι τίποτα άλλο από το Return 0, ορίσαμε τη συνάρτηση ως int main(void) και έτσι σπαταλήσαμε άλλα τέσσερα byte για τίποτα :) Και αν κάνετε void main(void) τότε θα παραμείνει μόνο το RET, αλλά θα εμφανιστεί μια προειδοποίηση , ότι η κύρια λειτουργία μας δεν επιστρέφει τίποτα. Γενικά, κάνε ό,τι θέλεις :)

Δύσκολος? Προφανώς όχι. Κάντε κλικ στην εκτέλεση βήμα προς βήμα σε λειτουργία αποσυναρμολόγησης και δείτε πώς ο επεξεργαστής εκτελεί μεμονωμένες οδηγίες, τι συμβαίνει με τους καταχωρητές. Πώς γίνεται η κίνηση μέσω εντολών και ο τελικός βρόχος;

Συνέχεια σε λίγες μέρες...

Εκτός κορυφής:
Αλεξέι78Δημιούργησα μια προσθήκη για τον Firefox που διευκολύνει την πλοήγηση στον ιστότοπο και το φόρουμ μου.
Συζήτηση και λήψη,

Το Atmel Studio είναι μια ολοκληρωμένη πλατφόρμα ανάπτυξης που παρέχει τη δυνατότητα σχεδίασης και εντοπισμού σφαλμάτων εφαρμογών που έχουν αναπτυχθεί για μικροελεγκτές Atmel με βάση την αρχιτεκτονική επεξεργαστή της σειράς ARM Cortex-M. Το Atmel Studio είναι ένα απρόσκοπτο, εύχρηστο περιβάλλον που παρέχει τη δυνατότητα εντοπισμού σφαλμάτων και δημιουργίας εφαρμογών που δημιουργούνται σε C/C++ ή γλώσσα assembly. Διαθέτει μια ενσωματωμένη ογκώδη βιβλιοθήκη με εντελώς δωρεάν πηγαίο κώδικα Atmel Software Framework, ο οποίος περιλαμβάνει περισσότερα από 1.600 έργα για αρχιτεκτονικές ARM και AVR. Η ύπαρξη μιας τέτοιας βιβλιοθήκης είναι ένα μεγάλο μπόνους για κάθε προγραμματιστή. Αυτό το IDE μπορεί να χρησιμοποιηθεί για τον προγραμματισμό μιας μεγάλης ποικιλίας μικροελεγκτών που βασίζονται σε AVR, καθώς και μικροελεγκτών flash που βασίζονται σε Atmel SAM3 που χρησιμοποιούν πυρήνες Cortex-M3, Cortex-M4.

Το Atmel Studio περιλαμβάνει επίσης εργαλεία που θα κάνουν τη ζωή κάθε προγραμματιστή πολύ πιο εύκολη. Η πλατφόρμα περιλαμβάνει λύσεις όπως το Atmel Spaces και το Atmel Gallery. Η Atmel Gallery είναι ένα ηλεκτρονικό κατάστημα εργαλείων ανάπτυξης και ενσωματωμένου λογισμικού. Το Atmel Spaces είναι ένας χώρος που βασίζεται σε σύννεφο για συνεργατική ανάπτυξη και αποθήκευση αρχείων έργου υλικού και λογισμικού για μικροελεγκτές Atmel.

Βασικά Χαρακτηριστικά και Λειτουργίες

  • είναι ένα εντελώς δωρεάν ολοκληρωμένο περιβάλλον ανάπτυξης.
  • υποστηρίζει γλώσσες C/C++ και Assembler.
  • συνοδεύεται από λεπτομερή τεκμηρίωση·
  • Περιλαμβάνει μια εκτενή βιβλιοθήκη με παραδείγματα πηγαίου κώδικα για διάφορες εφαρμογές.
  • σχεδιασμένο για προγραμματισμό μικροελεγκτών Atmel.

Ειδικές απαιτήσεις

  • Συχνότητα ρολογιού επεξεργαστή 1,6 GHz και άνω.
  • για συστήματα 32 bit από 1 GB μνήμης RAM.
  • για συστήματα 64-bit από 2 GB μνήμης RAM.
  • Όταν εκτελείται σε εικονική μηχανή, συνιστάται επιπλέον 512 MB μνήμης RAM.
  • 6 GB ελεύθερου χώρου στον σκληρό δίσκο.

Τι νέο υπάρχει σε αυτή την έκδοση;

7.0.790 (25.02.2016)

  • προστέθηκε υποστήριξη για εκτεταμένο πρόγραμμα εντοπισμού σφαλμάτων (EDBG).
  • προστέθηκε υποστήριξη για προφίλ ρυθμίσεων διεπαφής. Μπορείτε να κάνετε εναλλαγή μεταξύ προφίλ χρησιμοποιώντας τα πλήκτρα στον πίνακα ρυθμίσεων.
  • πρόσθεσε τη δυνατότητα εισαγωγής βιβλιοθηκών σε έργα που είχαν εισαχθεί προηγουμένως. Προστέθηκε υποστήριξη για τα Arduino Zero και Zero Pro.
  • Η παράλληλη κατασκευή είναι πλέον ενεργοποιημένη από προεπιλογή.
  • ενημερωμένο υλικολογισμικό για το Xplained Mini.
  • Η λειτουργία "Εμφάνιση όλων των αρχείων" στο Solution Explorer έχει διορθωθεί.