Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

gelöst Int to byte

Mitglied: Power-Poler

Power-Poler (Level 1) - Jetzt verbinden

28.07.2016, aktualisiert 19:14 Uhr, 1897 Aufrufe, 11 Kommentare

Guten Tag,

Habe gerade ein kleines Problem, welches mir Kopfzerbrechen bereitet.
Und zwar will ich über den Pi an einen der GPIO pins einen byte ausgeben, mittels digitalWrite(x,x)
Die ganze zeit verwende ich hierfür 8 int werte (0 und 1 halt) was natürlich nicht Sinn der Sache ist.

Ist es möglich einen int (oder einen char) in eine bit folge umzuwandeln, also 1 byte?

also sowas zu schreiben pseudocode:
habe es mit dem Dateitype byte versucht, den kennt aber gcc nicht (oder ich mache etwas falsch).

oder Denke ich gerade in die völlig falsche Richtung?
Schonmal Danke für eine Antwort.
Mit freundlichen Grüßen
Power-Poler
Mitglied: rubberman
LÖSUNG 28.07.2016 um 19:32 Uhr
Hallo Power-Poler,

vielleicht verlinkst du mal auf eine Funktionsreferenz dieser digitalWrite() Funktion, die du nutzen möchtest. Irgendwie scheinst du tatsächlich Bit und Byte zu verwechseln. I.d.R. hat ein char eine Breite von 8 Bit, was in deinem Fall auch einem Byte entspricht. Einen separaten Datentyp kennt weder der C noch C++ Standard.
Das bitweise auseinanderdröseln einer Zahl machst du mit dem & Operator.
zahl & 1 für das niedrigste Bit
zahl & 2 für das zweitniedrigste Bit
zahl & 4 ...
...
zahl & 128 für das höchste Bit
... eben in Zweierpotenzen.

Grüße
rubberman
Bitte warten ..
Mitglied: pelzfrucht
28.07.2016 um 21:22 Uhr
Hi,

vielleicht verlinkst du mal auf eine Funktionsreferenz dieser digitalWrite() Funktion
Ich vermute mal es handelt sich um die digitalWrite Funktion der WiringPi API.

Soweit ich verstehe möchtest du ein Byte über einen Pin bitweise ausgeben.
Das funktioniert so nicht direkt, du müsstest dafür selber eine Funktion schreiben die dies tut.
digitalWrite() dient zum Schalten eines GPIO Pin und nicht zur (formatierten) Datenausgabe.

Du könntest eine Funktion schreiben die alle 8 Bits nacheinander auf dem Pin ausgibt. Beispiel:

I (6ms)
0 (6ms)
I (6ms)
I (6ms)
0 (6ms)
0 (6ms)
0 (6ms)
I (6ms)

(Der Byte und millisekunden Wert ist jetzt willkürlich gewählt, aber um das zu verdeutlichen )

Viele Grüße
pelzfrucht
Bitte warten ..
Mitglied: rubberman
28.07.2016 um 21:37 Uhr
Ich vermute mal
Ja, das könnte sein.

Welche Möglichkeiten du auf dem Pi hast, um ein Delay von ein paar ms einzubauen, weiß ich nicht.

Grüße
rubberman
Bitte warten ..
Mitglied: pelzfrucht
28.07.2016 um 22:32 Uhr
Welche Möglichkeiten du auf dem Pi hast, um ein Delay von ein paar ms einzubauen, weiß ich nicht.

Ich schätze mal ganz normal

#include <unistd.h>
[...]
usleep(20*1000);

(20 mikrosekunden * 1000 = 20 millisekunden)

Viele Grüße
pelzfrucht
Bitte warten ..
Mitglied: rubberman
28.07.2016 um 23:14 Uhr
ganz normal
Joa, "ganz normal" wäre ANSI C. Das ist dann wohl eher POSIX

Grüße
ruberman
Bitte warten ..
Mitglied: pelzfrucht
28.07.2016 um 23:24 Uhr
Joa, "ganz normal" wäre ANSI C. Das ist dann wohl eher POSIX

Ups

Aber trifft in dem Fall trotzdem zu.

Er kann per sleep / usleep verzögern.
Alternativ kann er aber auf seine genutzte WiringPi API zurückgreifen. Dann wäre es:

Für Sekunden bzw. Mikrosekunden.

Viele Grüße
pelzfrucht
Bitte warten ..
Mitglied: Friemler
28.07.2016, aktualisiert 29.07.2016
[EDIT]

ACHTUNG!!!

Besser nicht verwenden. Siehe hier.

[/EDIT]


Hallo Power-Poler,

in C gibt es einige nettes Features, die für Dein Problem optimal geeignet sind: Bitfelder und Unions. Teste mal folgendes:


Gruß
Friemler
Bitte warten ..
Mitglied: rubberman
29.07.2016 um 00:49 Uhr
Hallo Friemler.

Bitfelder und Unions
Hab ich mir nicht getraut vorzuschlagen. Keine Ahnung in welcher Reihenfolge die Bits auf einem Pi im Speicher liegen ...

