τμήμα Auto πολύ μεγάλο

M

Maverickmax

Guest
Γεια

Έχω να μάθουν να χρησιμοποιούν 128X64 LCD module με AT89C51 και έχω χρησιμοποιήσει FastLCD για τη μετατροπή bmp σε έναν πίνακα από bytes.

Έχω χρησιμοποιήσει τον πίνακα του κωδικούς μου και προσπάθησε να καταρτίσει το uisng το λογισμικό Keil.Παίρνω το αποτέλεσμα - τμήμα auto πάρα πολύ μεγάλο.

Πώς να θέσει όλα τα bytes σε κωδικούς μου για την εικόνα στην οθόνη LCD 128X64 μονάδα μου.

Δεν το καταλαβαίνω.Ποιο είναι το πρόβλημα;

Maverick MaxΠροστίθενται μετά από 17 λεπτά:Βρήκα τις πληροφορίες για σφάλμα, αλλά δεν καταλαβαίνω.Μπορεί κάποιος να φροντίσει να το εξηγήσει σε μένα;

Σφάλμα C241
Περίληψη

*** Λάθος C241
Auto Segment Too Large

Η περιγραφή του χώρου που απαιτείται για την τοπική αντικειμένων υπερβαίνει το μοντέλο που εξαρτώνται κατ 'ανώτατο όριο.Το μέγιστο μέγεθος τμήμα ορίζεται ως εξής: SMALL 128 bytes COMPACT 256 ΜΕΓΑΛΟ bytes 65535 bytes

http://www.keil.com/support/man/docs/c51/c51_c241.htm

Μήπως αυτό σημαίνει ότι οι κωδικοί είναι πάρα πολύ μεγάλο δρόμο για μικροελεγκτή μου;

Maverick Max

 
Έχω επισυνάπτεται κωδικούς μου εδώ για να το ελέγξουμε.

Δεδομένου AT89C51 μου έλλειψη επαρκούς μνήμης δεδομένων, κάνει κάποιος ξέρει 8051 έχει 4k ή περισσότερη μνήμη δεδομένων;

Maverick Max
Λυπούμαστε, αλλά θα πρέπει να συνδεθείτε για να δείτε το συνημμένο

 
Γεια

Μήπως AT89S8252 έχει επαρκή μνήμη για την αποθήκευση δεδομένων 512 bytes;

Cuz είμαι λίγο συγχέεται με 2Κ Bytes EEPROM 256X8 και εσωτερική μνήμη RAM!

Πώς στο καλό μπορώ να φυλάσσεται εκεί;Maverick Max

<img src="http://www.edaboard.com/images/smiles/icon_rolleyes.gif" alt="Rolling Eyes" border="0" />
 
Γεια σου,
const tByte dot_0 [] otherwise dot_o[] will be placed into ram ...

σε write_display.c αντικαταστήσει const tByte dot_0 [] με tByte const κωδικό
dot_0 [] αλλιώς dot_o [] θα πρέπει να τοποθετούνται σε ram ...

hope this helps

 
Γεια C-man

Κωδικός Δεν έχω ακούσει »πριν.Μπορείτε σας παρακαλώ να εξηγήσετε γιατί η χρήση «κώδικα»;

I coud δεν βρίσκουν «κώδικα» στα βιβλία Γ μου, όπως είναι ο απαραίτητος οδηγός για την Γ και Ε Οδηγός για αρχάριους!

Όταν κωδικός στο καλό »προέρχεται από;!

<img src="http://www.edaboard.com/images/smiles/icon_cry.gif" alt="Crying or Very sad" border="0" />Maverick Max

 
Αυτό είναι το rom C51 εγχειρίδιο:
3
Ρητή Χαρακτηρίσθηκε Τύποι μνήμης
Με την προσθήκη μιας specifier τύπο μνήμης στη μεταβλητή δήλωση, μπορείτε
προσδιορίζουν μεταβλητές όπου αποθηκεύονται.
Ο παρακάτω πίνακας συνοψίζει τη διαθέσιμη μνήμη τύπου τεχνικών προδιαγραφών.
Μνήμη Τύπος Περιγραφή
Κωδικός μνήμη Πρόγραμμα (64 KBytes)? πρόσβαση opcode MOVC @ A DPTR.
δεδομένων Άμεσα addressable εσωτερική μνήμη δεδομένων? γρηγορότερη πρόσβαση σε μεταβλητές
(128 bytes).
Έμμεσα idata addressable εσωτερική μνήμη δεδομένων? πρόσβαση σε όλο το εσωτερικό
χώρου διευθύνσεων (256 bytes).
bdata Bit-addressable εσωτερική μνήμη δεδομένων? επιτρέπει μικτή bit και byte πρόσβασης
(16 bytes).
xdata μνήμη Εξωτερικές δεδομένων (64 KBytes)? πρόσβαση opcode MOVX @ DPTR.
pdata Paged (256 bytes) εξωτερική μνήμη δεδομένων? πρόσβαση opcode MOVX @ Rn.
Όπως και με την υπογραφή και χωρίς υπογραφή χαρακτηριστικά, που μπορεί να περιλαμβάνει μνήμη τύπου
τεχνικών προδιαγραφών στη δήλωση μεταβλητών.

