Forum: Mikrocontroller und Digitale Elektronik pgmspace Linux


von Hani (Gast)


Lesenswert?

Auf dem AVR noch gang und gebe,

avr/pgmspace.h

Wird sowas auf dem Raspberry Pi in ähnlicher Form garnicht mehr 
benötigt, oder geht das einfach nicht. Davon abgesehen das er genug 
Speicher hat.

von Nomo (Gast)


Lesenswert?

Nimm stdio.h

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Hani schrieb:
> Wird sowas auf dem Raspberry Pi in ähnlicher Form garnicht mehr
> benötigt, oder geht das einfach nicht.

das pgmspace zeugs ist nur notwendig, weil AVR eine Harvard-Architektur 
hat (verschiedene Speicher und Zugriffe für Programm und Daten), so 
ziemlich alle anderen Prozessoren aber Von Neumann sind (gleicher 
Speicher)

C unterstützt eigentlich die Harvard-Architektur nicht bzw. schlecht, 
deshalb diese Krücken. Auf dem RasPi wirst du das mit ziemlicher 
Sicherheit nicht brauchen (und auch nicht vermissen)

Nomo schrieb:
> Nimm stdio.h

Das hat damit genau gar nichts zu tun.

von Rolf M. (rmagnus)


Lesenswert?

Michael Reinelt schrieb:
> Hani schrieb:
>> Wird sowas auf dem Raspberry Pi in ähnlicher Form garnicht mehr
>> benötigt, oder geht das einfach nicht.
>
> das pgmspace zeugs ist nur notwendig, weil AVR eine Harvard-Architektur
> hat (verschiedene Speicher und Zugriffe für Programm und Daten),

Nein, eigentlich ist das nur notwendig, weil AVR keine reinrassige 
Harvard-Architektur ist. Es wird nämlich nur dann nötig, wenn man Daten 
aus dem Programmspeicher lesen will statt aus dem Datenspeicher.

von Linksammler (Gast)


Lesenswert?

Michael Reinelt schrieb:
> Nomo schrieb:
>> Nimm stdio.h
>
> Das hat damit genau gar nichts zu tun.

Naja... einen Zusammenhang kann man da schon konstruieren:

Am AVR nimmt man die pgmspace-Sachen, um Sperrige Daten (z.B. Strings) 
aus dem RAM fernzuhalten.


Auf dem PC (bzw RasPi) sind Strings nicht "Sperrig". Aber z.B. große 
Video-Dateien.
Um diese nicht komplett im RAM halten zu müssen, legt man sie in's 
Dateisystem, also auf SD-Karte, Festplatte, SSD, NAS, Cloud...
Zugriff dann mit fopen&co, und die sind in der stdio.h.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Rolf Magnus schrieb:
> Nein, eigentlich ist das nur notwendig, weil AVR keine reinrassige
> Harvard-Architektur ist. Es wird nämlich nur dann nötig, wenn man Daten
> aus dem Programmspeicher lesen will statt aus dem Datenspeicher.

Ist jetzt vielleicht Haarspalterei, aber für mich ist AVR ein 
"reinrassiger" Harvard: Eine Adresse alleine ist nicht eindeutig, ich 
muss wissen ob Daten oder Programm. Und genau das kann C eigentlich 
nicht.

von Rolf M. (rmagnus)


Lesenswert?

Michael Reinelt schrieb:
> Rolf Magnus schrieb:
>> Nein, eigentlich ist das nur notwendig, weil AVR keine reinrassige
>> Harvard-Architektur ist. Es wird nämlich nur dann nötig, wenn man Daten
>> aus dem Programmspeicher lesen will statt aus dem Datenspeicher.
>
> Ist jetzt vielleicht Haarspalterei, aber für mich ist AVR ein
> "reinrassiger" Harvard: Eine Adresse alleine ist nicht eindeutig, ich
> muss wissen ob Daten oder Programm. Und genau das kann C eigentlich
> nicht.