Grüße
rubberman
Bitte warten ..
Mitglied: Friemler
29.07.2016 um 08:28 Uhr
Moin rubberman,

hast Recht, Bitfelder sind auch eines dieser Desaster in C was die Portierbarkeit anbelangt. Da ich C nur für Hobbyzwecke auf der PC-Plattform verwende, verliere ich solche Dinge öfter aus dem Blick.

[OT]
@Frank: Ich wollte meinem obigen Posting eigentlich etwas mehr Text zur Erklärung hinzufügen, warum man den Code nicht benutzen sollte. Aber 14,28% Änderungsquote war beim Speichern schon wieder zu viel, da das Posting bereits von rubberman kommentiert wurde (da war doch schonmal was... ). Diese Schwelle finde ich viel zu niedrig, vor allem da es sich nur um eine Ergänzung des bestehenden Textes gehandelt hätte.
[/OT]

Gruß
Friemler
Bitte warten ..
Mitglied: Power-Poler
29.07.2016, aktualisiert um 09:30 Uhr
@rubberman

Vielen Dank. Genau so was habe ich gesucht. Macht genau was es soll.
Bitte warten ..
Mitglied: rubberman
29.07.2016 um 17:44 Uhr
Hallo Friemler

Bitfelder sind auch eines dieser Desaster in C was die Portierbarkeit anbelangt.
Das hat eigentlich nichts mit C zu tun, sondern mit der Implementierung auf dem jeweiligen OS.
Workaround wäre, die union mit byteValue 1 zu initialisieren und anschließend zu prüfen ob die 1 sich im höchsten oder im niedrigsten Bit wiederfindet.
Da ich C nur für Hobbyzwecke auf der PC-Plattform verwende
Da bist du nicht der einzige

Grüße
rubberman
Bitte warten ..
Ähnliche Inhalte
TK-Netze & Geräte

Auerswald Anzeige Status andere int. Teilnehmer

gelöst Frage von the-buccaneerTK-Netze & Geräte5 Kommentare

Hi! Gibt es in der Kombination Auerswald Compact 5200 und Comfortel 2600IP die Möglichkeit, den Status der Mitarbeiter direkt ...

Java

Methode um alle Kombinationen eines (int-)Arrays zu bestimmen - Optimierungsmöglichkeiten?

gelöst Frage von keb2308Java

Hallo, ich brauch eine Methode die einen Array als parameter nimmt und dann ein Array von Arrays aller Kombinationsmöglichkeiten ...

Neue Wissensbeiträge
Netzwerkmanagement
How To Mikrotik Netinstall
Erfahrungsbericht von areanod vor 1 TagNetzwerkmanagement

Jedes Mal wenn ich Netinstall längere Zeit nicht benutzt habe stolpere ich über die „Besonderheiten“ dieser Software. Das ist ...

Microsoft
Microsoft: LDAPS per Update als Default
Information von em-pie vor 1 TagMicrosoft1 Kommentar

Hallo, Microsoft wird mit einem der zukünftigen Updates LDAP auf LDAPS per Default umstellen. Admins von angebundenen Systemen die ...

Humor (lol)

Funny: Warum es immer schwieriger wird, die richtigen Produkte online zu finden

Information von Dilbert-MD vor 2 TagenHumor (lol)17 Kommentare

Wir befinden uns in der Rubrik "Off Topic - Humor" und in 15 Minuten ist Freitag. und ja, es ...

Windows Update
MS SQL Server Updates
Information von sabines vor 3 TagenWindows Update

Für 2012, 2014 und 2016 sind seit Dienstag wichtige Sicherheitsupdates verfügar, die eine remote, leicht auszunutzende Lücke im Reporting ...

Heiß diskutierte Inhalte
Router & Routing
Suche Router der von einem Ethernet ein WLAN erzeugt
gelöst Frage von cdkurtRouter & Routing24 Kommentare

Hallo, ich bin auf der Suche nach einem Wlan Router/ Access Point der sich in einem Heim / Hotel ...

Utilities
Motherboard mit zwei Ethernet Adapter.?
Frage von Sibelius001Utilities17 Kommentare

Hallo, ist bestimmt eine "Dummy" Frage, die hier bestimmt schon x-mal diskutiert wurde (Dafür bitte ich mal vorab um ...

Sicherheitsgrundlagen
Frage zur allgemeinen Netzwerksicherheit
Frage von AbstrackterSystemimperatorSicherheitsgrundlagen15 Kommentare

Guten Tag zusammen, in letzter Zeit beschäftige ich mich, auch wenn ich "nur" Azubi bin, mit diversen Themen der ...

Windows Server
Wie groß kann die pagefile werden?
gelöst Frage von Ex0r2k16Windows Server13 Kommentare

Huhu, ich habe ein kleines Freitagsprojekt hochgezogen bei dem alle mitraten dürfen. Folgende Umgebung: HP Microserver gen 8 OS: ...