Hallo,
Ich habe folgendes Problem:
In einer Schaltung wird normalerweise der Spannungsregler mit einem
Öffnerkontakt abgeschaltet. Am Spannungsregler ist ein ODER Glied
welches von einem MCU angesteuert wird. Also eine Art Selbsthaltung
Der Schliesskontakt auf dem gleichen Schalter erreicht einen MCU.
Wird nun der Schalter betätigt, erkennt der MCU ein HIGH am
Schliesserkontakt und führt letze Aufgaben aus, bevor er vom ODER Glied
seine Selbsthaltung entfernt.
Nun kann es im Fehlerfall passieren, das der Öffnerkontakt des Schalters
nicht öffnet, somit wäre nach entfernen der Selbsthaltung der
Spannungsregler immernoch enabled.
Da dieser Sachverhalt ja erkannt werden kann:
Schliesser = HIGH
Timer xxx ms
Schliesser == HIGH && Timer>xx = Fehler, da der Timer ja im
Standartfall garnicht abläuft, da die Spannung weg ist.
Nun soll in diesem Speziallfall der MCU einfach "neu starten", so dass
die Schaltung einfach korrekt weiter läuft (bzw. dann Fehler anzeigt).
Ist es möglich mit dem MCU Atmega328 einen "Reset" in Software zu
machen? Also ein Befehl der absolut equivalent mit einem Reset über den
Reset-Pin ist?
Edgar schrieb:> Schliesser == HIGH && Timer>xx = Fehler, da der Timer ja im> Standartfall garnicht abläuft, da die Spannung weg ist.
Wie soll das gehen?
Wenn die Spannung weg ist, einen Reset per Software auslösen?
Hi
>Nun kann es im Fehlerfall passieren, das der Öffnerkontakt des Schalters>nicht öffnet, somit wäre nach entfernen der Selbsthaltung der>Spannungsregler immernoch enabled.
Nimm einfach ordentliche Schalter.
MfG Spess
Spring doch einfach den Programmbeginn an oder falls es ein harter Reset
sein muss bau einen Transistor an einen Pin, der RESET auf Masse zieht.
Wenn Du den ansteuerst, bekommt der AVR extern einen Reset, der Pin wird
automatisch auf tri-state zurückgesetzt und der AVR verlässt die
Reset-Situation.
Edgar schrieb:> Nun soll in diesem Speziallfall der MCU einfach "neu starten", so dass> die Schaltung einfach korrekt weiter läuft (bzw. dann Fehler anzeigt).
Du solltest besser Deinen Programmablauf nochmal überdenken.
In der Regel behandelt man Tastenbetätigungen, ohne jedesmal den MC zu
resetten. Man bleibt einfach in der Mainloop. Es ist sogar einfacher, da
man sich in einem Flag den vorherigen Zustand merken und daraufhin
anders reagieren kann.
Bei einem Reset sind aber alle Variablen gelöscht, d.h. Du kannst ein
reguläres Reset nicht von einem Tastenreset unterscheiden.
Beim Reset wird das RAM nicht von der Hardware gelöscht, aber die
Initialisierungsroutine, die der C Compiler vor die main() Funktion
packt, löscht alle Variablen.
Bei Stromausfall geht der RAM Inhalt nach und nach verloren, wie bei
einem Mensch, dessen Herz stehen geblieben ist.
Stefanus F. schrieb:> die der C Compiler vor die main() Funktion> packt, löscht alle Variablen.
Hmm...
Nur die globalen und statischen. (?!?!)
Ich glaube, das heißt nicht löschen, sondern initialisieren.
Und für Variablen in der noinit Section gilt das auch nicht.
Ja, es heißt "initialisieren". Wenn im Quelltext auf globaler Ebene "int
i=3" steht, dann ist es diese Initialisierung, die sie auf 3 setzt.
> Und für Variablen in der noinit Section gilt das auch nicht.
Richtig. Auf solche Sonderlocken wollte ich den Anfänger jetzt nicht
lenken. Das würde nur weitere Verständnisfragen aufwerfen und ihn dazu
verleiten, bei seiner kruden Reset-Methode zu bleiben.
Peter D. schrieb:> Bei einem Reset sind aber alle Variablen gelöscht, d.h. Du kannst ein> reguläres Reset nicht von einem Tastenreset unterscheiden.
Nicht in einer vernünftigen Programmiersprache. Da bleiben RAM- und
selbst MCU-Register-Inhalte über den Reset hinweg erhalten, wenn nicht
gerade ein PON oder BO die Reset-Ursache war, im ersteren Fall gibt es
ganz sicher nix im RAM oder den MCU-Registern, auf was man sich
verlassen könnte, im zweiten Fall könnte es da zwar noch etwas
Nützliches geben, aber darauf will man sich NICHT verlassen.
Welches die Reset-Ursache war, kann man im Programm ermitteln. Dieses
Feature ist sogar vollkommen sprachenunabhängig einfachst zu nutzen.
Aber selbst in unsäglichen Sprachen wie C kann man natürlich mit
entsprechender Kompetenz zumindest teilweise dieses in Assembler mangels
Startup-Code quasi naturgegebene Verhalten erzeugen. Es läuft dann auf
Linker-Scripts hinaus, mit denen man bestimmte Datenbereiche (also RAM)
definiert, in denen der C-Standard-Startup-Code sein gemeingefährliches
zerstörerisches Werk nicht anrichten darf. Dann muss man "nur" noch die
gewünschten reset-persistenten Variablen in eben diese Bereiche
zwingen...
Ja, C ist ja sowas von einfach im Vergleich zu Assembler...
Nein, ist es nicht. C ist Dreck. Macht kaum etwas einfacher, aber vieles
viel komplizierter.
c-hater schrieb:> Nicht in einer vernünftigen Programmiersprache.
Du kannst es nicht lassen. Bewerbe dich bei den Zeugen Jehovas als
Missionar. Die werden deine Leistung zu schätzen wissen.
Stefanus F. schrieb:> Du kannst es nicht lassen. Bewerbe dich bei den Zeugen Jehovas als> Missionar. Die werden deine Leistung zu schätzen wissen.
Tja, der Unterschied zwischen mir und den Zeugen Jehovas ist: ich rede
ausschließlich über beweisbare Fakten.
c-hater schrieb:> Tja, der Unterschied zwischen mir und den Zeugen Jehovas ist: ich rede> ausschließlich über beweisbare Fakten.
"vernünftig" ist kein Fakt, sondern eine objektive Bewertung.
Stefanus F. schrieb:> "vernünftig" ist kein Fakt, sondern eine objektive Bewertung.
Ich gestehe folgendes zu: Die Darstellung der Fakten erfolgte mit einer
doch deutlich tendenziösen Ausdrucksweise. Das ändert allerdings rein
garnix an den dargestellten Fakten.
Sie passen dir nur nicht, das ist DEIN Problem. Und das ist nicht
weniger tendenziös als meins. Capisce?
Im übrigen bin ich nicht gewillt, weiter über Meinungen in dieser Sache
zu diskutieren. Über Fakten hingegen: gerne. Kannst du also irgendwas zu
meinem Wissen über die C-Welt beitragen, was ich nicht schon lange
selber weiss?
Dann führe das bitte in deiner Antwort auf. Danke.
Stefanus F. schrieb:> Du hast damit angefangen.
Falsche Antwort! Fakten waren gefragt.
Überzeuge mich doch einfach von der absoluten Schönheit und tierisch
einfachen Benutzbarkeit der alleslösenden Programiersprache C...
Aber bitte mit Fakten, nicht mit Meinungen oder meinetwegen auch der
Negation von Meinungen.
Noch eine Chance...
Stefanus F. schrieb:> Ich dachte du wolltest das nicht diskutieren!?
Ich wollte nur nicht über Meinungen diskutieren, über Fakten hingegen
sehr gerne.
Die von dir NICHT aufgeführten Fakten können wir allerdings natürlich
NICHT diskutieren. Denn es fehlt da irgendwie die
Diskussionsgrundlage...
Einem echten Programmierer sollten solche überaus trivialen logischen
Zusammenhänge sofort klar sein...
c-hater schrieb:> Einem echten Programmierer sollten solche überaus trivialen logischen> Zusammenhänge sofort klar sein...
Allerdings, und der wäre: dass man deine Trollerei so ernst nehmen kann,
wie das, was schlecht gelaunte Teenager ihren Eltern an den Kopf werfen.
Wie du siehst versuche ich erst gar nicht, gegen deine Argumente
anzukommen. Mir ist nämlich klar, dass dies lediglich sinnlose
Zeitvergeudung wäre. Ich kann Dir nur raten, mehr Toleranz gegenüber
anderen Meinungen zu erlernen, denn das ist die basis für ein
friedliches Zusammenleben.
Im übrigen bin ich durchaus der Meinung, das C einer der am wenigsten
eleganten Programmiersprachen ist. Das hält mich jedoch nicht davon ab,
diese Sprache gerne einzusetzen und anderen dabei zu helfen.
Ich werde auch immer empfehlen, Kinder zu kriegen, obwohl auch das eine
ziemlich unappetitliche und teure Angelegenheit ist. Kannst ja mal
darüber nachdenken.
Stefanus F. schrieb:> Ich werde auch immer empfehlen, Kinder zu kriegen
Da drängt sich mir doch sofort die Frage auf, ob Haties Eltern der
gleichen Meinung sind.
Stefanus F. schrieb:
[NULL Fakten, dafür viel geistiger Dünnschiss bis hin zu überaus
persönlichen Angriffen]
@Moderatoren: Warum wird das nicht zensiert? Ist doch sonst kein
Problem?
Thomas E. schrieb:
[NULL Fakten, dafür Dünnschiss bis hin zu überaus persönlichen
Angriffen]
@Moderatoren: Warum wird das nicht zensiert? Ist doch sonst kein
Problem?
c-hater schrieb:> Ist doch sonst kein Problem?c-hater schrieb:> Ist doch sonst kein Problem?
Das ist doch keine Frage. Auch wenn man es noch so oft wiederholt, ist
das keine Frage.
c-hater schrieb:> Stefanus F. schrieb:>> [NULL Fakten, dafür viel geistiger Dünnschiss bis hin zu überaus> persönlichen Angriffen]>> @Moderatoren: Warum wird das nicht zensiert? Ist doch sonst kein> Problem?
Weil man dann zuerst deinen Müll rauskehren müsste!
Carl D. schrieb:> Weil man dann zuerst deinen Müll rauskehren müsste!
Und noch jemand, der nichts von der Diskussion von Fakten hält und es
deswegen nicht für nötig hält, irgendwelche anzuführen...
Da haben wir ja alle üblichen Verdächtigen (C-Gläubigen) beinahe
beisammen. Nö, zwei der Hardcore-Gläubigen dieses Forums fehlen noch,
aber die werden sich vermutlich gleichbedeutend äußern, wenn sie mal
wieder online sind.
Und natürlich ebenfalls auf jegliche Nennung von Fakten verzichten...
c-hater schrieb:> Carl D. schrieb:>>> Weil man dann zuerst deinen Müll rauskehren müsste!>> Und noch jemand, der nichts von der Diskussion von Fakten hält und es> deswegen nicht für nötig hält, irgendwelche anzuführen...>> Da haben wir ja alle üblichen Verdächtigen (C-Gläubigen) beinahe> beisammen. Nö, zwei der Hardcore-Gläubigen dieses Forums fehlen noch,> aber die werden sich vermutlich gleichbedeutend äußern, wenn sie mal> wieder online sind.>> Und natürlich ebenfalls auf jegliche Nennung von Fakten verzichten...
Nur jemand der Fakten von eigener Meinung unterscheiden kann.
Carl D. schrieb:> Nur jemand der Fakten von eigener Meinung unterscheiden kann.
Der aber auch immer noch keine Fakten genannt hat, schon gar keine, die
zu irgendeiner Neubewertung der realexistierenden Situation hätten
führen können...
c-hater schrieb:> Der aber auch immer noch keine Fakten genannt hat, schon gar keine, die> zu irgendeiner Neubewertung der realexistierenden Situation hätten> führen können...
Worum geht es hier eigentlich? Hat deine Domina schon wieder frei?
Ich fasse mal zusammen, für alle die den c-hater noch nicht so recht
kennen:
c-hater schrieb:>> Bei einem Reset sind aber alle Variablen gelöscht> Nicht in einer vernünftigen Programmiersprache.> Aber selbst in unsäglichen Sprachen wie C kann man natürlich ...> Dann muss man "nur" noch die gewünschten reset-persistenten> Variablen in eben diese Bereiche zwingen...
Klingt für mich ein wenig verwirrt. Da wird die Programmiersprache als
"unvernünftig" und "unsäglich" egalbelt, obwohl sie das gewünchte
Feature bereit stellt.
c-hater schrieb:> Tja, der Unterschied zwischen mir und den Zeugen Jehovas ist:> ich rede ausschließlich über beweisbare Fakten.
Die Zeugen Jehova belegn ihre Thesen nachvollziehbar.
c-hater schrieb:> Ich gestehe folgendes zu: Die Darstellung der Fakten erfolgte mit> einer doch deutlich tendenziösen Ausdrucksweise. Das ändert> allerdings rein garnix an den dargestellten Fakten.
Von welchen Fakten faselst du eigentlich? Du hast doch GAR KEINE
vorgebracht, die deine neagtive Bewertung der Programmiersprache C
bestätigen!
> Im übrigen bin ich nicht gewillt, weiter über Meinungen in dieser> Sache zu diskutieren.
Es folgen weitere Beiträge von Dir:
> Kannst du also irgendwas zu meinem Wissen über die> C-Welt beitragen, was ich nicht schon lange selber weiss?
Kleiner Hinweis: Ich habe weder behauptet noch gemeint, dass du keine
Ahnung hättest.
c-hater schrieb:> Fakten waren gefragt.
Fakten für was denn?
> Überzeuge mich doch einfach von der absoluten Schönheit und tierisch> einfachen Benutzbarkeit der alleslösenden Programiersprache C...
Warum sollte ich das versuchen? Ich habe nie behauptet, dass C absolut
schön und tierisch einfach sein. Sorry Mann, ich kenne diese Sprache
seit 30 Jahren nehme keine Drogen und trinke keinen Alkohol. Daher würde
ich so einen Dünschiss niemals von mir geben.
> Aber bitte mit Fakten, nicht mit Meinungen oder meinetwegen auch der> Negation von Meinungen.
Ok, dann sage ich meine Meinung nur den anderen, die eventuell mitlesen:
C ist ätzend, erfüllt aber seinen Zweck gut genug, um damit arbeiten zu
können.
Fakt: Windows und Linux wurdeb in C gebaut. Reicht das?
Wo sind DEINE Fakten für was auch immer? Irgendwie habe ich immer noch
nicht geschnallt, was du hier eigentlich willst. Platz hier einfach so
rein, rotzt ein bisschen herum und machst Stress. Wenn es bei dem
fachlichen Anteil geblieben wäre hätte ich höchstens noch darum gebeten,
dass du ein Konkretes Beispiel nachreichst, wie mann denn die richtige
Sektion der gewünschten variablen festlegt. Aber nun hast du die
Diskussion kaputt gemacht. Gut getrollt!
c-hater schrieb:> Ich wollte nur nicht über Meinungen diskutieren, über Fakten hingegen> sehr gerne.
Welche Fakten denn? Ich versuche mal was: Wir haben draußen vor dem
Fenster gerade 16°C. Nicht gut? Was willst du denn für Fakten lesen?
> Denn es fehlt da irgendwie die Diskussionsgrundlage...
Ach nee, wirklich? Das merkst du aber schnell! Du hast damit angefangen,
Fakten für Behauptungen zu liefern, die niemand von sich gegeben hat.
Darüber hinaus hast du damit angefangen, an völlig unpassender Stelle
ohne Fakten zu nennen über die Programmiersprache herzuziehen. Du
wurdest weder dazu gereizt noch darum gebeten.
Stefanus F. schrieb:> Im übrigen bin ich durchaus der Meinung, das C einer der am wenigsten> eleganten Programmiersprachen ist.c-hater schrieb:> NULL Fakten, dafür viel geistiger Dünnschiss
Ich habe Dir gerade einen Fakt genannt (dass ich C auch nicht super
finde). Nichmal: welche Fakten für was willst du denn lesen? Und wo sind
deine Fakten.
> bis hin zu überaus persönlichen Angriffen
Bitte untermauere diese Behaupt mit einem Fakt, zum Beispiel indem du
den persönlichen Angriff zitierst, auf den du dich beziehst. Ich bin mir
nämlich keiner solchen Schandtat bewusst.
c-hater schrieb:> Carl D. schrieb:>> Weil man dann zuerst deinen Müll rauskehren müsste!> Und noch jemand, der nichts von der Diskussion von Fakten hält und es> deswegen nicht für nötig hält, irgendwelche anzuführen...
kenn du den Carl D, oder wie kommst du zu dieser Unterstellung? Bitte
belege deine Behauptung mit Fakten.
> Da haben wir ja alle üblichen Verdächtigen (C-Gläubigen) beinahe> beisammen.
Sicher nicht. Ich sehe keinen einzigen.
> Nö, zwei der Hardcore-Gläubigen dieses Forums fehlen noch,> aber die werden sich vermutlich gleichbedeutend äußern, wenn sie mal> wieder online sind.
Es hat sich keiner mehr gemeldet. Merkst du was?
> Und natürlich ebenfalls auf jegliche Nennung von Fakten verzichten...
Das muss ja ein ganz tolles Wort sein. Hast du das gestern gerade frisch
gelernt?
c-hater schrieb:> Der aber auch immer noch keine Fakten genannt hat, schon gar keine,> die zu irgendeiner Neubewertung der real existierenden Situation> hätten führen können...
Welche Fakten hast du denn genannt, c-hater?
Thomas E. schrieb:> Worum geht es hier eigentlich?
Das wüsste ich auch mal gerne.
Und ich wüsste gerne mal, ob der c-hater noch ganz sauber tickt. Jetzt
darf er mir gerne vorwerfen, ich sei persönlich geworden. Allerdings
würde das nur von den Fakten ablenken, welche auch immer das sein
sollen. Nichts genaues weiß man nicht.
Um mal zum Thema zurück zu kommen:
Beim avr-gcc kann man Variablen von der Initialisierung ausschließen,
indem man sie in die "noinit" Sektion packt.
Hier ist das beschrieben, ganz unten mit konkretem Beispiel-Quelltext:
https://www.nongnu.org/avr-libc/user-manual/mem_sections.html
Ich kann jedem AVR C Programmierer nur raten, die Doku von
www.nongnu.org zu verwenden. Die Doku von Atmel/Microchip ist in vielen
Punkten unvollständiger.
Stefanus F. schrieb:> Jetzt hat der Kerl mich so aufgeregt
Lohnt sich nicht. Ich finde den eher belustigend. Ich stell mir immer so
einen kleinen dicken Gnom vor, der mit Schaum vorm Mund vor seinem PC
sitzt und alle paar Minuten vor Wut in seine Tastatur beißt.
Was bin ich froh, daß ich nur noch sporadisch hier hineinsehe...
Die gute Moderation setzt sich also fort, indem man die Leute
vergrault, die etwas Handfestes beizutragen hatten und dafür die
Geräuschemacher hofiert.
Ihr habt es wohl wirklich nicht besser verdient.