Hallo, wenn ich in C einen Pin als Ausgang einstelln möchte. Dann verwendet man folgenden Befehlt.
1 | |
Ich hab gelesen, dass ein "|" ODER bedeutet. Aber irgendwie macht das doch keinen Sinn oder?
|
Anzeige
|
Bedeutung des Zeichens "|" in CHallo, wenn ich in C einen Pin als Ausgang einstelln möchte. Dann verwendet man folgenden Befehlt.
Ich hab gelesen, dass ein "|" ODER bedeutet. Aber irgendwie macht das doch keinen Sinn oder?
Gast
#1802636
Es ist der (Bitweise) Oder Operator. Beachte, es ist nicht das umgangsprachliche: PORTB oder 0x04 sondern im Ergebnis ist genau dann ein bit gesetzt (=1), wenn es in dem einen ODER dem anderen Argument gesetzt war. Sprich in der Anweisung PORTB = PORTB | 0x04; ist am Ende jedes Bit, dass in PORTB schon gesetzt war gesetzt und darüber hinaus ist auch das Bit, dass in 0x04 gesetzt ist auf 1 gesetzt. > Aber irgendwie macht das doch keinen Sinn oder? http://home.fhtw-berlin.de/~junghans/cref/CONCEPT/bitwise.html Irgendwie schon, oder? Super danke. Dass hilft mächtig weiter. Alles eine Sache der Definition. Kann mir noch jemand sagen, was der Unterschied zwischen "|" und "|=" ist? > Ich hab gelesen, dass ein "|" ODER bedeutet. > > Aber irgendwie macht das doch keinen Sinn oder? Es ist ein bitweise ODER-Verknüpfung, z.b. x = a | b bedeutet jede 1 aus a oder b wird übernommen. Im vorliegenden Fall (PORTB = PORTB | 0x04;) heißt es, dass alle Bits, die von PORTB schon 1 sind, bleiben und zusätzlich das 4. Bit gesetzt wird, z.B. PORTB = 11000000, dann heißt es 11000000 oder 00001000 -------- 11001000 d.h. die Operation ist nur zum Setzen, nicht zum Rücksetzen geeignet. (schade, zu spät) A. R. schrieb: > Kann mir noch jemand sagen, was der Unterschied zwischen "|" und "|=" > ist? a += b ist gleichbedeutend mit a = a+b. Den Rest überlasse ich dir. A. R. schrieb: > Super danke. > > Dass hilft mächtig weiter. > Alles eine Sache der Definition. > > Kann mir noch jemand sagen, was der Unterschied zwischen "|" und "|=" > ist? x |= 0x04 bedeutet x = x | 0x04, also das die erste Variable (x) auch die Ergebnisvariable (auch x) ist
Gast
#1802651
port = port | wert; kurzschreibweise : port |= wert; funktioniert auch bei : wert = wert + t ; wert += t ; oder wert -= t ; bei port &= ~wert ; die Tilde bei ~wert ergibt das invertierte byte aus 0x01 würde 0xFE werden , das wird bitweise mit dem port verUNDet Vielen Dank. Finde es echt klasse, wie schnell ich hier Hilfe bekomme. Micha K. schrieb: > Im vorliegenden Fall (PORTB = PORTB | 0x04;) heißt es, dass alle Bits, > die von PORTB schon 1 sind, bleiben und zusätzlich das 4. Bit gesetzt > wird Nein. Es ist entweder das zweite oder dritte Bit. Je nachdem ob du von 0 oder 1 anfängst zu zählen.
Gast
#1802664
Michael Buesch schrieb: > Nein. Es ist entweder das zweite oder dritte Bit. Je nachdem ob du von 0 > oder 1 anfängst zu zählen. C-Programmierer druecken im Aufzug auf den Knopf mit der '3' wenn sie in den vierten Stock wollen... >Micha K. schrieb: >> Im vorliegenden Fall (PORTB = PORTB | 0x04;) heißt es, dass alle Bits, >> die von PORTB schon 1 sind, bleiben und zusätzlich das 4. Bit gesetzt >> wird >Nein. Es ist entweder das zweite oder dritte Bit. Je nachdem ob du von 0 >oder 1 anfängst zu zählen. PORTB = 00000000 0x04 = 00000100 Durch eine "ODER-Verknüfung" ergibt sich. 00000100 Richtig? Also das 3te BIT bzw. das BIT mit der Nummer 2 wird zu 1
Gast
#1802667
bit 0 0x01 1 0x02 2 0x04 3 0x08 4 0x10 5 0x20 6 0x40 7 0x80 besser ist es eh bei PORTs/Registern (1<<Pxx) zu schreiben ... Als hätte jemand meinen Link nicht gelesen.... >Als hätte jemand meinen Link nicht gelesen....
Genau das habe ich getan.
Zitat:
"OR | kopiert ein Bit zum Ergebnis, wenn es in mindestens einem
Operanden gleich 1 ist.. "
PORTB = 00000000
0x04 = 00000100
PORTB --> 00000100
Gast
#1802674
C-Compiler anwerfen und selber überprüfen.
Würde ich gerne machen. Nur kann ich mit dem Skript nichts anfangen. Das ist bereits 5 Schritte über meinen Know How level Habe nun folgendes Skript geschrieben.
Laut der Simulation stimmt mein Ergebniss. Als schnelle Referenz auch ganz praktisch: http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B A. R. schrieb: > wenn ich in C einen Pin als Ausgang einstelln möchte. Dann verwendet man > folgenden Befehlt. > PORTB = PORTB | 0x04; nein macht man nicht, man verwendet folgendes:
oder noch lesbarer:
viele schreiben auch
Das hat den Vorteil, dass es nur compiliert, wenn der µC wirklich einen pin PB4 hat am Allerbesten ist es aber, man schreibt folgendes:
Mit dem Schema, ist die Änderung des Ports an einer Stelle im Code nötig und die Zugriffe sind auch sehr gut lesbar. edit: siehst du da haben wir schon einen Fehler, der von deiner Schreibweise herrührt. 0x04 ist natürlich PB2 @Michael Frangenberg Danke für den Link @Vlad Tepesch könntest du noch erleutern, was du genau gemacht hast?
Was machen diese "<<" ? Wo ist der unterschied zwischen PIN4 PB4 DDB4 ?
Ich vermute dass es sich hierbei einfach nur um eine delaration handelt. ALso das wenn ich LED_PORT Schreibe wird PORTB angesprochen.
Hiermit kann ich nichts anfangen.
Gast
#1802855
A. R. schrieb: > wenn ich in C einen Pin als Ausgang einstelln möchte. Dann verwendet man > folgenden Befehlt. > PORTB = PORTB | 0x04; Das kann nicht funktionieren. Um einzustellen ob ein oder mehrere Pin(s) Ausgänge sein sollen wird das zugehörige DDR (Data Direction Register) verwendet. Der Zugriff auf den Port an sich setzt dann entweder die Ausgänge oder (wenn DDR nicht beschrieben) dann nur Pullup-Widerstände an den Eingängen. A. R. schrieb: > Hiermit kann ich nichts anfangen. Es bedeutet eigentlich hauptsächlich, dass du ganz dringend Literatur über C benötigst. Eine Sprache wie C kann man nicht erlernen, indem man nach dem Muster Try&Error vorgeht bzw. sich die fehlenden Grundlagen in einem Forum zusammenfrägt. Dafür gibt es in C viel zu viele Kleinigkeiten, die allesamt gleichzeitig beachtet werden wollen. Als Einstieg http://openbook.galileocomputing.de/c_von_a_bis_z/ obwohl die meisten ein gedrucktes Buch (so richtig mit Buchstaben auf Papier) bevorzugen.
Gast
#1802890
ISBN 3-8272-5669-0 C/C++ Kompendium. Von Dirk Louis, erschienen beim Mart & Technik Verlag, sehr zu empfehlen. Alles schön anhand Beispielen erklärt, nicht so trocken wie eine C/C++ - Referenz. A. R. schrieb: > @Vlad Tepesch > könntest du noch erleutern, was du genau gemacht hast? > Was machen diese "<<" ? Schritt 1: c lernen A. R. schrieb: > Wo ist der unterschied zwischen > > PIN4 > PB4 > DDB4 Schritt 2: Datenblatt des Controllers lesen A. R. schrieb: > ? > #define LED_PORT PORTBIch vermute dass es sich hierbei einfach nur um eine delaration handelt. > ALso das wenn ich LED_PORT Schreibe wird PORTB angesprochen. > > static inline void LED_INIT(void) > Hiermit kann ich nichts anfangen. Wo wir wieder bei Schritt 1 wären >Es bedeutet eigentlich hauptsächlich, dass du ganz dringend Literatur >über C benötigst. Eine Sprache wie C kann man nicht erlernen, indem man >nach dem Muster Try&Error vorgeht bzw. sich die fehlenden Grundlagen in >einem Forum zusammenfrägt. Dafür gibt es in C viel zu viele >Kleinigkeiten, die allesamt gleichzeitig beachtet werden wollen. Richtig. Deswegen habe ich versucht mir anhand der wiki auf diesem Forum ein bisschen Wissen anzueignen. http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial Ein paar Kleinigkeiten waren jedoch nicht 100%ig ersichtlich. Deswegen fragte ich hier nach. >Als Einstieg >http://openbook.galileocomputing.de/c_von_a_bis_z/ >obwohl die meisten ein gedrucktes Buch (so richtig mit Buchstaben auf >Papier) bevorzugen. Ok Danke sieht ganz gut aus. Desto mehr Informationsquellen desto besser. >ISBN 3-8272-5669-0 C/C++ Kompendium. >Von Dirk Louis, erschienen beim Mart & Technik Verlag, sehr zu >empfehlen. Alles schön anhand Beispielen erklärt, nicht so trocken wie >eine C/C++ - Referenz. Danke für den Vorschlag. Werde aber erstmal versuchen mir anhand des Internets Informationen anzueignen. Wobei ein Buch meistens geordneter ist und halt seine Vorteile hat. 15Euro ist eigendlich nicht die Menge währe also eine Investition wert. >Schritt 1: c lernen Das erinnert mich an ein Echo. Ich frage in einem Forum nach etwas Hilfe zu C-Programmierung. Die Antwort ist dann, dass ich C lernen soll.
Gast
#1802970
A. R. schrieb: >>Schritt 1: c lernen > > Das erinnert mich an ein Echo. > Ich frage in einem Forum nach etwas Hilfe zu C-Programmierung. > Die Antwort ist dann, dass ich C lernen soll Japp, aber Du fragst nach Grundlagen und diese soll jedes C-Buch dir beibringen können. Ich kann auch Karl heinz's Buch als Einstieg empfehlen (C von A bis Z). A. R. schrieb: > http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial > Ein paar Kleinigkeiten waren jedoch nicht 100%ig ersichtlich. > Deswegen fragte ich hier nach. Die 'Kleinigkeiten' um die es aber in der Antwort ging, hängen mit dem Präprozessor und seiner Arbeitsweise zusammen. Und das sind keine µC-spezifischen Dinge mehr, sondern massive C-Grundlagen. > Wobei ein Buch meistens geordneter ist und halt seine Vorteile hat. > 15Euro ist eigendlich nicht die Menge währe also eine Investition wert. Auf jeden Fall. Die meisten Online-C-Tutorien kannst du getrost vergessen. Die meisten laufen nach dem Schema ab: Ich fang mal enthusiastisch an! Nach 15 Tagen dann: Mist, das ist doch mehr Arbeit als ich gedacht habe. Nach 3 Wochen: Ich mag nicht mehr; vieles ist zwar unvollständig beschrieben und die Hälfte dessen was es zu sagen gäbe ist überhaupt noch nicht angefangen, aber ich will jetzt nicht mehr. Ein vernünftiges C Buch hat nicht umsonst über 150 Seiten. Ich hab aber noch selten ein C-Tutorium gesehen, welches es auf mehr als 30 Seiten gebracht hat. > Ich frage in einem Forum nach etwas Hilfe zu C-Programmierung. > Die Antwort ist dann, dass ich C lernen soll. Das mag daran liegen, das es mit 'etwas Hilfe' nicht getan ist. Wenn du in einem Matheforum nach 'etwas Hilfe zur Integralrechnung' fragst und aus der Fragestellung geht hervor, dass du vom Konzept der Klammerung von Teilausdrücken noch nie etwas gehört hast, dann wird dich jeder verantwortungsvolle Teilnehmer in diesem Matheforum erst mal in einen Grundkurs Mathe schicken. Weil es nun mal keinen Sinn macht über zb. Partialbruchzerlegung zu debattieren, wenn du keine Formeln umformen kannst. Ich persönlich hab bezüglich µC mit dem AVR-GCC-Tut angefangen und Schrittweise durchgearbeitet, was ich dort nicht verstanden habe ich gleich gegoogelt oder im "Kernighan / Ritchie" nachgeschlagen (auch wenn der meiner Meinung nach manchmal etwas durcheinander ist - aber wenn man's gefunden hat ist es verständlich). Zusammen mit dem Datenblatt vom Atmega8 war ich dann in 2 Wochen recht fit. Vorkenntnisse in C++ am Computer hab ich mit dem Skript "Einführung in die Programmierung mit C++" von Thomas Letschert (gibts online) erlangt, sind zwei Teile und doch recht umfangreich. Ob's dir beste Methode ist, ist aber evtl. zu bezweifeln: >> zusätzlich das 4. Bit gesetzt wird > > Nein. Es ist entweder das zweite oder dritte Bit. Je nachdem ob du von 0 > oder 1 anfängst zu zählen. Sorry, stimmt natürlich - absoluter Aussetzer meinerseits - hab halt das 0-Bit mitgezählt (0 - 1 - 2 - 4) :-) (liegt an der Prüfungszeit, bin halt grad nicht ganz klar im Kopf) > Habe nun folgendes Skript geschrieben.
Du solltest die selbe Terminologie wie der Rest der Welt verwenden. Ein
Textfile mit Zeilen nach dem C-Syntax ist kein Skript (und auch kein
Script) sondern es handelt sich um ein Programm oder einen Quelltext
aka. Sourcecode.
Könnt ihr für den Anfang die Software "Microsoft Visual Studio 2010 Ultimate" empfehlen? A. R. schrieb: > Könnt ihr für den Anfang die Software "Microsoft Visual Studio 2010 > Ultimate" empfehlen? Ich kann mir nicht vorstellen, dass du die Version kaufen willst. Oder hat du mal auf die SChnelle rund 13000€ zur Verfügung? :-) Von Microsoft gibt es auch kostenlose Entwicklungswerkzeuge. Das wären die Express Versionen. Mit den paar Einschränkungen, die diese Version gegenüber der Profi-Version hat, kannst du lange Zeit gut leben. Das was die Profi Versionen ausmachen und was die mehr können, wirst du die nächsten Jahre allesamt nicht brauchen.
Gast
#1804120
A. R. schrieb: > Könnt ihr für den Anfang die Software "Microsoft Visual Studio 2010 > Ultimate" empfehlen? Na das ist wie als Führerscheinneuling erstmal in einen Ferrari einzusteigen und direkt gegen die Wand zu fahren. Ich würde zum Einstieg einen Texteditor mit Syntax-Highlighting + gcc empfehlen Die Software gibts scheinbar auch billiger. http://www.chip.de/preisvergleich/141983/Microsoft-Visual-Studio-2010-Ultimate.html Geht aber nicht um die Preisfrage sondern um die Frage ob es sich mit der Software gut arbeiten lässt. Ein Ferrari hat aber auch viele Vorteile für einen Fahranfänger. Man denke an das Einparken am Berg. A. R. schrieb: > Die Software gibts scheinbar auch billiger. > > http://www.chip.de/preisvergleich/141983/Microsoft-Visual-Studio-2010-Ultimate.html Von mir aus - kauf sie dir, wenn du meinst. Diese Version kann Dinge, von denen du in 10 Jahren noch nicht weißt, wofür man die überhaupt braucht, bzw. bei welchem Problemkreis man sie einsetzt. Und nein, diese Dinge haben nichts mit C++ zu tun sondern mehr mit dem Problemkreis: Wie kriegt man einen Haufen Softwerker unter einen Hut, so dass alle am gleichen Strang ziehen und keiner in seiner Arbeit behindert wird und man trotzdem Projekte unter Kontrolle halten kann. Nur damit wir uns richtig verstehen: ab 50 Entwickler aufwärts. > Geht aber nicht um die Preisfrage sondern um die Frage ob es sich mit > der Software gut arbeiten lässt. Visual Studio ist keine schlechte IDE. Einzig und alleine von diesem 'Managed C++' würd ich die Finger lassen. Lerne erst mal richtiges C++ und wenn du dann mit .Net weitermachen willst, wechsel zu C# (oder was dann zu diesem Zeitpunkt Hipp ist)
Gast
#1804204
Karl heinz Buchegger schrieb: > Einzig und alleine von diesem 'Managed C++' Es sind ja einige hier gegen "Managed C++", bei eurer Kritik (ich kenne es gar nicht) schließt ihr da C++/CLI mit ein? Das ist ja der Nachfolger von C++/CLI. Ich vermute ja, denn C# ist ja eine eigenständige Programmiersprache und das hast du ihm ja nahegelegt. eklige Tunke schrieb: > Karl heinz Buchegger schrieb: >> Einzig und alleine von diesem 'Managed C++' > Es sind ja einige hier gegen "Managed C++", bei eurer Kritik (ich kenne > es gar nicht) schließt ihr da C++/CLI mit ein? Das ist ja der Nachfolger > von C++/CLI. Es ist eine Perversion, die gegen alle Grundsätze dessen, wofür C++ eigentlich steht, verstößt. Managed C++ hat mit C++ ungefähr soviel gemein, wie C# mit C gemein hat: so gut wie gar nichts. Die managed Extensions existieren in diesem C++ Konglomerat nur aus einem einzigen Grund: Um den Spaghat zu CLI zu schaffen. Nur: Wenn du eine Sprache brauchst, mit der man auf dem CLI aufsetzen kann (vulgo: .Net), dann ist C# (oder Visual Basic) die deutlich bessere Wahl. Die Sprache wurde von vorneherein so designed, dass sie nahtlos ans CLI drannpasst. Bei C++ musste man Krücken einbauen, damit das möglich wird. Krücken, die nichts mehr mit C++ zu tun haben. >Von mir aus - kauf sie dir, wenn du meinst.
Ich bin im Moment in der Lage die Version kostenlos zu bekommen. Also
legal.
Es schadet also nicht etwas "herrum zu spielen".
Jedoch ist es scheibar fürs Programmieren von Programmen für Windows
etc. ausgelegt. Es hat also nicht viel mit der Anwendung mit
Mikrocontrollern zu tun. Desweiteren sind auch ein paar Befehle
andersder. Denn es erfolgt u.a. keine "direkte" Textausgabe.
Vielleicht könnte ich versuchen einen Taschenrechner oder soetwas zu
programmieren. Also das Anwenden verschiedener Formate wie integer,
Fließkomme etc. üben.
Soetwas sollte doch mit diesem Programm möglich sein oder?
A. R. schrieb: > Soetwas sollte doch mit diesem Programm möglich sein oder? Natürlich. Mit Visual Studio werden Projekte realisiert, die viele Millionen Code umfassen und an denen >50 Entwickler beteiligt sind.
Gast
#1804239
Danke für die Antwort... Karl heinz Buchegger schrieb: > eklige Tunke schrieb: >> Karl heinz Buchegger schrieb: >>> Einzig und alleine von diesem 'Managed C++' >> Es sind ja einige hier gegen "Managed C++", bei eurer Kritik (ich kenne >> es gar nicht) schließt ihr da C++/CLI mit ein? Das ist ja der Nachfolger >> von C++/CLI. > Managed C++ hat mit C++ ungefähr soviel gemein, wie C# mit C gemein hat: > so gut wie gar nichts. Ok, ein Ja hätte genügt. Aber diese Art von Ja ist eindrucksvoll. ;-) Im übrigen war "Das ist ja der Nachfolger von C++/CLI" natürlich Quatsch. "Das (C++/CLI) ist ja der Nachfolger von 'managed C++'" wäre richtig. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|