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?
benutze mal die Suchfunktion. Denn das wurde gerade erst ausführlich diskutiert.
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.
1 | #define soft_reset() \
|
2 | do \
|
3 | { \
|
4 | wdt_enable(WDTO_15MS); \
|
5 | for(;;) \
|
6 | { \
|
7 | } \
|
8 | } while(0)
|
9 | |
10 | // Function Pototype
|
11 | void wdt_init(void) __attribute__((naked)) __attribute__((section(".init3"))); |
12 | |
13 | |
14 | // Function Implementation
|
15 | void wdt_init(void) |
16 | {
|
17 | MCUSR = 0; |
18 | wdt_disable(); |
19 | |
20 | return; |
21 | }
|
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.
Müsste man direkt mal prüfen, ob bei einem Reset ohne Verlust der Betriebsspannung das SRAM gelöscht oder zumindest die Daten darin zerstört werden.
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.
c-hater schrieb: > Im übrigen bin ich nicht gewillt, weiter über Meinungen in dieser Sache > zu diskutieren. Du hast damit angefangen.
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.
Hi Macht euch doch nicht fertig. Den TO interessiert das schon lang nicht mehr. War wohl eher ein konstruiertes Problem. Mfg Spess
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.
c-hater, Du bist echt so eine Nervensäge, lass doch einfach gut sein. Geh in Frieden, aber geh. Werner
Jetzt hat der Kerl mich so aufgeregt, dass meine Rechtschreibung völlig im Arsch war. Möchte mich dafür bei allen entschuldigen.
Kein Problem. Solange der Arsch jetzt immer richtig geschrieben wird.
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.
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.