Aloha zusammen, ich hab grad die glorreiche Aufgabe eine Atmega Programmierung von Basic in C zu übersetzten. Wir haben config Dateien, in denen die einzelnen Gruppen ihre Pinbelegungen und verwendeten Register angeben und diese werden dann im vorgefertigten Code verwendet um das System zu testen. In Basic wurde das durch ALIAS bewerkstelligt. Dig_fs Alias Pina.6 Pwm_al Alias Ocr1al Pwm_bl Alias Ocr1bl Cw_ccw_a Alias Portc.5 Cw_ccw_b Alias Portc.4 Was ja eigentlich nichts anderes ist wie einen Pointer auf dieses Register/Pin zu legen. Ich frag mich jetzt wie ich in C das am geschicktesten umsetzten kann? Im Programmcode wird dann halt irgendwann zum Beispiel Pwm_al = 255 gesetzt und das sollte dann am Ocr1al ankommen. Ich weiß wie ich in ein Register direkt schreib, aber ich hab grad keine Ahnung wie ich das über einen pointer machen soll und hab bisher über google nichts gefunden was mich dahin bringen würde. Es dankt der Neuling der bestimmt wieder eine Frage stellt die 100 beantwortet wurde, aber die Antwort nicht findet.
Damit definier ich doch ne symbolische Konstante und Konstanten kann man doch keine Werte zuweisen oder denk ich da jetzt falsch?
Sven Schultschik schrieb: > Damit definier ich doch ne symbolische Konstante und Konstanten kann man > doch keine Werte zuweisen oder denk ich da jetzt falsch? Da denkst du fast richtig, ein define definiert eine Textersetzung, keine Konstante. Das ist halt das Verfahren, mit dem man so etwas in C macht. Die Zuweisung steht dann später im Programm. Du wirst nicht drumherum kommen, C richtig zu lernen, und dann das Basic-Programm in C neu zu schreiben. Nicht als 1:1-Übersetung der Basic-Anwweisungen, sondern als C-Programm, das das gleiche macht. Oliver
Sven Schultschik schrieb: > ich hab grad die glorreiche Aufgabe eine Atmega Programmierung von Basic > in C zu übersetzten. Ist doch eine schöne Aufgabe. Sven Schultschik schrieb: > Damit definier ich doch ne symbolische Konstante und Konstanten kann man > doch keine Werte zuweisen oder denk ich da jetzt falsch? Falsch. Ein #define sorgt für Textersetzung, da werden nicht zwingend Konstanten definiert. Das selbe macht das Alias, es sagt dem Preprozessor/Compiler dass er den linken Text im Programm durch den Text rechts vom "Alias" ersetzen soll. Ist dieser Text nicht identisch mit irgendeinem gültigen Ausdruck oder Symbol, kommt es zu Fehlermeldungen. d.h. in deinem Fall muss z.B. Pina6 irgendwo anders definiert sein. Gruß, Edson
Danke für eure Antworten. Ich lerne Sprachen immer ganz gerne an Projekten um die Motivation und den Druck aufrecht zu erhalten ;) Hab mir jetzt auch das openbook was hier empfohlen wird mal gezogen. Da ist define auch besser erklärt wie in dem Teil was ich besser hab. Mein vorgehen ist im Moment das Basic programm verstehen, überlegen wie ich es umsetzten will um es ggf einfacher zu gestalten und zu schauen wa sich in C tun muss um den gewünschten Effekt zu erhalten. 1:1 kopieren geht nicht, da noch ne Menge Bascom kram mit drin rum hängt, was ich eh selber implementieren muss ^^
svan schu schrieb: > Danke für eure Antworten. Ich lerne Sprachen immer ganz gerne an > Projekten um die Motivation und den Druck aufrecht zu erhalten ;) Alles schön und gut. Nur funktioniert das nur dann, wenn du bereits einen Grundstock an Fähigkeiten in einer Sprache hast. Man kann so vorgehen, dass man die Details erst dann 'dazulernt', wenn die Notwendigkeit dazu besteht. Aber ohne den erst mal notwendigen generellen Unterbau steht man auf verlorenem Posten. Im Prinzip kann man Dig_fs Alias Porta.6 Dig_fs = 1 durch #define SET_BIT( port, bit ) ( port |= ( 1 << bit ) ) #define DIG_FS_PORT PORTA #define DIG_FS_BIT PA6 SET_BIT( DIG_FS_PORT, DIG_FS_BIT ); ersetzen. Man kann das auch noch weiter treiben und zb mittels Strukturen schönere Syntax erzielen, so dass man auch in C wieder schreiben kann Dig_fs = 1; aber dazu muss man dann schon C ganz gut intus haben.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.