C Speicher in Funktion reservieren?!

Erstens:
Mir ist schon klar wie Du das meinst (und wie es Jan sicher auch verstanden hat), aber genau genommen stimmt das nicht.
"Janiiix3" ist also durchaus "ausführbarer Code" :p

Da kann man jetzt drüber streiten :D Also ich bin der Meinung der Code ist für den AVR nicht ausführbar, da er im SRAM liegt.

Es kommt nun drauf an, wie man "im RAM liegt niemals ausführbarer Code" interpretiert. Ich interpretiere es so, dass er nicht ausgeführt werden kann, weil er im RAM liegt, das kann man natürlich auch auf deine Weise interpretieren, dann wären auch die Zahlen auf meinem Nebenrechnungszettel ausführbarer Code.

Ist ja egal, Hauptsache Jan kommt nicht durcheinander und hat das nun mit Konstanten und Variablen verstanden.
 
Ist ja egal, Hauptsache Jan kommt nicht durcheinander und hat das nun mit Konstanten und Variablen verstanden.

Jaein.. Wie ist das denn nun? Ich kann in der Funktion ja bekanntgeben, dass es z.B ein const char const *str sein soll, heißt doch aber nicht gleich das ich es in der Funktion nicht ändern kann bzw. das ich da am Zeiger auch wieder was manipulieren kann oder?

Habt ihr denn noch Anmerkungen zu meiner Funktion, wie ihr das machen würdet?
 
Wenn du deinen Parameter als const deklarierst und in der Funktion änderst, sollte der Compiler einen Fehler melden, also erst gar keinen Code erzeugen.
Auch ist zunächst ein String "MeinString" als Parameter nur read-only, auch dann, wenn bei der Funktion der Parameter nicht mit const deklariert wurde, also in der Funktion nicht ändern.

AVRLibC
Const sagt hier nur aus, dass etwas read-only ist, nicht dass es im Flash Memory oder im RAM liegt.
Wenn eine Konstante ausschließlich im Flash sein soll, nutzt man PROGMEM aus pgmspace.h, wie schon beschrieben.

Deine Funktion werde ich mir noch mal ansehen, aber hdusel hat ja hier schon einiges dazu geschrieben. Das potentielle Memory Leak hatte ich auch schon erwähnt.
Verusche dies erst mal alles zu berücksichtigen.

Dirk :ciao:
 
Deine Funktion werde ich mir noch mal ansehen, aber hdusel hat ja hier schon einiges dazu geschrieben. Das potentielle Memory Leak hatte ich auch schon erwähnt.
Verusche dies erst mal alles zu berücksichtigen.

Na das habe ich ja schon behoben. Vor kurzem habe ich gelesen, dass man auch Daten im Flash mit "__flash" ablegen kann? Das PROGMEM ist wohl veraltet?
 
Na das habe ich ja schon behoben.

Und funktioniert noch nicht? Was funktioniert nicht? Eventuell poste noch einmal deine aktuelle Funktion und ggf. wie du sie aufrufst.

Infos zu Konstanten im Flash Memory (hier Strings):
http://www.atmel.com/webdoc/AVRLibcReferenceManual/pgmspace_1pgmspace_strings.html

The C language was not designed for Harvard architecture processors with separate memory spaces. This means that there are various non-standard ways to define a variable whose data resides in the Program Memory (Flash).

IAR uses a non-standard keyword to declare a variable in Program Memory:
__flash int mydata[] = ....

AVR GCC uses Variable Attributes to achieve the same effect:
int mydata[] __attribute__((progmem))
 
Nabend Dirk,

Nein. Es funktioniert ja jetzt mit dem Array und den 26 Bytes.
Ist __flash nicht das gleiche? Das sagt dem Compiler doch das die Daten in den Flash gehören und nicht in den RAM. Wozu dann noch PROGMEM?
 
Freilich ist ein malloc() / new aufwändiger. Ein malloc / new ist eine dynamische Speicheranforderung. Da steckt dann ein Algorithmus dahinter, der eine Liste aller noch freien Speicherbereiche durchgeht und dann daraus einen Block sucht, der Deiner Größenanforderung entspricht. Mit der Zeit "fragmentiert dann der Speicher. und wenn man dann noch "memory Lecks hat" - sprich den mit malloc() angeforderten Speicher nicht mehr mit free() freigibt, dann wird ein malloc() NULL zurückgeben: "Ich habe keinen Speicher um Deine Anfrage nach zus. Speicher zu beantworten" ; ^)
 
Zuletzt bearbeitet:

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)