Bedingte Anwendung von Interrupts

Gast #4638875
Lesenswert?
• ▲
▼
Hey,

ich bin relativ unbedarft was die Programmierung von Controller angeht, 
darum bitte ich um Entschuldigung, wenn die Fragen etwas trivial sind.

Ich habe 2 Gerät mit relativ ähnlichem Quellcode (in C). Lediglich der 
Zustandsautomat und die Interrupts unterscheiden sich etwas.
Jetzt wollte ich das alles in einen Quellcode packen und abhängig von 
einem Bestückungswiderstand entweder die eine oder die andere 
Softwarevariante nutzen.
Beim Zustandsautomaten fällt mir das relativ leicht. Da kann ich einfach 
den Eingang per If abfragen und dann entweder die eine oder andere 
Automaten ablaufen lassen.
Bei den Interrupts habe ich keine Ahnung wie ich das machen soll. 
If-Abfrage vor die Interrupts funktioniert ja leider nicht. Gibt es da 
ein C-Kontrukt, dass ich evtl. noch nicht kenne?

Viele Grüße

Herbert
Gast #4638910
Lesenswert?
• ▲
▼
Niemand hindert dich, in der Interrupt Routine den Pin abzufragen und 
dementsprechend zu entscheiden, was passieren soll. Wenn die 
Interrupt-Routine in einem Fall einfach nichts tut, ist das nicht weiter 
schlimm.
Ich würde aber empfehlen nicht jedes Mal (auch im Automaten) den Pin 
erneut abzufragen, sondern das einmal beim Starten zu tun und das 
Ergebnis in eine (globale) Variable zu speichern, und immer nur die zu 
verwenden. So kannst du den Modus auch leichter per Software umschalten 
oder den Pin ändern.
Moderator Persönliche Seite #4638969
Lesenswert?
• ▲
▼
herbert schrieb:
> Jetzt wollte ich das alles in einen Quellcode packen und abhängig von
> einem Bestückungswiderstand entweder die eine oder die andere
> Softwarevariante nutzen.

Marc V. schrieb:
> Mit:
>
1
> 
2
> #define Gerat1
3
> //#define Gerat2
4
> 
5
> #ifdef Gerat1
6
> ...
7
> ...
8
> #else
9
> ...
10
> ...
11
> #endif
12
>

Ach, der Preprocessor kann den "Bestückungswiderstand in der Schaltung" 
einlesen? Klasse!

@herbert: Schalte die ISR() für das Device halt nur frei, wenn Du sie 
benötigst. Einmal beim Start nachschauen, ob der Bestückungswiderstand 
(ich würde 0 Ohm gegen GND nehmen) vorhanden ist, dies in einer 
Variablen merken und den Interrupt dann nur freigeben, wenn 
beabsichtigt.
(Firma: Vescomp) #4638996
Lesenswert?
• ▲
▼
Frank M. schrieb:
> Ach, der Preprocessor kann den "Bestückungswiderstand in der Schaltung"
> einlesen? Klasse!

 Wenn es nur darum geht, ob der "Bestückungswiderstand in der Schaltung"
 vorhanden ist, dann verstehe ich sein Problem nicht.

herbert schrieb:
> Lediglich der Zustandsautomat und die Interrupts unterscheiden sich etwas.

 Also haben beide Varianten die ISR.

 Warum dann ein einfaches if mit Pinabfrage in der ISR nicht
 funktionieren soll, ist für mich ein Rätsel.
#4639010
Lesenswert?
• ▲
▼
@Marc Vesely (Firma: Vescomp) (logarithmus)

>> Ach, der Preprocessor kann den "Bestückungswiderstand in der Schaltung"
>> einlesen? Klasse!

> Wenn es nur darum geht, ob der "Bestückungswiderstand in der Schaltung"
> vorhanden ist, dann verstehe ich sein Problem nicht.

Der OP will eine Software mit 2 leicht verschiedenen Versionen in den uC 
bringen, welche zur Laufzeit an hand des Widerstands erkennen, welche 
Version aktiviert werden soll.

> Warum dann ein einfaches if mit Pinabfrage in der ISR nicht
> funktionieren soll, ist für mich ein Rätsel.

Sie funktioniert. Ob man aber an mehreren Stellen den Pin abfragt oder 
nur einmalig zum Programmstart und dann die Info in einer globalen 
Variable speichert, ist Geschmackssache. Beim einmaligen Abfragen ist 
das Programm gegen ein Abfallen des Widerstands während der Laufzeit 
oder eine massive Störeinkopplung immun.
(Firma: Vescomp) #4639022
Lesenswert?
• ▲
▼
Falk B. schrieb:
> Sie funktioniert. Ob man aber an mehreren Stellen den Pin abfragt oder
> nur einmalig zum Programmstart und dann die Info in einer globalen
> Variable speichert, ist Geschmackssache.

 Hmm, ich war mir so sicher, dass es sich um dieselben Interrupts
 handelt.
 Falls nicht, ist die Lösung die du vorgeschlagen hast, natürlich
 die Beste. Es werden zwar die beiden Varianten compiliert, aber wenn
 der Zustand zur Laufzeit erkannt werden soll, geht es nicht anders.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren