www.mikrocontroller.net

Forum: Compiler & IDEs interrupts mit c in assembler


Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi.

ich möchte interrupts mit c in assembler realisieren. in assembler
kenne ich den souce, nur ich weiss nciht wie das unter c funktionieren
soll.
in assembler springt er im moment des auslösens auf eine adresse, ist
ja alles kein problem, nur wie soll der c-source dazu aussehen?
hat jemand ein beispiel programm?

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du redest recht konfus.  Wie willst du etwas ,,in C in assembler''
schreiben?  Inline-assembler?  Gibt's, aber warum dann unbedingt
inline-assembler und nicht gleich eine separate Assemblerdatei?

Versuch doch erstmal, die Doku und Beispiele zu lesen und zu verstehen
und danach, dich so auszudrücken, dass es jemand anders nachvollziehen
kann. ;-)

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#define SIGNALN(signame)                                 \
void signame (void) _attribute_ ((naked));             \
void signame (void)


SIGNALN(SIG_INPUT_CAPTURE1)
{

//                 hier hau den Assembler rein
//                 die syntax steht in der Doku

  asm volatile("reti"::); // hier mal ein Beispiel für assembler
}


Peter

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
normalerweise sieht ein assembler prog so aus:

-------------------------------------------------------------
$IC(sfr.def)
ORG 4000H //frei wählbar

source...................
..................
........................
...................


....................

ORG INTERRUPTADRESSE
source.............
......was er dann tun soll.........
..............................
..............................
reti //er geht wieder an die stelle, wo er vorher ausgestiegen ist,
                  da der interrupt betätigt wurde!

END

-------------------------------------------------------------
Diesen source will ich auch mit einem cross compiler realisieren, also
unter c, für assembler!

ist das jetzt verständlich oder immer noch nciht!?!?!?!

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sagt doch dann einfach, wenn ihr noch nciht soweit in der sprache seit
und tut nicht so, als wenn ihr es nicht versteht!
ich habe euch jetzt auch noch ein assembler prog. hingeschrieben, also
einfacher kann ich doch meine fragen nicht stellen...
und jemand vom fach, versteht es 100%ig!

naja egal, habe schon von einigen gehört, das man in diesem forum nciht
wirklich weiter kommt oder korrekte antworten, jetzt weiss ich es auch

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Du nicht in der Lage bist, Deine Forderung

  "Diesen source will ich auch mit einem cross compiler realisieren,
  also unter c, für assembler!"

zu präzisieren, dann kann Dir keiner helfen.

Was um alles in der Welt magst Du mit "unter c, für assembler!"
meinen?
Ich programmiere seit etwa 15 Jahren in C und schon einige Jahre länger
in Assembler; Du kannst also davon ausgehen, daß ich schon "vom Fach"
bin und auch "soweit in der sprache" bin, daß ich weiß, wovon ich
rede.

Ich kann daher nur den Jörg (der nun wirklich weiß, wovon er redet)
etwas abgewandelt zitieren:

  "Versuch doch erstmal (...) dich so auszudrücken, dass es
  jemand anders nachvollziehen kann. ;-)"

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, deine Sprache ist leider wirklich nicht verständlich.

Am besten, du fängst statt verschwommener Vorstellungen, wie du
etwas machen willst, damit an, was du denn machen willst.  Lös' dich
ruhig erstmal ein Stück von dem, was du kennst und kannst.  Mit an
Sicherheit grenzender Wahrscheinlichkeit wirst du all den
Assemblerkram vergessen können, weil das ohnehin auch alles in C geht.

