mikrocontroller.net

Forum: Compiler & IDEs Wie kriege ich viele Strings in den Programm Memory


Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich muß viele Strings im Programm Memory speichern.
Gibt es eine clevere Methode dafür? Vielleicht
übers makefile? Oder wie geht es mit direkt
vom Quellcode?
Wer hat sowas schon mal gemacht?

Thomas

Autor: Jonas Diemer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich weiß nicht, ob das geht, aber versuch's doch mit nem array. übers 
makefile ist unsinnig (oder?).

Autor: Niki Hammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie meinst du das?

Also wie das übers makefile gehen soll hab ich keine Ahnung, aber wenn 
deine Strings sozusagen Konstanten sind und du sie einfach im RAM 
brauchst dann gibt es doch nichts leichteres als:

unsigned char *string1 = "Das ist ein String";
oder
unsigned char string1[] = "Das ist ein String";


Du kannst sie dann auch ganz bequem über string1 accessen.

Falls sie aber beim Compilieren variabel sind, könntest du sie so über 
die makefile einspeisen:


In deinem source:

unsigned char mein_string[] = DEFINED_MY_STRING;


und dann im makefile der linie "CPFLAGS" folgendes hinzufügen:
-DDEFINED_MY_STRING="Das ist mein String"


Du könntest natürlich auch eine ganze Textdatei "dynamisch" einspielen:

unsigned char mein_string[] = "
#include "c:\pfad\zu\einer\datei"
";



niki

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

hierzu eine Frage von mir:
Wieso willst du die Strings als unsigned char definieren und nicht 
einfach nur als char?
Normalerweise setzt sich ein String aus chars zusammen, unsigned char 
nehme ich nur, wenn ich Variablen brauche, die ein Byte groß sind.


ciao

      Christian

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Niki,
ich denke ich mache es auf vorgeschlagene
Standardversion. Ich dachte aber, daß solche
Strings, die nicht mit PSTR erzeugt worden sind, bei Programmstart ins 
RAM kopiert werden, und da wäre dann kein Platz mehr.

Das mit dem unsigned char ist glaube ich, damit man auch ASCII Codes 
größer 127 verwenden kann. Oder?

Autor: Niki Hammler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Ja das kann sein, aber im Endeffekt verstehen dann beide (signed und 
unsigned, char KÖNNTE ja auch stdmässig als unsigned definiert sein) die 
gleichen Zeichen.

Ich habe mir das unsigned angewöhnt wie ich meinen TCP/IP Stack 
programmiert habe.

Im Allgemeinen bin ich beim Programmieren sehr ordentlich und versuche 
nie einen Zweifelsfall offen zu lassen.
Ich mag Definitionen wie "int" oder "char" deswegen nicht, da man nie 
weiss wie sie jetzt wirklich definiert sind. Ich nehme immer
unsigned short int
unsigned long int
unsigned char
signed char
unsw.

Soll aber nicht heissen das eure Version falsch ist, es ist lediglich 
mein eigener Programmierstil

Niki

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.