www.mikrocontroller.net

Forum: Compiler & IDEs Bitstrom erzeugen in C


Autor: Rainer K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Community,

ich möchte in C (Betriebssystem unabhänig, auf einem Mikrocontroller) 
soetwas wie einen Bitstream erzeugen.

Beispiel:
uint8_t streamArray[100];

Nun möchte ich in dieses Array bits "streamen..." Ich stelle mir das so 
vor, dass ich an die Zugriffsfuntion immer 1 Byte übergebe zusammen mit 
der anzahl der Bits die aus diesem Byte gespeichert werden sollen. Die 
Funktion hängt die beschriebenen Bits dann an den Stream an.

Die Umsetzung dürfte nicht so kompliziert sein, wenn man dann aber noch 
Funtionalitäten wie padding, kompression usw. haben möchte wirds aber 
doch schnell komplexer im Umfang. So etwas wie Streamobjekte wären 
super.

Ich wollte einfach mal fragen ob jemand vielleicht ne fertige Klasse 
hierzu hat. Eigentlich bin ich mir sicher, dass fast jeder Audiocodec 
soetwas beinhalten müsste und da gibt es doch viele die open Source 
sind, vielleicht schau ich auch mal da rein...

Ich bin für Tipps dankbar!

Autor: Rainer K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ah sorry, ich meinte nicht "Klasse" (brauch das nicht in C++) sondern 
Modul oder Lib.

Autor: Nico22 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wo soll der Stream denn hin? Guck mal unter Ringpuffer.

Nico.

Autor: Rainer K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Nico 22: Also das soll quasi an eine Speicherstelle die ich definiere, 
zB das byte array.

Also ich hab inzwischen was gefunden: 
http://www.koders.com/c/fid46B07257984E46E374FBD93... 
Ein Teil der Lib enthält genau das was ich brauche. Bin mir nicht ganz 
sicher wie das mit der Lizenz ist, oben steht LGPL, im Copyright vermerk 
steht dann nix mehr dazu. Aber ich glaub für nen Studienprojekt sollte 
ich das schon nehmen dürfen, oder?

Mich wundert es im übrigen dass es so schwer war solche Funktionen zu 
finden, scheint mir kein übermässiger Spezialfall zu sein.

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

Bewertung
0 lesenswert
nicht lesenswert
Rainer K. schrieb:
> @Nico 22: Also das soll quasi an eine Speicherstelle die ich definiere,
> zB das byte array.

Wenn du es allgmein haben willst, dann verfügt dein Stream-Modul über 
einen Funktionspointer. Jedesmal wenn es ein Byte fertig zusammengesetzt 
hat, setzt es dieses Byte über diesen Funktionspointer ab.

Das kann man dann auch weiter treiben.
Ein 2-tes Modul, welches über eine Funktion ein Byte entgegennimmt und 
es durch die Kompression jagt und seinerseits wieder über einen 
Funktionspointer verfügt, über welchen es ein Byte aus dem 
Kommpressionsergebnis loswird. (sofern das Komressionsverfahren so 
aufgebaut ist, dass man nicht auf ältere Bytes rückgreifen muss)

Jubelt man daher dem Stream Modul die Input Funktion des 
Kompressions-Modul als Ausgabefunktion unter, dann hat man ein 
Kombinationsobjekt geschaffen, welches man als einen Stream ansehen 
kann, der auch kompremiert.

Dazu dann noch eine Funktion, die eintreffende Bytes einfach 
nacheinander im Speicher ablegt. Und diese Funktion jubelt man dann 
wiederrum dem Kompressionsmodul als Ausgabefunktion unter.
(Oder eine Funktion die ein Byte auf ein File schreibt oder eine 
Funktion die das Byte in einen Netzwerksocket stopft oder ....)

> Mich wundert es im übrigen dass es so schwer war solche Funktionen zu
> finden, scheint mir kein übermässiger Spezialfall zu sein.

Keine Ahnung.
Bits in einem Byte sammeln und das Byte auf eine Ausgabestrecke zu 
bringen klingt jetzt nicht so übermässig kompliziert als das ich da 
lange danach suchen würde.

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.