pgmspace Linux

(Firma: Brainit GmbH) #4091996
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.
#4092012
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.
Gast #4092013
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.
(Firma: Brainit GmbH) #4092020
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.
#4092024
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.
Gast #4092029
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.
(Firma: Brainit GmbH) #4092064
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? ;-)
Gast #4093073
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.

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.