Hallo an alle, ich bin gerade dabei, einen AT89C51CC03 µC von Atmel mit Keil µVision 3 zu programmieren. Datenblatt: www.atmel.com/dyn/resources/prod_documents/doc4182.pdf Er hat folgende Daten: 256 Bytes of On-Chip Ram 2048 Bytes of ON-Chip ERAM 64K Bytes of On-chip Flash Memory 2K Bytes of On-chip Flash for Bootloader 2K Bytes of On-chip EEPROM Nun meine Frage: Wie spreche ich im Keil die einzelnen Speicher an und welche Unterschiede gibt es? Ich kenne folgendes: xdata, idata z.B. xdata test; Danke und schöne Pfingsten noch
Hat keiner eine Idee? Kann ich die einzelnen Speicher für Variablen verwenden? Oder muss ich auf etwas achten?
je nachdem für programm oder varibablen, check mal die anleitung von u3v ist dort sauber beschrieben...
>256 Bytes of On-Chip Ram Die ersten 128 Byte mit "data" oder "idata" die 2. 128 Byte mit "idata" idata int i; data int i; >2048 Bytes of ON-Chip ERAM mit "xdata" xdata int a; >64K Bytes of On-chip Flash Memory mit "code" oder direkt als Programm code int c = 12; >2K Bytes of On-chip EEPROM mit "xdata" Gruss Helmi
Vielen Dank für die Hilfe. >64K Bytes of On-chip Flash Memory >mit "code" oder direkt als Programm Direkt als Programm??? Wie ist das gemeint?
>>64K Bytes of On-chip Flash Memory >>mit "code" oder direkt als Programm >Direkt als Programm??? Wie ist das gemeint? Dein Programcode steht steht ja im CODE Bereich. Du kannst aber auch dort konstanten ablegen. code char TestString[] = {"Test"}; Der String wird dann fest im CODE Bereich abgelegt So ist das gemeint. Gruss Helmi
Helmi schrieb: >>2K Bytes of On-chip EEPROM > mit "xdata" Mit xdata schiebe ich mein Kram ins ERAM, aber nicht ins EEPROM
Weiß jemand, wie man in C mit idata die Variablen ins obere Hälfte des 256 byte großen RAMs schreiben kann? Außer z.B. so char idata my_var at "adresse im RAM"; ? In dieser Variante muss man die Adresse jeder Variable vergeben. Gibt es vielleicht was, wo man sagen kann "schreibe alle Variablen die mit idata definiert sind ins obere Hälfte"
Yevgeniy K. schrieb: > In dieser Variante muss man die Adresse jeder Variable vergeben. Gibt es > vielleicht was, wo man sagen kann "schreibe alle Variablen die mit idata > definiert sind ins obere Hälfte" idata geht normalerweise von 0 .. 0xff. Du kannst dem Linker aber sagen wo idata beginnen soll, zumindest beim Keil Compiler geht das so. 1 2 data int a; 3 idata int b; 4 5 void main (void) 6 { 7 1 8 1 a = 12; 9 1 b = 35; 10 1 11 1 } 12 C51 COMPILER V6.00 MAIN 02/15/2014 10:47:33 PAGE 2 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION main (BEGIN) ; SOURCE LINE # 5 ; SOURCE LINE # 6 ; SOURCE LINE # 8 0000 750000 R MOV a,#00H 0003 75000C R MOV a+01H,#0CH ; SOURCE LINE # 9 0006 7800 R MOV R0,#LOW b 0008 7600 MOV @R0,#00H 000A 08 INC R0 000B 7623 MOV @R0,#023H ; SOURCE LINE # 11 Hier in der Linkermap sieht man wo er b hingelegt hat. SYMBOL TABLE OF MODULE: test51 (MAIN) VALUE TYPE NAME ---------------------------------- ------- MODULE MAIN C:0000H SYMBOL ICE_DUMMY C:0003H PUBLIC main D:0008H PUBLIC a I:0080H PUBLIC b <<<<<<<< Hier liegt b (idata) auf addresse 80H ------- PROC MAIN C:0003H LINE# 5 C:0003H LINE# 6 C:0003H LINE# 8 C:0009H LINE# 9
Yevgeniy K. schrieb: > Weiß jemand, wie man in C mit idata die Variablen ins obere Hälfte des > 256 byte großen RAMs schreiben kann? Man segmentiert den Speicher: http://www.keil.com/support/man/docs/bl51/bl51_idata.htm
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.