Adresszähler für 32 KiB ausrechnen.

OP #3500773
Lesenswert?

Hallo zusammen.
Ich arbeite gerade ein Buch über uc-Programmierung durch, bin am Anfang 
und habe jetzt folgende Aufgabe:

Wie viel Bit muss der Adresszähler besitzen um die 32 KiB des ATmega32A
zu adressieren? Berechne die höchste Adresse im Speicher (Bezeichnung
" FLASHEND " ).

Als Adresszähler interpretiere ich die Zweierpotenzen, die groß genug 
sind, um die 32KiB adressieren zu können.
Also erstmal die Größe ermitteln: 32 x 1024 = 32768 Bytes

Jetzt soll ich also herrausfinden, wieviele zweierpotenzen in Reihe die 
32768 abdecken können.
Wie rechnet man das?

Ich könnte natürlich 2h0 + 2h1 + 2h2 + 2h3 usw. ausrechnen, aber es 
sollte doch kompakter gehen.
#3500785
Lesenswert?

@ Frank Thie (frankatmicro)

>Also erstmal die Größe ermitteln: 32 x 1024 = 32768 Bytes

Jo.

>Jetzt soll ich also herrausfinden, wieviele zweierpotenzen in Reihe die
>32768 abdecken können.
>Wie rechnet man das?

2^X = 32768

->

X = log2 32768 = 15, denn 2^15 = 32768

Zusatztrick. Der AVR hat einen 16 Bit breiten Flash, d.h. pro Adresse 
liegen 2 Bytes, also braucht man 1 Adressbit weniger.
#3500864
Lesenswert?

Die wenigsten Taschenrechner können einen Logarithmus zur Basis 2 
ausrechnen. Meistens nur einen zur Basis 10, bzw. zur Basis e

Aber wer in Mathe aufgepasst hat, kennt den Ausweg
Man kann den Logarithmus zu einer beliebigen Basis b ausrechnen, wenn 
man irgendeinen Logarithmus ausrechnen kann
1
 log_b(x) = log(x) / log(b)

Also Logarithmus von x dividiert durch den Logarithmus der Basis b 
ergibt den Logarithmus von x zur Basis b.
Es spielt dabei keine Rolle zu welcher Basis man seinen Logarithmus 
ausrechnen kann. Hauptsache man kann.
OP #3500911
Lesenswert?

@  cyblord
Guter Tip mit Wolfram Alpha.

log2 32768 ergibt 15.

@ Karl Heinz.

Mein Taschenrechner kann e^x und 10^x.
Würde mich mal interessieren, wie ich jetzt laut deiner Formel vorgehen 
müsste.

@  Georg A
Ich fange ja erst an. Aber Danke für den Rat. Ich werde mir die Potenzen 
mal ausrechnen und aufschreiben.
Moderator #3500960
Lesenswert?

Frank Thie schrieb:
> Mein Taschenrechner kann e^x und 10^x.
> Würde mich mal interessieren, wie ich jetzt laut deiner Formel vorgehen
> müsste.

Hat de Taschenrechner vielleicht eine "INV"- oder eine "2nd"-Taste oder
so etwas ähnliches? Dann liefert mit hoher Wahrscheinlichekeit "INV"
"10^x" den Zehner- und "INV" "e^x" den natürlichen Logarithmus. Welchen
von beiden du zur Berechnung des Zweierlogarithmus nach der Formel von
Karl Heinz verwendest, ist egal.
OP #3501062
Lesenswert?

@ Yalu X.

In Mathe war ich nie besonders gut und in abstrakten Angelegenheiten, 
die mir überhaupt nichts sagen, auch nicht. Darum die Nachfrage zur 
Formel, die mich aber nur noch am Rande interessierte, weil ja das 
Ergebnis über Wolfram Alpha herrauszufinden ist.

Und darum habe ich ja überhaupt die Eingangsfrage gestellt, um mir von 
den grundsätzlichen Gegebenheiten der ucś einen Eindruck zu verschaffen 
um darauf meine Vorstellung aufzubauen.

@ A.K.

Ja, erstaunlich. 2^15 ist die Akkumulation aller Potenzen bis 2^14 +1.

Aber die binäre Schreibweise währe doch:
0b0111111111111111
Also währe die 15. 1 = 2^15 also verstehe ich deine Aussage bezüglich 
des 14. Bit nicht.
#3501093
Lesenswert?

@ Frank Thie (frankatmicro)

>Ja, erstaunlich. 2^15 ist die Akkumulation aller Potenzen bis 2^14 +1.

Das ist in jedem Stellenwertsystem so.

100 = 9*10 +9*1 +1

>Aber die binäre Schreibweise währe doch:
>0b0111111111111111
>Also währe die 15. 1 = 2^15 also verstehe ich deine Aussage bezüglich
>des 14. Bit nicht.

In der Informatik beginnt man meist bei Null und nicht bei 1. Also sind 
15 Bit die Bit 0-14.
OP #3501135
Lesenswert?

@ Falk Brunner
Ja, OK, aber wie gesagt war Mathe nie mein Lieblingsfach und so freue 
ich mich immer über das Erkennen einfacher( mathematischer) Wahrheiten.

>In der Informatik beginnt man meist bei Null und nicht bei 1. Also sind
>15 Bit die Bit 0-14.

Ja stimmt, ich hatte auf deutsch gezählt, war ein Mißverständniss 
meinerseits.

>Wie viel Bit muss der Adresszähler besitzen um die 32 KiB des ATmega32A
>zu adressieren?

Also kann ich sagen 15 Bit, nähmlich die Bits 0 - 14.

Aber wie beantworte ich den 2. Teil:

>Berechne die höchste Adresse im Speicher (Bezeichnung " FLASHEND " ).

Wie rechne ich?

32768/16=2048-16=2032 = Gesammtgröße / Adresszähler - 1Word = grösste 
ansprechbare Adresse?
OP #3502191
Lesenswert?

Ich hab jetzt folgendes in m32def.inc gefunden:

; ***** DATA MEMORY DECLARATIONS 
*****************************************
.equ  FLASHEND  = 0x3fff  ; Note: Word address
.equ  IOEND  = 0x003f
.equ  SRAM_START  = 0x0060
.equ  SRAM_SIZE  = 2048
.equ  RAMEND  = 0x085f
.equ  XRAMEND  = 0x0000
.equ  E2END  = 0x03ff
.equ  EEPROMEND  = 0x03ff
.equ  EEADRBITS  = 10
#pragma AVRPART MEMORY PROG_FLASH 32768
#pragma AVRPART MEMORY EEPROM 1024
#pragma AVRPART MEMORY INT_SRAM SIZE 2048
#pragma AVRPART MEMORY INT_SRAM START_ADDR 0x60

Jetzt ist aber 0x3fff = 16383 als FLASHEND angegeben

Der ATmega32 hat aber 32Kib, also 32768 Bytes.

Da könnte ich doch eine 0x8000 als höchste Adresse erwarten.

Was sehe ich noch nicht, oder wo ist der Fehler?
OP #3502278
Lesenswert?

OK, durch die 2 Bites zur Adressierung halbieren sich die Adressen, muss 
mich halt noch orientieren. Danke.

Danke auch an alle, die mir hier weitergeholfen haben.

Vor allem hat sich mein Schrecken über die Hex-zahlen aufgelöst, bzw die 
Umrechnungen zwischen dez, hex und bin.

Habe hier eine gute Seite gefunden, die auch die Rechenschritte 
darstellt und bis auf die Eingabe in den Taschenrechner runterbricht. 
Sehr hilfreich.

http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm

Gruß
Frank

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren