Hi, ich benutze codevision um meine programme zu erstellen. ich habe mit dem wizard eine programmvorlage mit RX INTERRUPT erstellt. das mit der routine empfangene hole ich mit *strcpy aus dem string des puffers heraus. funktioniert soweit ganz gut, nur wie lösch ich nach dem herausholen der daten aus "rx_buffer" selbigen? habe schon so ziemlich alles probiert was geht, will einfach nicht funktionieren. hat das schonmal jemand so gemacht? freue mich über jede info, schatta
Stell mal deinen Coder als Anhang bereit. So kann ich dir nicht weiterhelfen. Ich weiß nicht was der CodeVision für einen Code erzeugt. Ich schreibe solche Routinen immer selber. Gruß, Florian
Hi, sorry hab ich ganz vergessen... das ganze soll einen string empfangen, auf lcd ausgeben, ne reziproke freq-messungung ddurchführen und wieda alles zurück senden... den rest habe ich glaube ich ausführlich mit kommentaren bestückt... so far, thomas p.s. ich weiss, entprellen etc. mit delay verschwendet rechenzeit, aber die brauch ich eh nich bei der anwendung...
Na Super, ein C-Wizard, der Assembler einfügt. Wer soll da denn noch durchsehen. Nimm lieber WINAVR und schreib Dir der Puffer selber und in C. Peter
Hi, das ist ein Project für die Schule und hier wurden wir beauftragt es mit CodeVision zu machen....leider fehlt den Lehrern jede fachkopmpetenz um mir hier weiterzuhelfen. WinAVR hab ich mal installiert zuhause, hab da aber nicht durchgeblickt...zudem würde ich mir im Moment nich drüber hinaussehen soetwas selbst zu schreiben, da ich Neuling auf dem Gebiet der µCs bin... mfG, thomas
Hallo Schatta! Das macht man am besten so: void main(void) { unsigned char abholen; .. while(1) { if(rx_counter!=0) { abholen=getchar(); } } Das heisst die Daten werden in der IRQ-Routine in den Buffer gestellt. Das Hauptprogramm fragt den rx_counter ab, ob sich etwas im Buffer befindet. Befindet sich etwas im Buffer, so holt man das Zeichen einfach mit getchar ab. Die Funktion Getchar regelt das mit dem Buffer. @Peter Es wäre ziemlich dumm das Ganze unter C zu programmieren, da das Ganze vom Compiler-Hersteller auf Geschwindigkeit optimiert ist. Mit #pragma savreg(+,-) kann man das Sichern der Register in den Einsprung in die IRQ-Routine ein und abschalten. Durch das Abschalten muss nacher mit Assembler weitergemacht werden, da sonst irgendwelche wichtigen Register überschrieben werden würden. Ab und zu muss man auch auf andere Programmierer vertrauen und die Kontrolle loslassen. Ich habe diese ganze IRQ-Steuerung mit Senden und Empfangen mal richtig durchgetestet und sie funktioniert großartig. Tschüss Markus
Hi, danke für den tip! ich habe es in leicht abgeänderter form in mein programm eingebaut! jetzt bleibt nur noch zu hoffen dass es auch klappt! betentu kanns leider erst morgen testen, werd euch dann aber berichten! so far, schatta
eigentlich muss man bei codevision gar nichts mehr tun wenn er die funktionen eingefügt hat... einfach nur char c; ... while(1) { c = getchar(); } rx_counter wird schon in getchar abgefragt, also soll heißen er geht da in ne endlosschleife, bis daten eintreffen.
@Markus "Es wäre ziemlich dumm das Ganze unter C zu programmieren, da das Ganze vom Compiler-Hersteller auf Geschwindigkeit optimiert ist." Nein wäre es nicht. Selbst mit kleinstem Vorteiler sind satte 160 Zyklen zwischen den Bytes und das reicht bequem, um auch in C ein Byte in einen Puffer zu schreiben. Ich würde ich daher nie so einen Wizard einsetzen, da ich mehrere verschiedene MCs verwende und deshalb den Code möglichst portabel halten will. Peter
@ape rx_counter wird schon in getchar abgefragt, also soll heißen er geht da in ne endlosschleife, bis daten eintreffen. Ja. Dann kann aber das Hauptprogramm nichts mehr machen, da die Funktion wartet bis ein Zeichen eingetroffen ist. Besser ist es meines erachtens nach, wenn man erst dann das Getchar abfragt, wenn auch wirklich ein Zeichen im Buffer steht. if(rx_counter!=0) { abholen=getchar(); } @Peter Das mit der Portierbarkeit ist natürlich immer ein Argument. So gesehen hast du recht. Tschüss Markus
Ja. Dann kann aber das Hauptprogramm nichts mehr machen ja das ist meistens so bei endlosschleifen :) hatte jetzt noch in erinnerung, das schatta meinte rechenzeit wäre egal und wenn sein programm irgendwas mit dem string tun soll hat es eh nichts weiter zu tun als auf den string zu warten.
Hi, also erstmal sorry wenn ich den beitrag nochmals hochhole, falls dies hier nicht gewünscht ist! nach etlichen weiteren versuchen und nachdem wieder nichts klappte schrieb ich dann den leuten von codevision. mein kompliment an diese firma, innerhalb von 3stunden war eine antwort im postkasten, die wie folgt lautete: AUSZUG: .... You must use getchar() to retrieve characters from the buffer: char received_text[32]; int receive_string (char *p) { int received_chars=0; while (rx_counter) { *p=getchar(); ++p; ++received_chars; }; *p=0; // null terminate the received string return received_chars; } main() { receive_string(received_text); } ........ erstmal blickte ich ganz schockiert als anfänger auf diese antwort aber nach kleinen modifikationen funktionierte es auf anhieb. wie es hier scheint ist rx_counter keine zahl die hochzähltt sondern nur 1 oder 0.....denk ich mir mal (bitte um korrektur falls nötig) da ich die anzahl der chars nich brauchte baute ich das ganze um: void get_data (char *p) //uebernimmt Daten aus dem Puffer { while (rx_counter) { *p=getchar(); ++p; }; *p=0; } in dieser konstellation funktioniert es wunderbar, aber fragt mich bitte nicht warum ;) ich dachte ich hol das ganze nochmals hoch, da vielleicht doch den einen oder anderen interessiert.....und dass derjenige nich die selbe zeit investieren muss wie ich! auch nochmal danke an alle die mir im beitrag geholfen haben. mfG, schatta p.s.:weiss jemand wos grundlagen zur reziproken frequenzmessung gibt? hab bis jetzt im web nur 1 beispiel gefunden...im forum hier is auch kein beispiel oder bin ich blind
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.