fjm schrieb:
> Ich wollte kein Lehrbuch in C schreiben,
Dann hast du jetzt wohl doch ein Buch mit einem negativ Beispiel
abgegeben, wie man nicht programmiert! Beschäftige dich auch mal mit
Refactoring.
Vor dem Coding kommt besser auch das Denken bzgl.
Programm-/Datenstrukturen, was du hier wohl komplett ausgelassen hast.
Deine zahllosen global Variables sind eine Vergewaltigung einfachster
Grundsätze der Programmierung.
Die Lesbarbeit deines Codes ist gleich null, zwei Beispiele
Refactored, 3 Instructions
1 | // wenn Gleichstand besteht (A==B), Fast-PWM-Art (0101 = 5)
|
2 | TCCR1A |= (1<<COM1B1) | (1<<WGM10)
|
3 | // Pres.64 (250 msec), Fast-PWM-Art 2.Teil
|
4 | TCCR1B |= (1<<WGM12) | (1<<CS11) | (1<<CS10);
|
5 | TIFR1 |= (1<<OCF1A) | (1<<OCF1B);
|
Original, 6 Instruction und sinnloses !(...)
1 | TCCR1B |= ((!(1<<CS12)) | ((1<<CS11)) | ((1<<CS10)));// Pres.64 (250 msec)
|
2 | TCCR1A |=((!(1<<WGM11)) |((1<<WGM10))); // Fast-PWM-Art (0101 = 5)
|
3 | TCCR1B |=((1<<WGM12) | (!(1<<WGM13))); // Fast-PWM-Art 2.Teil
|
4 | TCCR1A |= (((1<<COM1B1)) | (!(1<<COM1B0))); // wenn Gleichstand besteht (A==B)
|
5 | TIFR1 |= (1<<OCF1A);
|
6 | TIFR1 |= (1<<OCF1B);
|
Refactored
1 | ISR (TIM0_COMPA_vect) {
|
2 | PORTA |= (1<<PWM_0);
|
3 | //PORTA ^= (1<<Ser_out); // 16 msek Basiszeit
|
4 |
|
5 | if (!impuls_1) impuls_1++;
|
6 | else impuls_1 = 0;
|
7 |
|
8 | zeit++; // Basiszeit
|
9 | zeit0++;
|
10 | zeit1++;
|
11 | zeit2++;
|
12 | zeit3++;
|
13 | zeit_0++;
|
14 | zeit_01++;
|
15 | Basis_T2++;
|
16 | zeit_seriell++;
|
17 |
|
18 | if (sv_ausg ) sv_ausg--; // Ein/Aus Reset
|
19 | if (zeit_ausg) zeit_ausg--; // Service Ausgabe (Byte)
|
20 | if (zeit_bit) zeit_bit--; // Bitzeit
|
21 | if (zeit_aus) zeit_aus--; // ein/aus Progr.
|
22 | if (zeit_man) zeit_man--; // Manchestercodezeit
|
23 | if (zeit_empf) zeit_empf--; // Empfangszeit
|
24 | if (zeit_send) zeit_send--; // Sende_zeit
|
25 | if (zeit_pre && Preambel==1) zeit_pre--; // Vorlaufzeit
|
26 | if (zeit_vor) zeit_vor--; // Überwachungszeit
|
27 | }
|
Original, sinnlose Comments, redundante Schreibweise:
1 | ISR (TIM0_COMPA_vect)
|
2 | {
|
3 | PORTA |= (1<<PWM_0);
|
4 | //PORTA ^= (1<<Ser_out); // 16 msek Basiszeit
|
5 |
|
6 | if (impuls_1 == 0)
|
7 | {
|
8 | impuls_1 = impuls_1 + 1;
|
9 | }
|
10 | else
|
11 | {
|
12 | impuls_1 = 0;
|
13 | }
|
14 | zeit = zeit + 1; // Basiszeit
|
15 |
|
16 | zeit0 = zeit0 + 1; // zeit0
|
17 | zeit1 = zeit1 + 1; // zeit1
|
18 | zeit2 = zeit2 + 1; // zeit2
|
19 | zeit3 = zeit3 + 1; // teit3
|
20 | zeit_0 = zeit_0 + 1; // zeit_0
|
21 | zeit_01 = zeit_01 + 1; // zeit_01
|
22 |
|
23 | Basis_T2 = Basis_T2 +1; // Basis_T2 inv
|
24 | zeit_seriell = zeit_seriell + 1;
|
25 |
|
26 | if (sv_ausg > 0) // Ein/Aus Reset
|
27 | {
|
28 | sv_ausg = sv_ausg - 1;
|
29 | }
|
30 |
|
31 | if (zeit_ausg > 0) // Service Ausgabe (Byte)
|
32 | {
|
33 | zeit_ausg = zeit_ausg - 1;
|
34 | }
|
35 |
|
36 | if (zeit_bit > 0) // Bitzeit
|
37 | {
|
38 | zeit_bit = zeit_bit - 1;
|
39 | }
|
40 |
|
41 | if (zeit_aus > 0) // ein/aus Progr.
|
42 | {
|
43 | zeit_aus = zeit_aus - 1;
|
44 | }
|
45 |
|
46 | if (zeit_man > 0) // Manchestercodezeit
|
47 | {
|
48 | zeit_man = zeit_man - 1;
|
49 | }
|
50 |
|
51 | if (zeit_empf > 0) // Empfangszeit
|
52 | {
|
53 | zeit_empf = zeit_empf - 1;
|
54 | }
|
55 |
|
56 | if (zeit_send > 0) // Sende_zeit
|
57 | {
|
58 | zeit_send = zeit_send - 1;
|
59 | }
|
60 |
|
61 | //if (zeit_pre > 0)
|
62 | if ((zeit_pre > 0) && (Preambel == 1)) // Vorlaufzeit
|
63 | {
|
64 | zeit_pre = zeit_pre - 1;
|
65 | }
|
66 |
|
67 | if (zeit_vor > 0) // Überwachungszeit
|
68 | {
|
69 | zeit_vor = zeit_vor - 1;
|
70 | }
|
71 |
|
72 | }
|
--------------
Mod: Formatierung korrigiert, es muss lauten:
und nicht [\c]