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.
> 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
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
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.
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
>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
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:
1
PORTB=PORTB|(1<<PIN4);
oder noch lesbarer:
1
PORTB|=(1<<PIN4);
viele schreiben auch
1
PORTB|=(1<<PB4);
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
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.
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.
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.
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.
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
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)
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.
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.