Forum: Offtopic C programmieren


von Marcus (Gast)


Lesenswert?

Hallo,
ich habe eine frage an euch. Ich komme nicht weiter bei meinem Programm. 
Undzwa bekommt mein Eingang mehrere Signale hintereinander. Ich möchte 
das er die Signale die in einer Minute ankommen zählt und speichert. Die 
eine Minute soll auch in dem Programm einprogrammiert werden. Alle 
Signale die nach der Minute ankommen sollen ignoriert werden.

Danke im vor raus für die Hilfe

: Verschoben durch User
von Peter II (Gast)


Lesenswert?

Marcus schrieb:
> Danke im vor raus für die Hilfe

so wird das nichts. Was Hast du denn schon selber programmiert? Und auf 
welcher Plattform soll das laufen? In welcher Form kommen denn die 
Signale.

Zeige uns ein Programm und erkläre wo du nicht weiterkommt, dann können 
wir helfen.

von TestX (Gast)


Lesenswert?

Dann zeig doch mal dein programm und erkläre uns für welche plattform es 
entwickelt wird (avr,pic,arm,pc..). Welch toolchain/ide verwendest du ? 
Wie sehen die signale aus (zeichnung), welches timing haben die signale, 
wieviele signale treten maximal auf ?

Du siehst, hier fehlen sehr viele infos ;)

von Flo (Gast)


Lesenswert?

ich schätze jetzt mal mit "Signale" Meinst du irgendwelche Pulse.

Dann kannst du den Timer so programmiern, dass du die Minute erkennst 
(Timer-Interrupts anaschaun) und mit einem Counter die Pulse hochzählen 
(steigende oder fallende Flanke, Levelchange, ...)

wie schon beschrieben ohne mehr Infos, ist es schwierig mehr Infos zu 
geben.

Lesestoff:
https://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/Die_Timer_und_Z%C3%A4hler_des_AVR

von Jack (Gast)


Lesenswert?

Für einen ominösen, fiktiven Mikrocontroller:

Polling:
1
#include <time.h>
2
#include <unistd.h>
3
4
#define DURATION (1 * 60.0)   // 1 Min.
5
6
#define DELAY (1000U)    // 1 ms
7
8
9
//
10
// Polling - meist schlecht
11
//
12
void uc_auslasten() {
13
   time_t start = time(NULL);
14
   while(difftime(time(NULL), start) < DURATION) {
15
        // 
16
        // Fröhliches Signaleeinlesen
17
        //
18
    
19
        //
20
        // Polling-Frequenz kontrollieren
21
        //
22
        usleep(DELAY);
23
24
    };
25
}

1
#include <time.h>
2
#include <unistd.h>
3
4
#define DURATION (1 * 60.0)   // 1 Min.
5
6
void main() {
7
    time_t start = time(NULL);
8
    enable_data_available_irq();
9
    while(1) {
10
        //
11
        // Spass mit den Daten
12
        //
13
    }
14
}
15
16
17
//
18
// IRQ Handler
19
//
20
_IRQ_VECTOR_OF_SOME_KIND_ data_available() {
21
    if(difftime(time(NULL), start) < DURATION) {
22
        // 
23
        // Fröhliches Signaleeinlesen
24
        //
25
    } else {
26
        //
27
        // Ende des Schauspiels
28
        //
29
        disable_data_available_irq();
30
    }
31
}

von Marcus (Gast)


Angehängte Dateien:

Lesenswert?

Okay tut mir leid dies ist mein erster Beitrag. Also die Signale kommen 
von einem Relais und das Signal beträgt 5V. Ich programmiere mit PICkit 
3 und benutze den Compiler xc8. Das Timing wird von einem Motor bestimmt 
ich möchte nämlich die Umdrehung pro Minute Zählen dies halt mittels 
einer Lichtschranke und dem Signalherausgebenden Relais. Bei der 
Häufigkeit der Signale kommt es darauf an wie schnell der Motor läuft. 
Nach einer Minute soll er die noch kommenden Signale Ignorieren und die 
Signale die er in der einen Minute gezählt hat Speichern. Diese Zahl 
muss ich dann mit 10 Dividieren. Das wäre eigentlich alles den Rest 
wollte ich selber versuchen.

