mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Dynamisches Array


Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und einen guten Tag zusammen...

Ich habe ein Array und seine größe als globale Variable definiert !

also:

unsigned char NUM_BYTES;
unsigned char array[NUM_BYTES];

Der Compiler meckert natürlich, da es sich nicht um eine feste 
Arraygröße handelt ! Ich bräucht maximal 19 BYTES, also müsste ich 
irgendwie einen Speicherbereich festlegen ! Wie würde das gehen ? mit 
malloc ?

Vielen Dank für eure Hilfe

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach doch einfach folgendes:

#define NUM_BYTES 19
unsigned char array[NUM_BYTES];

So sind zwar die 19Bytes ständig belegt,aber solange du keine 
Platzprobleme im RAM hast.

Tschau Sven!

Autor: Sven Woehlbier (woehlb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Würde ein malloc() auf einem Mikrocontroller ohne Betriebssystem den 
überhaupt funktionieren?

Tschau Sven!

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Hans M. (Gast)

>Der Compiler meckert natürlich, da es sich nicht um eine feste
>Arraygröße handelt ! Ich bräucht maximal 19 BYTES, also müsste ich
>irgendwie einen Speicherbereich festlegen ! Wie würde das gehen ? mit
>malloc ?

Und was hindert ich, einfach zu schreiben
unsigned char array[19];


???

Malloc geht theoretisch, der Aufwand ist aber nicht gerechtfertigt.

@ Sven Woehlbier (woehlb)

>Würde ein malloc() auf einem Mikrocontroller ohne Betriebssystem den
>überhaupt funktionieren?

Ja, ist auf den meisten vorhanden. Ist aber selten sinnvoll.

MFg
Falk

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Für einen Speichermanager gehen mehr als 19Byte drauf, ´malloc wird sich 
also wahrscheinlich nicht lohnen.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk Brunner wrote:

>>Würde ein malloc() auf einem Mikrocontroller ohne Betriebssystem den
>>überhaupt funktionieren?
>
> Ja, ist auf den meisten vorhanden. Ist aber selten sinnvoll.
>

Vor allem dürfte alleine die für malloc notwendige Verwaltungs-
information wahrscheinlich mehr Platz im SRAM beanspruchen
als die von Zeit zu Zeit nicht benutzten 8 oder 10 Bytes des
fix dimensionierten Arrays.

Autor: Hans M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo und danke für eure Antworten: Ich greife mal das von SVEN auf :

Mach doch einfach folgendes:

#define NUM_BYTES 19
unsigned char array[NUM_BYTES];

So sind zwar die 19Bytes ständig belegt,aber solange du keine
Platzprobleme im RAM hast.

Tschau Sven!
_____________

Kann ich dann nachträglich die Variable NUM_BYTES noch ändern ? Also 
irgendwo im Hauptprogramm ?

z.B

....
NUM_BYTES = 14;
....

???

Danke

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hans M. wrote:
> Kann ich dann nachträglich die Variable NUM_BYTES noch ändern ? Also
> irgendwo im Hauptprogramm ?
NUM_BYTES ist keine Variable, sondern ein Präprozessor-Makro!

==> Empfehlung: C-Buch lesen...

BTW:
Kann C99 nicht sogar Arrays mit variabler Länge ohne malloc? (OK, dass 
das dann alles im Hintergrund läuft und dementsprechend nicht weniger 
Ressourcen braucht als mit malloc ist klar...)

Autor: Matthias Kölling (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mal eine bescheidene Frage - welchen Sinn sollte es machen, ein Array 
zur Laufzeit zu vertkleinern? Was willst Du mit den restlichen 5 Bytes? 
Selbst wenn der Speicher knapp ist, müßtest Du Dein Programm so 
organisieren, dass Du dann wonders mehr Speicher nutzt, wenn gerade die 
kleine Array-Größe gebraucht wird. Das macht in meinen Augen nur auf 
einem PC Sinn, wo mehrere Applikationen sich den Speicher teilen müssen 
und temporär große Datenmengen verarbeitet werden müssen.
Bei lokalen Variablen sollte es aber dennoch funktionieren, da bei denen 
die Größe zur Compilezeit nicht bekannt sein muß, da sie eh auf dem 
Stack oder in Registern abgelegt werden.

Gruß Matthias

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> BTW:
> Kann C99 nicht sogar Arrays mit variabler Länge ohne malloc?

Nein. Es kann allerdings lokale Arrays mit zwar fester, aber zur 
Laufzeit bestimmter Größe. Overhead sollte das kaum haben. Für globale 
Arrays funktioniert das logischerweise nicht, denn die existieren ja 
schon beim Start von main(), und zu diesem Zeitpunkt hätte man ja zur 
Laufzeit noch gar keine Größe vorgeben können.

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Rolf Magnus wrote:
>> BTW:
>> Kann C99 nicht sogar Arrays mit variabler Länge ohne malloc?
>
> Nein. Es kann allerdings lokale Arrays mit zwar fester, aber zur
> Laufzeit bestimmter Größe. Overhead sollte das kaum haben. Für globale
> Arrays funktioniert das logischerweise nicht, denn die existieren ja
> schon beim Start von main(), und zu diesem Zeitpunkt hätte man ja zur
> Laufzeit noch gar keine Größe vorgeben können.
Klar, bei globalen Arrays macht es keinen Sinn...

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ein array ist grundsätzlich kein dymamischer datentyp. Bei 19 Elementen 
kanst du manipulieren was du wilst, du wirst dein ziel, reccourcen zu 
sparen sicher nicht erreichen, das gegenteil jeodch ziemlich sicher...

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.