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?
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. ;-)
#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
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!?!?!?!
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
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. ;-)"
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!
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
"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
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
"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.
Oder im Usenet-Jargon: plonk. ,,Alle anderen sind blöd außer mir.''
kann es sein, egal was man hier schreibt, man bekommt keine Hilfe?!?!?! MfG Johannes
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.
hallo... ich will einfach nur wissen wie es mit den interrupts funktioniert MfG Johannes
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.
Lieber Johannes, man bekommt hier prima Hilfe. Grüße Stefan PS: es hilfreich sich vorher mit den Zusammenhängen zu befassen.
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
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:
1 | void mruselgrumpf( void ) interrupt 0 |
2 | {
|
3 | // hier was reinschreiben
|
4 | }
|
Peter P.S.: Nächstes mal aber keine uralten Threads hijacken, gelle.
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.