Ich hoffe das sind genug Informationen

von Nop (Gast)


Lesenswert?

Marcus schrieb:
> ich habe eine frage an euch.

Ich sehe in Deinem Beitrag kein einziges Fragezeichen - Du hast keine 
Frage gestellt.

von denker (Gast)


Lesenswert?

so wir das nix - ich empfehle mal eine Stufe tiefer anzusetzen, z.B.
https://www.amazon.de/Programming-Language-Prentice-Hall-Software/dp/0131103628/ref=sr_1_1?s=books&ie=UTF8&qid=1473931402&sr=1-1&keywords=kernighan+ritchie

dein Programm hängt ewig und drei Tage in einer Warteschleife...

von Aufpasser (Gast)


Lesenswert?

Du solltest dein Windows-Help-Center überprüfen. Da gibt es 
unbearbeitete Hinweise!

von Reinhard M. (Gast)


Lesenswert?

denker schrieb:
> dein Programm hängt ewig und drei Tage in einer Warteschleife...
1
while(1); // ist hart
2
3
while(2); // ist härter

von Justus S. (jussa)


Lesenswert?

Code als Screenshot, na klar...da will jemand wohl partout keine 
Hilfe...

von Nix (Gast)


Lesenswert?

Impulse kann man mit einem TC (TimerCounter)zählen.

Oder du pollst einen Input und zählst selbst die Pulse, da kannst du 
auch eine Entprellung einbauen.

von Kollege von nebenan (Gast)


Lesenswert?

Abteilung 2313 is not amused!

von Svenja (Gast)


Lesenswert?

frag mal hier im Community Bereich
www.Roboternetz.de
die helfen Dir schnell und problemlos.
Hier habe ich noch nie brauchbare Hilfe erhalten

von Volker S. (vloki)


Lesenswert?

Marcus schrieb:
> Okay tut mir leid dies ist mein erster Beitrag. Also die Signale kommen
> von einem Relais und das Signal beträgt 5V... Das Timing wird von einem
> Motor bestimmt
Ist das Signal entprellt?

> ich möchte nämlich die Umdrehung pro Minute Zählen dies halt mittels
> einer Lichtschranke und dem Signalherausgebenden Relais. Bei der
> Häufigkeit der Signale kommt es darauf an wie schnell der Motor läuft.
Ja, wie schnell läuft er denn?

> Nach einer Minute soll er die noch kommenden Signale Ignorieren und die
> Signale die er in der einen Minute gezählt hat Speichern
Am besten du vergisst mal diesen ganzen Mist mit den Delays. Zum Zählen 
verwendet man Counter (nicht unbedingt ;-) und für die Zeit Timer.
Mit welcher Frequenz wird der 18F1220 getaktet?

von Nix (Gast)


Lesenswert?

while(1) ist das gleiche wie while(2).
Das ist eine loop(forever), du kommst aus dieser Schleife nicht raus, 
sowas macht man zB. 1 mal und arbeitet dort zyklisch die Aufgaben ab.
sowie beim Arduino:

init();
loop()
{
   read_input();
   do_something_else();
   ...
}

von Nop (Gast)


Lesenswert?

Nix schrieb:
> while(1) ist das gleiche wie while(2).

Nicht ganz: while(2) ist sicherer, denn wenn die binäre Unschärfe 
bedacht wird, dann kann eine besonders große 0 fast so groß sein wie 
eine besonders kleine 1. Nimmt man 2 statt 1, ist man auch in diesem 
Fall auf der sicheren Seite.

von Nix (Gast)


Lesenswert?

Dann sollte besser while(3) verwendet werden, es könnte ja ein Bit 
kippen.

von Reinhard M. (Gast)


Lesenswert?

while(-1) ist noch sicherer.
hier sind ALLE bits gesetzt ;-)

