Allgemeine Frage zu idata, xdata usw

OP #864629
Lesenswert?
• ▲
▼
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
Gast #865455
Lesenswert?
• ▲
▼
>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
#868672
Lesenswert?
• ▲
▼
>>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
#3535280
Lesenswert?
• ▲
▼
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"
#3535297
Lesenswert?
• ▲
▼
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

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.