`org' ist in einem verschieblichen Assembler übrigens praktisch tabu,
da erst der Linker entscheidet, was wohin kommt.  In einem
Hochsprachcompiler ist das erst recht tabu, da der seine eigene
Infrastruktur (Laufzeitsystem) für sowas mitbringt, d.h. die
Interruptvektortabelle wird vom Compiler/startup-Code/Linker
verwaltet.

Was dein ,,crosscompiler unter c für assembler'' sein soll, weiß ich
leider immer noch nicht.  Willst du den Assembler-Output vom Compiler
sehen?  "avr-gcc (bzw. msp430-gcc) -S <weitere Optionen> datei.c".
Danach hast du eine Datei datei.s herumliegen.  Aber die bearbeitet
man dann nicht weiter, die ist nur zum Lesen da.  Sonst brauchst du
keine Hochsprache.

Wenn du dir's im Forum mit all denjenigen, die in der Regel hier zur
Substanz in den Antworten beitragen, verscherzt, brauchst du dich
übrigens nicht wundern, wenn irgendwann mal keiner mehr mit dir redet.
Der Hinweis auf ,,Wie stelle ich ordentliche Fragen?'' von Patrick
,,OldBug'' ist schon berechtigt, bitte beherzige ihn!

Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Johannes,

wenn es die AVR Familie betrifft:

das was du wissen möchtest steht im WIKI / Tutorial.

Lies Dir bitte den Bereich "Interrupts" durch.

Beispiele liegen wirklich jede Menge herum.
Such einfach mal im forum unter interrupt - da findest Du einiges an
Code - dann hilft nur noch Lesen und Nachvollziehen

Grüße,

Stefan

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ORG 4000H //frei wählbar"

Das kannste Dir voll abschminken.

Willst Du mit C zusammenarbeiten, dann hast Du Dich gefälligst nach dem
Compiler zu richten.
Umgegekehrt geht nicht, da der Compiler kein Mensch ist und deshalb auf
Menschen keine Rücksicht nehmen muß.


Also entweder inline Assembler, wie bereits oben beschrieben oder der
steinige Weg, sich da richtig reinknien, wie man Assemblerobjekte so
deklariert, daß sie linkbar sind.

Aber einfach C und Assembler zusammenzupappen, das is nich.

Willst Du C und Assembler mixen, mußt Du in beidem ordentlich fit
sein.

Ich finde es gar nicht so schlecht, daß C es einem nicht leicht macht,
schnell mal Assemblerkrücken dazwischen zu schieben und sich so den
Programmierstil zu versauen.
Nur sehr sehr selten ist das auch wirklich nötig.


Peter

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi leute...

das beispielprogramm das ich hier aufgeschrieben habe, ist assembler
und nicht c.
ich habe dazu auch geschrieben das dies der eigentliche source ist und
ich dazu eine c version bräuchte, hätte ich jetzt ein link, zum
tutorial  des richtigen lesens, würde ich ihn jetzt geben.
ich finde es ein frechheit mir vorzuwerfen, ich könnte nicht richtig
fragen stellen, wobei man meine fragen nicht korrekt liest.

ich arbeite mit dem 8051 und kann mein startadressbereich von 4000 bis
8000 frei wählen und diesen befehl setze ich nunmal mit org z.B. 4000
ab. ich habe auch mitlerweile ätliche programme mit dem cross compiler
geschrieben und erfolgreich zum laufen gebracht. ich weiß ebenfalls das
ich mich nach dem compiler zu richten habe, denn ich programmiere nicht
erst seit gestern, wie man bei einigen das gefühl zu haben scheint.

in assembler springt das programm auf eine bestimmte adresse beim
auslösen des interrupts. mein problem besteht eigentlich nur darin, bei
der umsetzung in c und das ist auch der einzige bereich, worin ich hilfe
benötige. ich hoffe ihr könnt mal, statt dauernd alles schlecht zu
machen, einige beispielprogramme schreiben, denn das macht das
verständnis einfacher.

MfG

Johannes

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"ich habe dazu auch geschrieben das dies der eigentliche source ist und
ich dazu eine c version bräuchte"


Lies Dir mal Deine Postungs durch und nenne die Stelle, wo Du das
schonmal gesagt zu haben glaubtest.
Auch das mit dem 8051 ist total neu. Und dann wirds vermutlich auch
nicht um den GCC gehen.

Solche Leute gibts öfters, erst im xx. Posting damit ungefähr
rausrücken, was sie eigentlich wollen.

Bloß das als Frechheit zu bezeichnen, wenn sich keiner in Deinen
konfusen Texten zurechfindet, hat bisher keiner gemacht.


Ich rate Dir dringend, Deine Deutschkenntnisse zu verbessern
(insbesondere den Satzbau) und Postings erst generell einem anderen zu
lesen zu geben, ob derjenige überhaupt nur im Entferntesten versteht,
was Du sagen willst.


Peter

P.S.:
Ist das nun Frechheit oder Überheblichkeit, lauter ".............."
als Source zu bezeichnen ?
Gegen echte Sourcetexte haben wir nichts, dafür ist nämlich extra das
Feature "Dateianhang" vorgesehen.

Autor: OldBug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@peter: um es mit Jörgs Worten zu sagen: DFTT...

Autor: Jörg Wunsch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder im Usenet-Jargon: plonk.

,,Alle anderen sind blöd außer mir.''

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kann es sein, egal was man hier schreibt, man bekommt keine Hilfe?!?!?!



MfG

Johannes

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Warum, Peter hatte dein Frage schon beantwortet.

Du fragst, ob es eine "org" Anweisung für C gibt, obwohl Peter im
Posting vorher erklärt hat, dass sämtliche Speicherplatzzuweisungen vom
Compiler getroffen werden und du darauf folglich keinen Einfluß hast.

Mir ist schon klar, was du möchtest, aber es geht halt so einfach
nicht.

Autor: Johannes (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo...

ich will einfach nur wissen wie es mit den interrupts funktioniert


MfG Johannes

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, auch das wurde Dir bereits beschrieben - in der zweiten Antwort
auf Deine "Frage" von Peter D.


Du solltest dringend an Deinen sozialen Fähigkeiten arbeiten.
Vielleicht lässt sich da mit einem Kommunikationstraining noch was
geradebiegen.

Autor: Stefan Sczekalla (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Lieber Johannes,

man bekommt hier prima Hilfe.

Grüße


Stefan

PS: es hilfreich sich vorher mit den Zusammenhängen zu befassen.

Autor: Donald Duck,"DAU "unterwegs..;D (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also mir ist Johanns Frage klar, jedoch war er zunächst etwas 
unfreundlich.
Bin eigentlich auch nur auf das Forum gestoßen, weil ich das Gleich 
Problem habe. Ich hab den Intel 8051, und möchte gerne ein Interrupt 
verwenden. Man Frage ist wie heißt die Funktion die vom Interrupt 
IT0,EX0 aufgerufen wird?

Liebe Grüße

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Donald Duck,"DAU "unterwegs..;D wrote:

> Man Frage ist wie heißt die Funktion die vom Interrupt
> IT0,EX0 aufgerufen wird?

Du kannst die Funktion nennen, wie Du lustig bist (z.B. mruselgrumpf), 
Hauptsache, sie wird vom richtigen Interruptvektor aufgerufen (Keil C51: 
die Nummer hinter dem Schlüsselwort "interrupt").

Z.B. für EX0:
void mruselgrumpf( void ) interrupt 0
{
// hier was reinschreiben
}

Peter

P.S.:
Nächstes mal aber keine uralten Threads hijacken, gelle.

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.