Doch. Denn in C sind Zeiger auf Funktionen und Zeiger auf Daten 
inkompatibel und können nicht in einander konvertiert werden. Die 
meisten C-Compiler unterstützen das trotzdem, verstoßen damit aber 
eigentlich gegen die C-Spezifikation.
C kann ja nichts dafür, wenn du auf einmal einen Zeiger auf Daten haben 
willst, der aber in den Bereich zeigt, der eigentlich für Funktionen 
gedacht ist.
Harvard heißt eigentlich strikte Trennung zwischen Code und Daten und 
separate Speicher dafür. Beim AVR ist nun zusätzlich dazu noch der 
Codespeicher ein Flash und der Datenspeicher ein RAM, und man hat, um 
konstante Daten nicht im RAM halten zu müssen, eine Erweiterung 
gegenüber Harvard eingebaut, die es auch erlaubt, Daten aus dem 
Programmspeicher zu lesen. Und genau diese Erweiterung, die eigentlich 
nicht mehr Teil von Harvard ist, ist das, womit C schlecht zurecht 
kommt.

von Kaj (Gast)


Lesenswert?

Hani schrieb:
> avr/pgmspace.h
>
> Wird sowas auf dem Raspberry Pi in ähnlicher Form garnicht mehr
> benötigt

Fuer was genau sollte man sowas auf einem (durch aus vollwertigen) 
Computer brauchen?

von Peter II (Gast)


Lesenswert?

Kaj schrieb:
> Fuer was genau sollte man sowas auf einem (durch aus vollwertigen)
> Computer brauchen?

Aus dem gleichen Grund wie beim Atmel, warum sollte man auf einen 
Computer sinnlos Speicher verschwenden?

Aber beim PC kann man die Daten in andere Sektionen der exe packen, 
damit kann das Betriebssystem über Memory-Map-File ja nur in den Ram 
einblenden.

Ob das gemacht wird, kann nicht sagen.

von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Rolf Magnus schrieb:
> Doch. Denn in C sind Zeiger auf Funktionen und Zeiger auf Daten
> inkompatibel und können nicht in einander konvertiert werden. Die
> meisten C-Compiler unterstützen das trotzdem, verstoßen damit aber
> eigentlich gegen die C-Spezifikation.
> C kann ja nichts dafür, wenn du auf einmal einen Zeiger auf Daten haben
> willst, der aber in den Bereich zeigt, der eigentlich für Funktionen
> gedacht ist.
> Harvard heißt eigentlich strikte Trennung zwischen Code und Daten und
> separate Speicher dafür. Beim AVR ist nun zusätzlich dazu noch der
> Codespeicher ein Flash und der Datenspeicher ein RAM, und man hat, um
> konstante Daten nicht im RAM halten zu müssen, eine Erweiterung
> gegenüber Harvard eingebaut, die es auch erlaubt, Daten aus dem
> Programmspeicher zu lesen. Und genau diese Erweiterung, die eigentlich
> nicht mehr Teil von Harvard ist, ist das, womit C schlecht zurecht
> kommt.

Was bleibt mir übrig, als dir uneingeschränkt Recht zu geben, alles 
zurückzunehmen und das Gegenteil zu behaupten? ;-)

von Nomo (Gast)


Lesenswert?

Linksammler schrieb:
>> Nomo schrieb:
>>> Nimm stdio.h
>>
>> Das hat damit genau gar nichts zu tun.
>
> Naja... einen Zusammenhang kann man da schon konstruieren:
>
> Am AVR nimmt man die pgmspace-Sachen, um Sperrige Daten (z.B. Strings)
> aus dem RAM fernzuhalten.
>
> Auf dem PC (bzw RasPi) sind Strings nicht "Sperrig". Aber z.B. große
> Video-Dateien.
> Um diese nicht komplett im RAM halten zu müssen, legt man sie in's
> Dateisystem, also auf SD-Karte, Festplatte, SSD, NAS

Genau das meinte ich. Daten stehen ja nicht im Flash weil Daten es geil 
finden im Flash zu stehen.

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
Noch kein Account? Hier anmelden.