με τις καλύτερες ευχές

 
Εντάξει ..Θα προσπαθήσω να εξηγήσει ..Η 51 είναι ένα MCU που διαθέτει χώρους μνήμη ..CODE, DATA, IDATA, XDATA ΚΑΙ PDATA ..όταν δημιουργείτε μια μεταβλητή (ένα char ή μια σειρά) έχετε να πείτε το μεταγλωττιστή όπου κατά την οποία ένα για να το πω!
τα 51 είναι μια δυσνόητη MCU. Έτσι, όταν πρόκειται για μεγάλα προγράμματα θα πρέπει να γνωρίζετε τον αριθμό των μεταβλητών.
Παράδειγμα: Ας πούμε ότι έχετε δημιουργήσει μεταβλητές άνω των 500!.. καλά τώρα έχετε να custumize!
έχετε μόνο 128 - εσωτερική μητρώα στο τμήμα ΔΕΔΟΜΕΝΑ ..έτσι θα επηρεάσει εδώ τα πλέον χρησιμοποιούμενα μεταβλητές, αυτές που απαιτούν ταχεία πρόσβαση. Έχετε ακόμη 128 bytes της μνήμης RAM στο τμήμα IDATA. λοιπόν που εδώ το δεύτερο μεταβλητές σε προτεραιότητα.Finnaly η XDATA είναι η εξωτερική μνήμη RAM ΤΟΜΕΑ ..έχετε μέχρι 64K χώρο.Την προϋπόθεση ότι έχετε σωματικά ότι RAM ..μερικές MICROS έχουν 2k, 8k ή περισσότερο, Ελέγξτε το φύλλο δεδομένων.
Τώρα η προσοχή πρέπει να καταβάλλεται όταν ασχολείται με όλα αυτά τα κενά μνήμης.
επειδή δεν μπορείτε να το κάνετε αυτό:

xdata char * myram_ptr?
idtata char * myidata_ptr?
char * mydata_ptr? <- deafult πηγαίνει στα δεδομένα είναι τα ίδια όπως: στοιχεία char * mydata_ptr?
char κωδικό * mycode_ptr?
pdata char * mypdata_ptr

* mycode_ptr = * myram_ptr ή οποιοδήποτε συνδυασμό των παραπάνω μεταβλητών
που χρειάζονται για να casted σωστά.Επειδή όλοι οι δείκτες εκπροσωπούνται με διαφορετικό τρόπο στο εσωτερικό .. compiler de
Έτσι, ένα πράγμα είναι να ξεκινήσετε είναι όπως είπε κάποιος είναι να θέσει τις σταθερές "κώδικα" χώρο, έτσι δεν παίρνουν χάρτη από προεπιλογή στη μνήμη RAM

έτσι αν έχετε
int pi = 31416?

Κωδικός αυτό όπως: κωδικός pi const = 31416? <- θα τεθεί σε flash rom ή τμήμα
Τελευταία επεξεργασία από eltonjohn στις 09 Aug 2005 17:51? Edited 2 φορές συνολικά

 
Blimey, δεν ήξερα ότι το 51 έχει τέσσερις διαφορετικούς χώρους μνήμης!Αλλά έχω την γενική ιδέα τώρα.

Φανταστείτε αν έχω μια εξωτερική μνήμη RAM με μικροελεγκτή μου, είμαι υποχρεωμένος να χρησιμοποιήσει PDATA για να αποθηκεύουν τα δεδομένα στην εξωτερική μνήμη RAM;

Θα ήθελα να δω παράδειγμα χρησιμοποιώντας εξωτερικούς κριάρι με 89C51 στο C γιατί θέλω να το μάθουν για το μέλλον του έργου μου.

Με την ευκαιρία, σας ευχαριστώ για τη βοήθειά μου για την κατανόηση.Έχεις «βοήθησε» σημεία

<img src="http://www.edaboard.com/images/smiles/icon_smile.gif" alt="Χαμόγελο" border="0" />Maverick Max

 
Sorry νομίζω ότι έκανε λάθος .. με pdata είναι νομίζω xdata ..Ναι, αλλά δείτε μεταγλωττιστή σας doc για να δείτε πώς πρόσβαση ότι το διάστημα .. είναι απλό!. το πράγμα είναι ότι είναι compiler εξαρτώμενο.