von Henry G. (gtem-zelle)


Lesenswert?

Wie kann man sich nur so hart trollen lassen?

von Nix (Gast)


Lesenswert?

Was trollen? Warum glaubst du haben die ARMs alle ein Error Correction 
Bit im Befehlssatz, falls ein Bit kippt kann so der Befehl trotzdem noch 
richtig dekodiert werden.

von klausi (Gast)


Lesenswert?

Ihr seid richtige mega krasse Bitkipper und Schubser.

Hab mal Leitsysteme in C programmiert..
Da ist mir noch nie ein Bit gekippt.

von Paul B. (paul_baumann)


Lesenswert?

klausi schrieb:
> Hab mal Leitsysteme in C programmiert..

In C? Das muß doch dann ein Leid-System sein.

MfG Paul

von Indeed (Gast)


Lesenswert?

Ich programmiere Mikrocontroller nur in Javascript. C ist Schnee von 
gestern!

von Bart Simpson (Gast)


Lesenswert?

Warum nicht gleich Lochkarten?

PS: Am besten diesen Thread gleich mit in eines versenken...

von Paul B. (paul_baumann)


Lesenswert?

Bart Simpson schrieb:
> Warum nicht gleich Lochkarten?

Lochkarten lese ich ganz gerne mal wieder, da stehen so schöne 
Kurz-Geschichten drauf.

mfG Paul

von mitgelesen (Gast)


Lesenswert?

> Nicht ganz: while(2) ist sicherer, denn wenn die binäre Unschärfe
> bedacht wird, dann kann eine besonders große 0 fast so groß sein wie
> eine besonders kleine 1.
für while(1) könntest Du auch while(true) oder while(1==1) schreiben; da 
kann ich beim besten Willen nichts mit binäre Unschärfe erkennen.
while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden 
zu können.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

mitgelesen schrieb:
> while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden
> zu können.

WTF?

von Daniel H. (Firma: keine) (commander)


Lesenswert?

Also der OP muss ein Troll sein, so einen vermurksten Code schreibt 
niemand, der auch nur ein bischen Ahnung von C hat.

Wenn das "Programm" kein Scherz sein soll, das bleibt genau hier hängen:
1
while(1)
2
delay(59400);

von klausi (Gast)


Lesenswert?

Paul B. schrieb:
> klausi schrieb:
> Hab mal Leitsysteme in C programmiert..
>
> In C? Das muß doch dann ein Leid-System sein.
>
> MfG Paul

Oja! Da hast Du recht!
Diese Systeme dann auchnoch bei ner Firma in Inbetriebnahme zu nehmen, 
hat mich dutzende Nachtschichten, graue Haare gekostet...
War in der Logistikindustrie..

Speichermaler? Doppelpointer? In falschen Bereich reingeschrieben? Corba 
Prozess tot, Förderstrecke bleibt stehen.. hinten stauen sich schon die 
Pakete...

von Nop (Gast)


Lesenswert?

klausi schrieb:
> ab mal Leitsysteme in C programmiert..
> Da ist mir noch nie ein Bit gekippt.

Das ist offenbar Ewigkeiten her, und damals war das noch nicht so 
schlimm, weil die Strukturgrößen viel gröber waren. Bei den heutigen 
Systemen sind die Strukturgrößen so klein, daß der Bitfraß nicht erst 
nach Jahrzehnten merkbare Auswirkungen hat.

Da Endlosschleifen aber naturgemäß sehr lange laufen, sollte man hier 
besonders strikte Maßnahmen gegen den Bitfraß treffen.

von fürn Hugo (Gast)


Lesenswert?

Ja das mit dem Bitfraß wird immer schlimmer. Ich hatte mal besonders 
viele Endlosschleifen einprogrammiert, da konnte man zuschauen wie das 
RAM und die Prozessor Register immer weniger wurden. Die Software musst 
dann so optimiert werden das sie mit 100GB Flash, 100 Byte RAM und 1 
Register auskam.
Besonders die 100GB Flash hatten mir wirklich Probleme bereitet. Das 
ging nur noch mit sehr Size optimierter Compilierung.

