mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik IAR Workbench


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ 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

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Markus: Oh, stimmt. Es musste natürlich

P1OUT|=4;

heissen.

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Ralf:

eine XXX.C Datei ist meines Wissens nicht zu includen. Mach es doch im
Projekt unter add file. Evtl funzt das.
Michael

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Sebastian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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. ;-)

Autor: Christof Krüger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ;)

Autor: Guillermo Benites (benites)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.