Hallo! Ich habe zwei kleine Fragen zur Entwicklungsumgebung IAR Embedded Workbench für AVR... 1. Ich brauche eine Funktion, die nur ein Bit eines Ports setzt. Ich übergebe ihr also bsp. PORTD und 3 und die Funktion soll dann PD3 setzen. Gibt es da fertige Funktionen oder muss man das selbst coden? 2. Wie kann man Funktionen aus einer anderen C Datei einbinden? Mit "extern" hab ich es nicht hingekriegt ... Die Dokumentation zu diesem Programm sowie die Hilfe und die Tutorials lassen sehr zu wünschen übrig ... Danke! Grüße Ralf
zu Frage 1: #define bit_0 0x01 #define bit_1 0x02 ... #define bit_7 0x80 // bit setzen PORTX = PORTX | bit_0 //bit löschen PORTX = PORTX &~ bit_0 zu 2: indem du die ganze C-Datei einbindest, und zwar unter Projekt Files add Michael
Hi Ralf, ich benutze die IAR Workbench in meinen Projekten. Vielleicht hilft dir also schon ein Blick in den ein oder anderen meiner Sourcecodes weiter ... (www.mathar.com) Zu deinen Fragen: Ein einzelnes Bit (z.B. Nummer 3) setzt man über P1OUT|=3; Deine Funktion wäre also einfach void SetBit(char* portname, char bit) { switch (portname) // hier jetzt alle deine Ports rein ... // z.B. bei PORTD: PORTD|=bit; // und weiter mit allen anderen Ports ... } Einbinden von externen Sourcen geht normalerweise einfach über #include. Oder was möchtest du? Du kannst (musst aber nicht, je nach Compilereinstellungen) den Prototypen über "extern" deklarieren. Das eigentliche Einbinden geht aber über #include.
Ok, ich habe jetzt eine weitere Datei angelegt und ein paar C Funktionen inkludiert ... Wenn ich jetzt in die Hauptdatei schreibe #include <access.c> dann erscheint beim kompilieren Fehlermeldungen, dass PORTB etc. nicht deklariert ist. Wenn ich dann in der acccess.c auch die iom8515.h inkludiere, dann erscheinen warnings (redefinitions). Was mach ich da falsch? Grüße Ralf
@ Ralf wenn du die neueste Version 3.20 verwendest, dann probier mal unter Project-> Options-> General -> Library Configurations ein Häkchen zu setzen bei "Enable bit definitions in IO-Include files". Dann sollte das klappen mit dem Erkennen von PORTB usw. Bei einer anderen Version muß das auch irgendwo da einstellbar sein. @Sebastian "Zu deinen Fragen: Ein einzelnes Bit (z.B. Nummer 3) setzt man über P1OUT|=3;" das setzt doch Bit0 und Bit1 und nicht das dritte Bit, oder? Ich denke so wie es Michael beschrieben hat ist es richtig. Gruß Markus
Bitmanipulationen sind doch schon in der C-Bibel beschrieben :-) Bit setzen: regvar |= (1 << bit) Löschen: regvar &= ~(1 << bit) Exklusiv-Oder: regvar ^= (1 << bit) ...usw...
Ich hab die neue Version und habe das Häkchen gesetzt. Leider ändert es gar nichts an den Fehlermeldungen ... in der Maindatei hab ich so die Headerfiles inkludiert: #define ENABLE_BIT_DEFINITIONS 1 #include <iom8515.h> #include <inavr.h> #include <stdbool.h> #include "access.c" Und in der access.c dann nichts mehr deklariert. So kommen die Fehler "Error: Identifier PORTB is undefined" Grüße Ralf
@ Ralf: eine XXX.C Datei ist meines Wissens nicht zu includen. Mach es doch im Projekt unter add file. Evtl funzt das. Michael
Doch, C-Files kann man auch includen. Der include-Befehl macht nix anderes als den Inhalt der Datei 1:1 reinzukopieren. Ob das eine H- oder C-Datei ist, ist dem Präprozessor egal.
Seit wann included man c-files? Ich kann auch rückwärts auf der Autobahn fahren, das geht auch, deshalb mache ich es aber noch lange nicht ;) Kenne mich jetzt zwar nicht mit IAR aus, aber generell included man header-files und die c-files werden einzeln kompiliert und dann erst durch den Linker "gelinkt". Das steht in den erste paar Kapiteln jedes halbwegs brauchbaren c-buches.
Joo, so macht man es eigentlich. Aber ich wollte irgendwann mal meinen Code etwas übersichtlicher machen und habe aus Faulheit ein paar LCD-Routinen in eine externe lcd.c geschoben und in der main.c dann #include "lcd.c"; gemacht. Das geht schon einwandfrei ... Ob es schön ist, ist die andere Frage. ;-)
Naja, "übersichtlicher" wäre es folgendermaßen: Du lagerst bestimmte Routinen in eine lcd.c aus, evtl. hast du dann auch Hilfsprozeduren drin, die von aussen gar nicht benutzt werden, die machst du dann static. Wenn du die lcd.c dann fertig hast, hast du ja paar Funktionen als Interface. Die schreibst du in eine lcd.h, am besten mit paar Kommentaren, wie die Funktionen zu benutzen sind. Dann schreibst du in der .c-Datei, die deine lcd-Routinen benutzen soll #include "lcd.h" und fügst die lcd.c in dein Projekt ein, so dass der Compiler die lcd.c kompiliert und der Linker das Object-File mitlinkt. DAS ist übersichtlich ;)
Hallo, Ich arbeitet mit dem C-Compiler von IAR, um einen AVR ATmega88 Mikrokontroller zu programmieren. Ich wollte fragen, ob jemand mir die Datei "iom88.h" schicken kann, weil diese versehentlich gelöscht wurde. Danke im Voraus Benites
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.