von Jack (Gast)


Lesenswert?

fürn Hugo schrieb:
> Ja das mit dem Bitfraß wird immer schlimmer. Ich hatte mal
> besonders
> viele Endlosschleifen einprogrammiert,

Du hast für die Endlosschleifen hoffentlich komplettes Loop-Unrolling 
gemacht, oder? Weil das macht man jetzt so sagen die 
Hippster-Programmierer mit Zöpfchen.

von Cyblord -. (cyblord)


Lesenswert?

Jack schrieb:
> Du hast für die Endlosschleifen hoffentlich komplettes Loop-Unrolling
> gemacht, oder? Weil das macht man jetzt so sagen die
> Hippster-Programmierer mit Zöpfchen.

Du hast den Dutt vergessen. Als Hipster muss das heute sein. Zu 
beobachten beim Chef-Hipster von Heise JKJ.

von Bernd K. (prof7bit)


Lesenswert?

Hannes J. schrieb:
> mitgelesen schrieb:
>> while(2) wird nur verwendet um die beiden Endlosschleifen unterscheiden
>> zu können.
>
> WTF?
1
while ("my guitar gently weeps") {
2
3
}

von Mitleser (Gast)


Lesenswert?

Was seid ihr alle nur für überhebliche Fuzzis?

Da will einer (offensichtlich ein Anfänger) Hilfe haben und Euch fällt 
nichts weiter ein als ihn dumm zu machen.
Wenn ihr nicht helfen wollt, dann sagt dies doch gleich, damit weiß man 
(er) wenigstens woran man (er) ist. Das was ihr hier macht ist unterste 
Schublade - ihr solltet Euch schämen.
Ich wünsche jedem von Euch Schlaubergern, daß ihr auch mal so dumm 
angemacht werdet, damit ihr mal merkt wie das ist.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Mitleser schrieb:

Komm gib's zu, du bist der ursprüngliche Fragesteller, oder?

> Was seid ihr alle nur für überhebliche Fuzzis?
>
> Da will einer (offensichtlich ein Anfänger) Hilfe haben und Euch fällt
> nichts weiter ein als ihn dumm zu machen.

Der Anfänger hat kurz nach den ersten Rückfragen seine Mitarbeit bei der 
Lösung seiner Probleme eingestellt.

> Das was ihr hier macht ist unterste
> Schublade - ihr solltet Euch schämen.

Nein, müssen wir nicht. Dieses Spielchen von zarten Blümlein die sich 
alle Informationen wie Würmer aus der Nase ziehen lassen und dabei die 
Beleidigte Leberwurst spielen, egal was man fragt oder sagt, kennen wir 
zu genüge.

> Ich wünsche jedem von Euch Schlaubergern, daß ihr auch mal so dumm
> angemacht werdet, damit ihr mal merkt wie das ist.

Ok, und nun geh bitte wieder Minecraft spielen und halte dich von 
ernsthafter Programmierung fern.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Cyblord -. schrieb:
> Du hast den Dutt vergessen. Als Hipster muss das heute sein. Zu
> beobachten beim Chef-Hipster von Heise JKJ.

Oh ja, der schärfste Provinz-Hipster im Norddeutschen Tiefland, Jan-Keno 
Janssen. "irgendwas mit Medien" studiert, Volontariat beim Jeverschen 
Wochenblatt. Einfach ein Mann von Welt der uns heute eben jene große 
Welt und moderne Technik erklärt. Da kann man auch mal klatschen.

Bevor der auf den Hipster-Trip kam lief der übrigens als, ach seht 
selber:

Früher:
http://www.innovators-summit.com/uploads/pics/Jan-Keno_Janssen_cropped.jpg

Heute:
http://www.heise.de/ct/zcontent/16/16-hocmsmeta/1470315586502646/contentimages/image-146891031910798.jpg

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
Noch kein Account? Hier anmelden.