DEUTSCHE VERSION |
|
Links | | | Forums | | | Comments | | | Report news |
Chat | | | Polls | | | Newsticker | | | Archive |
amiga-news.de Forum > Programmierung > parallelport mit gcc | [ - Search - New posts - Register - Login - ] |
-1- | [ - Post reply - ] |
2004-11-22, 00:23 h Bernhard Posts: 144 User |
Hallo! Ich habe ein kleines Problem. Und zwar möchte ich am Paralleport vom Amiga ein paar Pins ein und ausschalten, nur weiß ich nicht so recht, wie ich die ansteuern kann. hab mal ein kleines programm geschrieben, nur irgendwas ist da falsch und der Amiga stürtzt ab. Das Programm: #include<stdio.h> #include<stdlib.h> #define BASEPORT *(int*)0xBFE101 #define PORTINIT *(int*)0xBFE301 main(int argc, char *argv[]) { int a; if(argc!=2){perror("argc");exit(1);} PORTINIT=0xFF; a=atoi(argv[1]); BASEPORT=a; } was läuft da falsch und wie kann i des ändern dass es hinhaut. Danke Bernhard [ - Answer - Quote - Direct link - ] |
2004-11-22, 11:18 h thomas Posts: 7718 User |
Die CIA-Register sind Bytes, keine Longwords. Wenn du mit int drauf schreibst, nagelst du direkt vier Register auf einmal zu. Noch dazu schreibst du ein Langwort auf eine ungerade Adresse, was beim 68000 definitiv zu einem Absturz führt. Korrekt wäre #define CIA_A_PRB *(unsigned char *)0xBFE101 #define CIA_A_DDRB *(unsigned char *)0xBFE301 Naja, und daß du den CIA eigentlich erst reservieren mußt bevor du auf die Register zugreifen darfst, sollte ich hier nicht erwähnen müssen. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ Dieser Beitrag wurde von thomas am 22.11.2004 editiert. ] [ - Answer - Quote - Direct link - ] |
2004-11-22, 14:36 h Bernhard Posts: 144 User |
Hallo! Danke. hab mir schon sowas gedacht. In dem quellcode wo ich das herhabe, stand es so: #define BASEPORT *(byte*)0xBFE101 nur der gcc konnte mit "byte" nix anfangen und da hab i des einfach geändert und das war wohl der fehler! Hab das programm dann so wie ich es abgedruckt hab unter WinUAE kompiliert und testweise laufen lassen und da gabs keine probleme. und dann hab ich es auf meinen A600 rüberkopiert und der ist abgeschmiert. werds dann heut abend gleich ausprobieren. Und wie geht das mit den adressen reservieren? Danke Bernhard [ - Answer - Quote - Direct link - ] |
2004-11-22, 15:57 h gni Posts: 1106 User |
Zitat:"byte" war vermutlich ein typedef oder #define. Eventuell mußt Du auch noch "volatile" benutzen. Zitat:Nicht Adressen werden reserviert, sondern man sichert sich den (exklusiven) Zugriff auf Resourcen. Hier mußt Du Dich um die entsprechende cia<X>.resource bemühen. [ - Answer - Quote - Direct link - ] |
2004-11-22, 16:18 h Bernhard Posts: 144 User |
gut, also das mit den bytes krieg ich hin. Wie schauts jetzt mit den ressourcen aus? wo muss ich die wie reservieren. hab da leider ned so viel ahnung davon. Danke Bernhard [ - Answer - Quote - Direct link - ] |
2004-11-22, 16:37 h thomas Posts: 7718 User |
Die cia.resource ist nur für die Interrupts. Du brauchst die misc.resource. Beispiel: code:#include <proto/exec.h> #include <proto/misc.h> #include <resources/misc.h> struct Library *MiscBase; int main (void) { if (MiscBase = (struct Library *) OpenResource ("misc.resource")) { if (!AllocMiscResource (MR_PARALLELPORT,"My Program Name")) { /* hier darfst du dich austoben */ FreeMiscResource (MR_PARALLELPORT); } } return (0); } Übrigens, AllocMiscResource gibt einen Pointer zurück. Wenn er nicht Null ist, zeigt er auf den Namen desjenigen, der die Resource gerade benutzt. Gruß Thomas -- Email: thomas-rapp@web.de Home: home.t-online.de/home/thomas-rapp/ [ - Answer - Quote - Direct link - ] |
2004-11-22, 17:49 h Gazelle Posts: 151 User |
Falls Du nicht alles selber machen willst: Es gibt ein kleines Programm, mittels dem man über ARexx den Parallelport des Amigas steuern kann, zu finden im Aminet: paarexx.lha util/rexx 19K 432 Arexx Server to control parallel port lines V1.0 Einfach Paarexx starten und dann mittels ARexx die Pins ein- und ausschalten. Die EMail vom Autor ist sicherlich nicht mehr korrekt, allerdings kenne ich ihn persönlich. Falls Du Kontakt wünschst kann ich als Vermittler dienen. hth, Bernd [ - Answer - Quote - Direct link - ] |
2004-11-23, 19:09 h Bernhard Posts: 144 User |
Hallo Bin erst heute zum ausprobieren gekommen. @thomas: Danke für den code. nur leider haut der mit dem gcc nicht hin. hab jetzt "struct Node *MiscBase;" gemacht und dann gehts. ich hoff dass das so richtig ist. @gazelle: Danke für den tipp mit dem arexx-script, aber ich möchte es selber lernen und es soll auch auf nem A600 ohne arexx laufen und soll zur vorbereitung für was größeres dienen. danke an alle für die tips! Bernhard [ - Answer - Quote - Direct link - ] |
-1- | [ - Post reply - ] |
amiga-news.de Forum > Programmierung > parallelport mit gcc | [ - Search - New posts - Register - Login - ] |
Masthead |
Privacy policy |
Netiquette |
Advertising |
Contact
Copyright © 1998-2024 by amiga-news.de - all rights reserved. |