Gast
#2694398
Hallo, #define STX PD1 ... befindet sich in der Header - Datei Kann ich diese Variable in meinem Hauptprogramm ändern? Würde gerne PD2 zuweisen. Danke für eure Hilfe. MfG Sabine
|
Anzeige
|
Variable in der Headerdatei
Gast
#2694398
Hallo, #define STX PD1 ... befindet sich in der Header - Datei Kann ich diese Variable in meinem Hauptprogramm ändern? Würde gerne PD2 zuweisen. Danke für eure Hilfe. MfG Sabine
Gast
#2694406
das ist keine Variable, sonder nur eine Ersetzung
Welche Sprache soll das sein? Wenn C dann so z.B.
in H-Datei:
extern int globaleVariable;
in C-Datei:
int globaleVariable = 0;
void main(void) {
globaleVariable = 1;
}
Was willst du erreichen?
Gast
#2694410
Sabine F. schrieb: > #define STX PD1 ... befindet sich in der Header - Datei > > > > Kann ich diese Variable in meinem Hauptprogramm ändern? Würde gerne PD2 > > zuweisen. Nein, das geht definitiv nicht... Sabine F. schrieb: > Kann ich diese Variable in meinem Hauptprogramm ändern? Das ist keine Variable, das ist eine simple Textersetzung! Einfach mal nach '#ifdef' googeln ... '#undef' ist das Zauberwort
Gast
#2694414
Danke für deinen Tipp =) Ja verwende C, kann man auch die 'Ersetzung' ändern? Kann ich vom Hauptprogramm die Ersetzung in Headerdatei ändern. Möchte nämlich zu Beginn PD1 verwenden und während des Progammes möchte ich sie gerne auf PD2 setzen. Geht das? Sabine F. schrieb: > Kann ich vom Hauptprogramm die Ersetzung in Headerdatei ändern. > Möchte nämlich zu Beginn PD1 verwenden und während des Progammes möchte > ich sie gerne auf PD2 setzen. Geht das? Du begreifst es nicht. ein define ist KEINE Variable, das ist eine Textersetzung, die vor dem compilieren durch den Präprozessor erfolgt. Zur Laufzeit kannst du nur in Variablen etwas ändern Du brauchst ein C Buch!
Gast
#2694439
"Vor" dem kompilieren ist das Stichwort. Ist das Programm erst einmal auf dem Controller, lässt sich an einer festen #define Zuweisung nichts mehr ändern. (Das # Zeichen bezeichnet Präprozessoranweisungen, die bei der Erzeugung des Maschinencodes als erste behandelt werden). Warum nimmst du nicht einfach eine zweite Zeile á la "#define STX_initial PD1" hinzu, verwendest diese Zuweisung eben nur einmal beim Start und danach immer STX (dem zu PD2 zugewiesen hast)? Es gibt sicher auch noch andere Lösungen, aber deine ursprüngliche Idee ist definitiv keine davon.
Gast
#2694443
Wie kann man dieses Problem sonst lösen? #define STX PD5 Möchte PD5 auf PD4 ändern können, damit ich zweimal das selbe auf zwei Software - UARTs senden kann. Wie könnte dies funktionieren?
Sabine F. schrieb: > Möchte PD5 auf PD4 ändern können, damit ich zweimal das selbe auf zwei > Software - UARTs senden kann. Dann brauchst du zwei Variablen. > Möchte PD5 auf PD4 ändern können, damit ich zweimal das selbe auf > zwei Software - UARTs senden kann. > > Wie könnte dies funktionieren? Indem du das implementierst, was das logischte ist: eine 2.te Software UART HIer ist deine erste
und sukzessive für alle anderen Funktionen: Allem was UART spezifisch ist, verpasst du eine angehängte _1. Aus STX wird STX_1, aus suart_init wird suart_init_1, aus sputchar wird sputchar_1, etc. etc. und dann implementierst du alles nochmal, wobei du anstelle der _1 dann eben eine _2 hast. Voila: 2 Software UART, die sauber in allen Belangen voneinander getrennt sind. Edit: In den höhreren Software Schichten könnte man das auch ein wenig eleganter machen, aber im Hinblick auf deine C-Kentnisse nehme ich davon mal Abstand. Einfach realisierbar und für dich durchschaubar lautet die Devise. Sabine F. schrieb: > Möchte PD5 auf PD4 ändern können, damit ich zweimal das selbe auf zwei > Software - UARTs senden kann. Dann schmeiß STX und SRX komplett aus der Headerdatei raus um sicherzustellen, dass sie tatsächlich auch sonst niemand benutzt. In der Implementierungsdatei schreibst du dann:
Edit: unterscheidet sich von Karl-Heinz' Vorschlag nur geringfügig in der Form, die Grundzüge der Implementierung bleiben zwischen uns beiden gleich.
Gast
#2694514
Vielen Dank, werde es versuchen. Wobei: Mit dieser Interrupt getriebenen SW-UART
könnte es interessant werden, eine 2. SW-UART aufzusetzen, die Timer-Interrupt getrieben das richtige tut und man keinen funktional gleichwertigen Timer mehr übrig hat. Insofern nehm ich meine implizite Aussage von weiter oben, das das mit kleinen Modifikationen geht, wieder zurück. Da hab ich mir das alles nicht besonders gut angesehen.
Gast
#2694589
Ich will nicht zwei Uarts gleichzeitig benützen, es reicht mir auch, wenn sie hintereinander etwas senden können, sprich daten auf PD4 und dann PD5. Ist es nicht möglich PD4 mit einer Anweisung auf PD5 umschalten zu können? Sabine F. schrieb: > Ich will nicht zwei Uarts gleichzeitig benützen, es reicht mir auch, > wenn sie hintereinander etwas senden können, sprich daten auf PD4 und > dann PD5. Ist es nicht möglich PD4 mit einer Anweisung auf PD5 > umschalten zu können? nein, dann must du UART-Routinen so umschreiben, das an allen Stellen, an denen die define's verwendet werden entweder direkt mit Variablen gearbeitet wird. Oder noch mal eine Fallunterscheidung durchgeführt wird. z.B. uint8 SRX; ... //UART A SRX=1<<PD4; if( !(SRXPIN & SRX)) //PD4 abfragen //umschalten auf UART B SRX=1<<PD6; if( !(SRXPIN & SRX)) //PD6 abfragen Sascha
Gast
#2694764
Habe jetzt die Software - Uart in eine neue Klasse geschrieben und eine zusätzliche Headerdatei geschrieben. Jedoch bekomme ich beim Ausführen einen Error. make: *** [SoftwareUART.elf] Fehler 1
Gast
#2694798
Die erste Header - Datei:
Die zweite Header - Datei:
Darf ich das so machen?
Gast
#2694828
Die Software - UART habe ich einfach nochmal kopiert, nun zwei getrennte Klassen. Wie könnte es sonst gehn? Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|