Pdata είναι η πρώτη 256 bytes της εξωτερικής ζευγαρώσει. Χρησιμοποιώντας το μεταγλωττιστή Keil
Xdata είναι το σύνολο των 64k

pdata είναι χρήσιμη όταν χρειάζεται λίγο μεταβλητές ..

ο λόγος είναι πως ο δείκτης εκπροσωπείται, εξοικονομεί πολύ χώρο με τη δήλωση αυτή ως pdata ..(η κεφαλίδα είναι μικρότερο)

αλλά αν χρειάζεστε περισσότερα στοιχεία,, καλά πάει με xdata

exmp

xdata int myArray [1000]?

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

xdata int myptr??
Τώρα μπορείτε να πάρετε τη διεύθυνση από απλά
myptr = myArray?

Αντ 'αυτού είχε να κάνει αυτό:

Κωδικός myptr int?
myptr = myArray? ο compiler θα CRY!δύο διευθύνσεις αντιστοιχούν σε διαφορετικούς χώρους .. γι 'αυτό πρέπει να ρίχνει ως

myptr = (int code) myArray?

Ο καλύτερος τρόπος για να καταλάβουν εντελώς αυτό είναι να διαβάσετε την ενότητα δείκτη στην Keil MANUAL ..τότε καθίσταται σαφές πώς πραγματικά λειτουργεί το δείκτη και τον τρόπο εκπροσώπησής τους (η HEADER pointer) μεταξύ εκείνων χώρων και γιατί απλά δεν μπορούμε να κάνουμε "αδιάκριτη ΕΠΙΣΗΜΑΙΝΟΝΤΑΣ"

τότε όλα είναι απλά, πολύ απλά
Τελευταία επεξεργασία από eltonjohn στις 09 Aug 2005 17:36? Edited 5 φορές συνολικά

 
Επειδή είμαι πολύ νέος σε αυτό το είδος της περιοχής.Θα ήθελα να του δώσετε μια πάει asap.Έχετε σχηματικό για τη σύνδεση μνήμη RAM;Σε περίπτωση που και μνήμη Εξωτερικού μπορώ να αγοράσω;

Τι γίνεται με τους κωδικούς;cuz Χρειάζομαι μερικά παραδείγματα για να κατανοήσουμε καλύτερα.

Maverick Max

 
RAM είναι πολύ γρήγορη αυτή ημέρες. Έτσι κάθε 8 bit 1 megabit ή ακόμα και 2 megabit στατική ram θα κάνουμε.Το φθηνότερα το καλύτερο!χρόνος πρόσβασης. dependes πόσο γρήγορα είναι πολύ μικρές σας, με μη RISC 51. a 120 ns <θα λειτουργήσει ακριβώς δεξιά!.. Σε κάθε περίπτωση, όλοι οι κατασκευαστές κάνουν τουλάχιστον 70NS αυτό anyways ημέρες ..Έτσι ώστε να είναι ασφαλή!

Γι 'αυτό θα σας βρουν σχηματικά ..ενός Θα το post ..αλλά elektroda μυρμήγκι μπορείτε να βρείτε μια thouthand εάν θέλετε να πάτε πιο γρήγορα!

Υπάρχει ένας περισσότερο χώρο στο 51. Καλά είναι αντιστοιχισμένη στο χώρο ΔΕΔΟΜΕΝΩΝ επίσης. Αλλά είναι καλό να γνωρίζουμε ότι μπορεί επίσης να χρησιμοποιηθεί ως ένα διαφορετικό χώρο. Αυτό είναι το BIT χώρο.
όπου μπορείτε να επηρεάσει boolean μεταβλητές!

mytrue bit?
mylie bit

mytrue = 0?
mylie = 1? <- αυτό δύο μεταβλητές μπορεί να λάβει μόνο 1 ή 0

αλλά αν το κάνετε:

true = 5? <- ο compiler θα παραπονούνται

Στο χώρο αυτό οι μεταβλητές που μπορεί να λάβει μόνο 1 ή 0,, πολύ χρήσιμο και εδώ μπορείτε να αποθηκεύσετε πολλά έμβολο.Επειδή ο compiler θα χάρτη τις μεταβλητές με bits στο χώρο δεδομένων ..(Μόνο 20 ~ 30 bytes είναι avalaible για αυτό)

ώστε να εξακριβώσετε ποιες είναι οι μεταβλητές σας ότι είναι boolean χάρτη και να το τμήμα BIT!

Εις υγεία!

 

Welcome to EDABoard.com

Sponsor

Back
Top