Forum: Mikrocontroller und Digitale Elektronik MEGA32, Speicher schon voll?


von kraemer90 (Gast)


Lesenswert?

Hallo zusammen,

kann es sein dass dieser Programm-Code schon meinen C-Control MEGA32 zum 
erliegen bringt? Müssten dann schon 32kb überschritten sein
1
//Florian Krämer
2
//PROTRAC-KLEMP3
3
4
5
 void Fehler_Out (void)
6
 {
7
 switch (F)
8
        {
9
            case 1:
10
                LCD_CLR();                          //LCD löschen
11
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
12
                Text = "Fehler";                    //auszugebender Text
13
                LCD_Write_Text_Ext();               //Text schreiben
14
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
15
                Text = "Pruefschritt 1";            //auszugebender Text
16
                LCD_Write_Text_Ext();               //Text schreiben
17
18
                AbsDelay(2000);                     //Verzögerung in ms
19
20
                switch (F1)
21
                {
22
                    case 1:
23
                        LCD_CLR();                  //LCD löschen
24
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
25
                        Text = "Unterbrechung";     //auszugebender Text
26
                        LCD_Write_Text_Ext();       //Text schreiben
27
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
28
                        Text = "BU2-5 - KL2-4";     //auszugebender Text
29
                        LCD_Write_Text_Ext();       //Text schreiben
30
                    break;
31
                    case 2:
32
                        LCD_CLR();                  //LCD löschen
33
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
34
                        Text = "Verbindung";        //auszugebender Text
35
                        LCD_Write_Text_Ext();       //Text schreiben
36
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
37
                        Text = "BU2-5 - KL2-1";     //auszugebender Text
38
                        LCD_Write_Text_Ext();       //Text schreiben
39
                    break;
40
41
                    case 3:
42
                        LCD_CLR();                  //LCD löschen
43
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
44
                        Text = "Verbindung";        //auszugebender Text
45
                        LCD_Write_Text_Ext();       //Text schreiben
46
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
47
                        Text = "BU2-5 - KL2-3";     //auszugebender Text
48
                        LCD_Write_Text_Ext();       //Text schreiben
49
                    break;
50
51
                    case 4:
52
                        LCD_CLR();                  //LCD löschen
53
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
54
                        Text = "Verbindung";        //auszugebender Text
55
                        LCD_Write_Text_Ext();       //Text schreiben
56
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
57
                        Text = "BU2-5 - KL2-2";     //auszugebender Text
58
                        LCD_Write_Text_Ext();       //Text schreiben
59
                    break;
60
61
                    case 5:
62
                        LCD_CLR();                  //LCD löschen
63
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
64
                        Text = "Verbindung";        //auszugebender Text
65
                        LCD_Write_Text_Ext();       //Text schreiben
66
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
67
                        Text = "BU2-5 - KL1-1";     //auszugebender Text
68
                        LCD_Write_Text_Ext();       //Text schreiben
69
                    break;
70
71
                    case 6:
72
                        LCD_CLR();                  //LCD löschen
73
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
74
                        Text = "Verbindung";        //auszugebender Text
75
                        LCD_Write_Text_Ext();       //Text schreiben
76
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
77
                        Text = "BU2-5 - KL1-2";     //auszugebender Text
78
                        LCD_Write_Text_Ext();       //Text schreiben
79
                    break;
80
                }
81
                break;
82
83
            case 2:
84
                LCD_CLR();                          //LCD löschen
85
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
86
                Text = "Fehler";                    //auszugebender Text
87
                LCD_Write_Text_Ext();               //Text schreiben
88
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
89
                Text = "Pruefschritt 2";            //auszugebender Text
90
                LCD_Write_Text_Ext();               //Text schreiben
91
92
                AbsDelay(2000);                     //Verzögerung in ms
93
94
                switch (F1)
95
                {
96
                    case 1:
97
                        LCD_CLR();                  //LCD löschen
98
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
99
                        Text = "Unterbrechung";     //auszugebender Text
100
                        LCD_Write_Text_Ext();       //Text schreiben
101
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
102
                        Text = "BU2-5 - BU1-4";     //auszugebender Text
103
                        LCD_Write_Text_Ext();       //Text schreiben
104
                    break;
105
                    case 2:
106
                        LCD_CLR();                  //LCD löschen
107
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
108
                        Text = "Verbindung";        //auszugebender Text
109
                        LCD_Write_Text_Ext();       //Text schreiben
110
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
111
                        Text = "BU2-5 - BU1-1";     //auszugebender Text
112
                        LCD_Write_Text_Ext();       //Text schreiben
113
                    break;
114
115
                    case 3:
116
                        LCD_CLR();                  //LCD löschen
117
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
118
                        Text = "Verbindung";        //auszugebender Text
119
                        LCD_Write_Text_Ext();       //Text schreiben
120
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
121
                        Text = "BU2-5 - BU1-3";     //auszugebender Text
122
                        LCD_Write_Text_Ext();       //Text schreiben
123
                    break;
124
125
                    case 4:
126
                        LCD_CLR();                  //LCD löschen
127
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
128
                        Text = "Verbindung";        //auszugebender Text
129
                        LCD_Write_Text_Ext();       //Text schreiben
130
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
131
                        Text = "BU2-5 - BU1-2";     //auszugebender Text
132
                        LCD_Write_Text_Ext();       //Text schreiben
133
                    break;
134
135
                    case 5:
136
                        LCD_CLR();                  //LCD löschen
137
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
138
                        Text = "Verbindung";        //auszugebender Text
139
                        LCD_Write_Text_Ext();       //Text schreiben
140
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
141
                        Text = "BU2-5 - KL1-1";     //auszugebender Text
142
                        LCD_Write_Text_Ext();       //Text schreiben
143
                    break;
144
145
                    case 6:
146
                        LCD_CLR();                  //LCD löschen
147
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
148
                        Text = "Verbindung";        //auszugebender Text
149
                        LCD_Write_Text_Ext();       //Text schreiben
150
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
151
                        Text = "BU2-5 - KL1-2";     //auszugebender Text
152
                        LCD_Write_Text_Ext();       //Text schreiben
153
                    break;
154
                }
155
                break;
156
157
            case 3:
158
                LCD_CLR();                          //LCD löschen
159
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
160
                Text = "Fehler";                    //auszugebender Text
161
                LCD_Write_Text_Ext();               //Text schreiben
162
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
163
                Text = "Pruefschritt 3";            //auszugebender Text
164
                LCD_Write_Text_Ext();               //Text schreiben
165
166
                AbsDelay(2000);                     //Verzögerung in ms
167
168
                switch (F1)
169
                {
170
                    case 1:
171
                        LCD_CLR();                  //LCD löschen
172
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
173
                        Text = "Verbindung";        //auszugebender Text
174
                        LCD_Write_Text_Ext();       //Text schreiben
175
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
176
                        Text = "BU2-6 - KL2-4";     //auszugebender Text
177
                        LCD_Write_Text_Ext();       //Text schreiben
178
                    break;
179
                    case 2:
180
                        LCD_CLR();                  //LCD löschen
181
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
182
                        Text = "Unterbrechung";     //auszugebender Text
183
                        LCD_Write_Text_Ext();       //Text schreiben
184
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
185
                        Text = "BU2-6 - KL2-1";     //auszugebender Text
186
                        LCD_Write_Text_Ext();       //Text schreiben
187
                    break;
188
189
                    case 3:
190
                        LCD_CLR();                  //LCD löschen
191
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
192
                        Text = "Verbindung";        //auszugebender Text
193
                        LCD_Write_Text_Ext();       //Text schreiben
194
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
195
                        Text = "BU2-6 - KL2-3";     //auszugebender Text
196
                        LCD_Write_Text_Ext();       //Text schreiben
197
                    break;
198
199
                    case 4:
200
                        LCD_CLR();                  //LCD löschen
201
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
202
                        Text = "Verbindung";        //auszugebender Text
203
                        LCD_Write_Text_Ext();       //Text schreiben
204
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
205
                        Text = "BU2-6 - KL2-2";     //auszugebender Text
206
                        LCD_Write_Text_Ext();       //Text schreiben
207
                    break;
208
209
                    case 5:
210
                        LCD_CLR();                  //LCD löschen
211
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
212
                        Text = "Verbindung";        //auszugebender Text
213
                        LCD_Write_Text_Ext();       //Text schreiben
214
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
215
                        Text = "BU2-6 - KL1-1";     //auszugebender Text
216
                        LCD_Write_Text_Ext();       //Text schreiben
217
                    break;
218
219
                    case 6:
220
                        LCD_CLR();                  //LCD löschen
221
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
222
                        Text = "Verbindung";        //auszugebender Text
223
                        LCD_Write_Text_Ext();       //Text schreiben
224
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
225
                        Text = "BU2-6 - KL1-2";     //auszugebender Text
226
                        LCD_Write_Text_Ext();       //Text schreiben
227
                    break;
228
                }
229
                break;
230
231
            case 4:
232
                LCD_CLR();                          //LCD löschen
233
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
234
                Text = "Fehler";                    //auszugebender Text
235
                LCD_Write_Text_Ext();               //Text schreiben
236
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
237
                Text = "Pruefschritt 4";            //auszugebender Text
238
                LCD_Write_Text_Ext();               //Text schreiben
239
240
                AbsDelay(2000);                     //Verzögerung in ms
241
242
                switch (F1)
243
                {
244
                    case 1:
245
                        LCD_CLR();                  //LCD löschen
246
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
247
                        Text = "Verbindung";        //auszugebender Text
248
                        LCD_Write_Text_Ext();       //Text schreiben
249
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
250
                        Text = "BU2-6 - BU1-4";     //auszugebender Text
251
                        LCD_Write_Text_Ext();       //Text schreiben
252
                    break;
253
                    case 2:
254
                        LCD_CLR();                  //LCD löschen
255
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
256
                        Text = "Unterbrechung";     //auszugebender Text
257
                        LCD_Write_Text_Ext();       //Text schreiben
258
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
259
                        Text = "BU2-6 - BU1-1";     //auszugebender Text
260
                        LCD_Write_Text_Ext();       //Text schreiben
261
                    break;
262
263
                    case 3:
264
                        LCD_CLR();                  //LCD löschen
265
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
266
                        Text = "Verbindung";        //auszugebender Text
267
                        LCD_Write_Text_Ext();       //Text schreiben
268
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
269
                        Text = "BU2-6 - BU1-3";     //auszugebender Text
270
                        LCD_Write_Text_Ext();       //Text schreiben
271
                    break;
272
273
                    case 4:
274
                        LCD_CLR();                  //LCD löschen
275
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
276
                        Text = "Verbindung";        //auszugebender Text
277
                        LCD_Write_Text_Ext();       //Text schreiben
278
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
279
                        Text = "BU2-6 - BU1-2";     //auszugebender Text
280
                        LCD_Write_Text_Ext();       //Text schreiben
281
                    break;
282
283
                    case 5:
284
                        LCD_CLR();                  //LCD löschen
285
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
286
                        Text = "Verbindung";        //auszugebender Text
287
                        LCD_Write_Text_Ext();       //Text schreiben
288
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
289
                        Text = "BU2-6 - KL1-1";     //auszugebender Text
290
                        LCD_Write_Text_Ext();       //Text schreiben
291
                    break;
292
293
                    case 6:
294
                        LCD_CLR();                  //LCD löschen
295
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
296
                        Text = "Verbindung";        //auszugebender Text
297
                        LCD_Write_Text_Ext();       //Text schreiben
298
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
299
                        Text = "BU2-6 - KL1-2";     //auszugebender Text
300
                        LCD_Write_Text_Ext();       //Text schreiben
301
                    break;
302
                }
303
                break;
304
305
            case 5:
306
                LCD_CLR();                          //LCD löschen
307
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
308
                Text = "Fehler";                    //auszugebender Text
309
                LCD_Write_Text_Ext();               //Text schreiben
310
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
311
                Text = "Pruefschritt 5";            //auszugebender Text
312
                LCD_Write_Text_Ext();               //Text schreiben
313
314
                AbsDelay(2000);                     //Verzögerung in ms
315
316
                switch (F1)
317
                {
318
                    case 1:
319
                        LCD_CLR();                  //LCD löschen
320
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
321
                        Text = "Verbindung";        //auszugebender Text
322
                        LCD_Write_Text_Ext();       //Text schreiben
323
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
324
                        Text = "BU2-7 - KL2-4";     //auszugebender Text
325
                        LCD_Write_Text_Ext();       //Text schreiben
326
                    break;
327
                    case 2:
328
                        LCD_CLR();                  //LCD löschen
329
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
330
                        Text = "Verbindung";        //auszugebender Text
331
                        LCD_Write_Text_Ext();       //Text schreiben
332
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
333
                        Text = "BU2-7 - KL2-1";     //auszugebender Text
334
                        LCD_Write_Text_Ext();       //Text schreiben
335
                    break;
336
337
                    case 3:
338
                        LCD_CLR();                  //LCD löschen
339
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
340
                        Text = "Unterbrechung";     //auszugebender Text
341
                        LCD_Write_Text_Ext();       //Text schreiben
342
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
343
                        Text = "BU2-7 - KL2-3";     //auszugebender Text
344
                        LCD_Write_Text_Ext();       //Text schreiben
345
                    break;
346
347
                    case 4:
348
                        LCD_CLR();                  //LCD löschen
349
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
350
                        Text = "Verbindung";        //auszugebender Text
351
                        LCD_Write_Text_Ext();       //Text schreiben
352
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
353
                        Text = "BU2-7 - KL2-2";     //auszugebender Text
354
                        LCD_Write_Text_Ext();       //Text schreiben
355
                    break;
356
357
                    case 5:
358
                        LCD_CLR();                  //LCD löschen
359
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
360
                        Text = "Verbindung";        //auszugebender Text
361
                        LCD_Write_Text_Ext();       //Text schreiben
362
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
363
                        Text = "BU2-7 - KL1-1";     //auszugebender Text
364
                        LCD_Write_Text_Ext();       //Text schreiben
365
                    break;
366
367
                    case 6:
368
                        LCD_CLR();                  //LCD löschen
369
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
370
                        Text = "Verbindung";        //auszugebender Text
371
                        LCD_Write_Text_Ext();       //Text schreiben
372
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
373
                        Text = "BU2-7 - KL1-2";     //auszugebender Text
374
                        LCD_Write_Text_Ext();       //Text schreiben
375
                    break;
376
                }
377
                break;
378
379
            case 6:
380
                LCD_CLR();                          //LCD löschen
381
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
382
                Text = "Fehler";                    //auszugebender Text
383
                LCD_Write_Text_Ext();               //Text schreiben
384
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
385
                Text = "Pruefschritt 6";            //auszugebender Text
386
                LCD_Write_Text_Ext();               //Text schreiben
387
388
                AbsDelay(2000);                     //Verzögerung in ms
389
390
                switch (F1)
391
                {
392
                    case 1:
393
                        LCD_CLR();                  //LCD löschen
394
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
395
                        Text = "Verbindung";        //auszugebender Text
396
                        LCD_Write_Text_Ext();       //Text schreiben
397
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
398
                        Text = "BU2-7 - BU1-4";     //auszugebender Text
399
                        LCD_Write_Text_Ext();       //Text schreiben
400
                    break;
401
                    case 2:
402
                        LCD_CLR();                  //LCD löschen
403
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
404
                        Text = "Verbindung";        //auszugebender Text
405
                        LCD_Write_Text_Ext();       //Text schreiben
406
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
407
                        Text = "BU2-7 - BU1-1";     //auszugebender Text
408
                        LCD_Write_Text_Ext();       //Text schreiben
409
                    break;
410
411
                    case 3:
412
                        LCD_CLR();                  //LCD löschen
413
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
414
                        Text = "Unterbrechung";     //auszugebender Text
415
                        LCD_Write_Text_Ext();       //Text schreiben
416
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
417
                        Text = "BU2-7 - BU1-3";     //auszugebender Text
418
                        LCD_Write_Text_Ext();       //Text schreiben
419
                    break;
420
421
                    case 4:
422
                        LCD_CLR();                  //LCD löschen
423
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
424
                        Text = "Verbindung";        //auszugebender Text
425
                        LCD_Write_Text_Ext();       //Text schreiben
426
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
427
                        Text = "BU2-7 - BU1-2";     //auszugebender Text
428
                        LCD_Write_Text_Ext();       //Text schreiben
429
                    break;
430
431
                    case 5:
432
                        LCD_CLR();                  //LCD löschen
433
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
434
                        Text = "Verbindung";        //auszugebender Text
435
                        LCD_Write_Text_Ext();       //Text schreiben
436
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
437
                        Text = "BU2-7 - KL1-1";     //auszugebender Text
438
                        LCD_Write_Text_Ext();       //Text schreiben
439
                    break;
440
441
                    case 6:
442
                        LCD_CLR();                  //LCD löschen
443
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
444
                        Text = "Verbindung";        //auszugebender Text
445
                        LCD_Write_Text_Ext();       //Text schreiben
446
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
447
                        Text = "BU2-7 - KL1-2";     //auszugebender Text
448
                        LCD_Write_Text_Ext();       //Text schreiben
449
                    break;
450
                }
451
                break;
452
453
            case 7:
454
                LCD_CLR();                          //LCD löschen
455
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
456
                Text = "Fehler";                    //auszugebender Text
457
                LCD_Write_Text_Ext();               //Text schreiben
458
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
459
                Text = "Pruefschritt 7";            //auszugebender Text
460
                LCD_Write_Text_Ext();               //Text schreiben
461
462
                AbsDelay(2000);                     //Verzögerung in ms
463
464
                switch (F1)
465
                {
466
                    case 1:
467
                        LCD_CLR();                  //LCD löschen
468
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
469
                        Text = "Verbindung";        //auszugebender Text
470
                        LCD_Write_Text_Ext();       //Text schreiben
471
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
472
                        Text = "BU2-8 - KL2-4";     //auszugebender Text
473
                        LCD_Write_Text_Ext();       //Text schreiben
474
                    break;
475
                    case 2:
476
                        LCD_CLR();                  //LCD löschen
477
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
478
                        Text = "Verbindung";        //auszugebender Text
479
                        LCD_Write_Text_Ext();       //Text schreiben
480
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
481
                        Text = "BU2-8 - KL2-1";     //auszugebender Text
482
                        LCD_Write_Text_Ext();       //Text schreiben
483
                    break;
484
485
                    case 3:
486
                        LCD_CLR();                  //LCD löschen
487
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
488
                        Text = "Verbindung";        //auszugebender Text
489
                        LCD_Write_Text_Ext();       //Text schreiben
490
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
491
                        Text = "BU2-8 - KL2-3";     //auszugebender Text
492
                        LCD_Write_Text_Ext();       //Text schreiben
493
                    break;
494
495
                    case 4:
496
                        LCD_CLR();                  //LCD löschen
497
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
498
                        Text = "Unterbrechung";     //auszugebender Text
499
                        LCD_Write_Text_Ext();       //Text schreiben
500
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
501
                        Text = "BU2-8 - KL2-2";     //auszugebender Text
502
                        LCD_Write_Text_Ext();       //Text schreiben
503
                    break;
504
505
                    case 5:
506
                        LCD_CLR();                  //LCD löschen
507
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
508
                        Text = "Verbindung";        //auszugebender Text
509
                        LCD_Write_Text_Ext();       //Text schreiben
510
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
511
                        Text = "BU2-8 - KL1-1";     //auszugebender Text
512
                        LCD_Write_Text_Ext();       //Text schreiben
513
                    break;
514
515
                    case 6:
516
                        LCD_CLR();                  //LCD löschen
517
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
518
                        Text = "Verbindung";        //auszugebender Text
519
                        LCD_Write_Text_Ext();       //Text schreiben
520
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
521
                        Text = "BU2-8 - KL1-2";     //auszugebender Text
522
                        LCD_Write_Text_Ext();       //Text schreiben
523
                    break;
524
                }
525
                break;
526
527
            case 8:
528
                LCD_CLR();                          //LCD löschen
529
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
530
                Text = "Fehler";                    //auszugebender Text
531
                LCD_Write_Text_Ext();               //Text schreiben
532
                LCD_Locate_Ext(2,1);                //Zeile 1, Pos 1
533
                Text = "Pruefschritt 8";            //auszugebender Text
534
                LCD_Write_Text_Ext();               //Text schreiben
535
536
                AbsDelay(2000);                     //Verzögerung in ms
537
538
                switch (F1)
539
                {
540
                    case 1:
541
                        LCD_CLR();                  //LCD löschen
542
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
543
                        Text = "Verbindung";        //auszugebender Text
544
                        LCD_Write_Text_Ext();       //Text schreiben
545
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
546
                        Text = "BU2-8 - BU1-4";     //auszugebender Text
547
                        LCD_Write_Text_Ext();       //Text schreiben
548
                    break;
549
                    case 2:
550
                        LCD_CLR();                  //LCD löschen
551
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
552
                        Text = "Verbindung";        //auszugebender Text
553
                        LCD_Write_Text_Ext();       //Text schreiben
554
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
555
                        Text = "BU2-8 - BU1-1";     //auszugebender Text
556
                        LCD_Write_Text_Ext();       //Text schreiben
557
                    break;
558
559
                    case 3:
560
                        LCD_CLR();                  //LCD löschen
561
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
562
                        Text = "Verbindung";        //auszugebender Text
563
                        LCD_Write_Text_Ext();       //Text schreiben
564
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
565
                        Text = "BU2-8 - BU1-3";     //auszugebender Text
566
                        LCD_Write_Text_Ext();       //Text schreiben
567
                    break;
568
569
                    case 4:
570
                        LCD_CLR();                  //LCD löschen
571
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
572
                        Text = "Unterbrechung";     //auszugebender Text
573
                        LCD_Write_Text_Ext();       //Text schreiben
574
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
575
                        Text = "BU2-8 - BU1-2";     //auszugebender Text
576
                        LCD_Write_Text_Ext();       //Text schreiben
577
                    break;
578
579
                    case 5:
580
                        LCD_CLR();                  //LCD löschen
581
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
582
                        Text = "Verbindung";        //auszugebender Text
583
                        LCD_Write_Text_Ext();       //Text schreiben
584
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
585
                        Text = "BU2-8 - KL1-1";     //auszugebender Text
586
                        LCD_Write_Text_Ext();       //Text schreiben
587
                    break;
588
589
                    case 6:
590
                        LCD_CLR();                  //LCD löschen
591
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
592
                        Text = "Verbindung";        //auszugebender Text
593
                        LCD_Write_Text_Ext();       //Text schreiben
594
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
595
                        Text = "BU2-8 - KL1-2";     //auszugebender Text
596
                        LCD_Write_Text_Ext();       //Text schreiben
597
                    break;
598
                }
599
                break;
600
            }
601
 }

Und wenn ja, gibt es eine Möglichkeit diese Fehlerausgabe Ressourcen 
schonender zu schreiben?

von Stefan B. (blueberlin)


Lesenswert?

selbst wenn der speicher voll sein sollte, das programm kann man noch 
sehr stark optimieren und bestimmt noch mehrere kb einsparen.

Wie genau das sollte dir vielleicht selbst bei den case sprüngen 
sichtbar sein, warum schreibst du jedes mal die ganzen zeilen wie 
display löschen usw... das reicht doch einmal und nur die beiden zeilen 
text sind jedes mal anders das reicht doch wenn du das in den case 
bereich schreibst.

von Nick (Gast)


Lesenswert?

Da du nicht den gesamten Quellcode zeigst (mir fehlen da sämtliche 
Includes usw.) ist das schwer zu sagen. So oder so ist der Quellcode 
aber extrem ineffizient.

von Εrnst B. (ernst)


Lesenswert?

Was auf jeden Fall zu Optimieren ist:

Sachen wie
1
Text = "Fehler";
brauchen doppelt Platz. Einmal für den String "Fehler" im Flash, einmal 
für eine komplett unnötige Kopie desselben Strings im eh schon knappen 
RAM!
=> PSTR, pgmspace.h, ...

und, wie ist "AbsDelay" definiert?

hoffentlich als Variante von
1
void AbsDelay(uint16_t x) {
2
  while (x--) _delay_ms(1.0);
3
}
und nicht als
1
void AbsDelay(uint16_t x) {
2
  _delay_ms(x);
3
}

von kraemer90 (Gast)


Lesenswert?

Das Problem ist, dass das mein erstes größeres Projekt ist. Ich habe bis 
jetzt nur Lauflichter, Uhren, kleinere Steuerungen, etc... programmiert. 
Und dies habe ich immer zum Laufen gebracht.(Wahrscheinlich halt auch 
mit jede Menge zu vielem Code)

Das mit dem LCD löschen ist klar, habe ich jetzt ganz nach oben gesetzt.

Text "Fehler" kann ich ja in ein Unterprogramm packen und dann aufrufen. 
Oder gibt es da eine bessere Lösung?
1
 void fehler (void)
2
 {
3
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
4
                Text = "Fehler";                    //auszugebender Text
5
                LCD_Write_Text_Ext();               //Text schreiben
6
 }

von Lukas K. (carrotindustries)


Lesenswert?

kraemer90 schrieb:
> Oder gibt es da eine bessere Lösung?

Ja, indem du den Text im Programmspeicher ablegst; siehe dazu die 
entsprechenden Abschnitte im AVR-GCC-Tutorial

von Floh (Gast)


Lesenswert?

Leg dir deine Fehlermeldungen als konstanten String im Flash ab, am 
besten sogar als Array.
Dann greifst du mit dem Fehlerindex auf diese Array zu und holst dir den 
auszugebenden Text.
Damit sparst du dir die ganze switch-Konstruktion.
:-)

von kraemer90 (Gast)


Lesenswert?

Ein weiteres Problem ist auch dass ich C Control von Conrad habe, da 
gehen die speziellen Befehle nicht.

"Deklarationen von Variablen im Flash-Speicher werden durch das 
"Attribut" PROGMEM ergänzt."

PROGMEM funktioniert bei mir aber nicht, der Compiler bringt folgende 
Fehlermeldung:

Syntax Fehler - unerwartetes Symbol: 'PROGMEM'
ein Fehler - Kompilation abgebrochen.

1
char fehler PROGMEM = "Fehler";

von !Gast (Gast)


Lesenswert?

kraemer90 schrieb:
>
1
char fehler PROGMEM = "Fehler";

Das ist in der Tat ein Fehler...
1
 char fehler[] = "Fehler";

von Lukas K. (carrotindustries)


Lesenswert?

kraemer90 schrieb:
> PROGMEM funktioniert bei mir aber nicht, der Compiler bringt folgende
> Fehlermeldung:
>
> Syntax Fehler - unerwartetes Symbol: 'PROGMEM'
> ein Fehler - Kompilation abgebrochen.

Ja was für einen Compiler, der Deutsche Fehlermeldungen ausgibt, hast du 
denn?

von kraemer90 (Gast)


Lesenswert?

C-Control-Pro IDE, bei anderen läuft ja der C-Control-Controller nicht

von kraemer90 (Gast)


Lesenswert?

!Gast schrieb:
> kraemer90 schrieb:
>>char fehler PROGMEM = "Fehler";
> Das ist in der Tat ein Fehler... char fehler[] = "Fehler";

1
char fehler[] = "Fehler";

Syntax Fehler - unerwartetes Symbol: '[]'
ein Fehler - Kompilation abgebrochen.

von Lukas K. (carrotindustries)


Lesenswert?

kraemer90 schrieb:
> C-Control-Pro IDE, bei anderen läuft ja der C-Control-Controller nicht
Achso, (fast) alles hier verwendet GCC, keine Ahnung wie man das der 
komischen C-Control-IDE beibringt. Afaik basieren die neueren C-Controls 
auf AVRs, also sollte einer Verwendung von anderen / besseren :> 
Compilern nichts im Wege stehen.

von Vlad T. (vlad_tepesch)


Lesenswert?

kraemer90 schrieb:
> char fehler[] = "Fehler";
> Syntax Fehler - unerwartetes Symbol: '[]'
> ein Fehler - Kompilation abgebrochen.

dann ist der c-compiler schrott

von kraemer90 (Gast)


Lesenswert?

Ja, habe ich auch schon gemerkt, aber laut Recherchen hier im Forum 
bekommt man das Programm nur mit dem C Control PRO IDE auf den 
Controller übertragen. Und einfach ein Hex-File einlesen geht auch 
nicht.

von Lukas K. (carrotindustries)


Lesenswert?

Was Für ein Board hast du denn? Vielleicht ist da ja eine 
ISP-Schnittstelle drauf. (Ich geh' mal davon aus, dass C-Control einen 
Bootloader verwendet)

von !Gast (Gast)


Lesenswert?

kraemer90 schrieb:
> !Gast schrieb:
>> kraemer90 schrieb:
>>>char fehler PROGMEM = "Fehler";
>> Das ist in der Tat ein Fehler... char fehler[] = "Fehler";
>
>
>
1
char fehler[] = "Fehler";
>
> Syntax Fehler - unerwartetes Symbol: '[]'
> ein Fehler - Kompilation abgebrochen.

Dann ist die benutzte Sprache nicht C.

von Lukas K. (carrotindustries)


Lesenswert?

Zur ursprünglichen Frage zurück: Vielleicht ist der C-Control Compiler 
so minderbemittelt und produziert furchtbar großen Code?

von kraemer90 (Gast)


Lesenswert?

http://www.c-control.de/c-control-pro/c-control-pro/startseite_c-control-pro.html

Ja das stimmt, nennt sich CompactC

Ich habe auch das Application Board von Conrad

von Lukas K. (carrotindustries)


Lesenswert?

kraemer90 schrieb:
> Ich habe auch das Application Board von Conrad

Das ist egal. Welches Mikroprozessorboard hast du?

von kraemer90 (Gast)


Lesenswert?

Darüber gibt es keine Informationen. Welcher Controller unter der 
"Metallhaube" steckt weiß nur Conrad.

http://www.conrad.de/ce/de/product/198206/;jsessionid=E401A5BD9AB77141F6757D660B15CEFD.ASTPCCP10

von Lukas K. (carrotindustries)


Lesenswert?

kraemer90 schrieb:
> Darüber gibt es keine Informationen. Welcher Controller unter der
Hmm.. das Ding heißt Mega32, da könnte doch ein .... ATmega32 
drunterstecken...
Mein Rat: Wenn du's ernst meinst, Vergiss' C-Control

von kraemer90 (Gast)


Lesenswert?

Das muss ich dann erstmal mit meinem Beauftragten abklären, ist nämlich 
ein Projekt für den Betrieb (Ich bin auch noch Azubi). Für kleinere 
Sachen ist es ja auch recht einfach, man hat in kürzester Zeit etwas am 
laufen. Für komplexere Dinge ist aber gleich Schluss...

von Floh (Gast)


Lesenswert?

kraemer90 schrieb:
> Darüber gibt es keine Informationen. Welcher Controller unter der
> "Metallhaube" steckt weiß nur Conrad.

das ist ein atmel mega32.
Im Datenblatt/Handbuch gibts Schaltpläne, Pinzuordnung...
http://www.produktinfo.conrad.com/datenblaetter/175000-199999/198206-an-01-de-C_CONTROL_PRO_UNIT_MEGA_32.pdf
:-)

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Im C-Control Mega32 ist ein ATmega32 drin, im Mega128 ein ATmega128.

Das Entwicklungssystem ist kein Compiler im herkömmlichen Sinn.
Auf dem ATmega läuft ein Tokeninterpreter, der CompactC-Quellcode wird 
in Tokens übersetzt (so ähnlich wie Java) und auf einer virtuellen 
Maschine am ATmega ausgeführt.

Text = "Verbindung";        //auszugebender Text

"Verbindung" liegt automatisch nur im Flash, das PROGMEM Attribut wird 
hier nicht benötigt.

Und Text ist ja nur einmal definiert, es wird also auch nicht besonders 
viel RAM verschwendet.

Allerdings sollte man sich schon überlegen, ähnliche Textausgaben so 
aufzuteilen, dass gleich lautende Texte in Funktionen gruppiert werden.

Eben genau so, aber mit allem, das öfter vorkommt:
1
 void fehler (void)
2
 {
3
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1
4
                Text = "Fehler";                    //auszugebender Text
5
                LCD_Write_Text_Ext();               //Text schreiben
6
 }

Dann dürfte das Speicherproblem schon gelöst sein.

Grüße,

Peter

von kraemer90 (Gast)


Lesenswert?

> Allerdings sollte man sich schon überlegen, ähnliche Textausgaben so
> aufzuteilen, dass gleich lautende Texte in Funktionen gruppiert werden.
>
> Dann dürfte das Speicherproblem schon gelöst sein.
>
> Grüße,
>
> Peter

Ich werde jetzt erstmal alles was mehrmals vorkommt in Unterprogramme 
gruppieren und dann mal weiter programmieren.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

Dann gibt es in deinem Programm noch jede Menge Konstrukte, die man 
vereinfachen kann:

z.B.:
1
 switch (F1)
2
                {
3
                    case 1:
4
                        LCD_CLR();                  //LCD löschen
5
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
6
                        Text = "Verbindung";        //auszugebender Text
7
                        LCD_Write_Text_Ext();       //Text schreiben
8
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
9
                        Text = "BU2-7 - KL2-4";     //auszugebender Text
10
                        LCD_Write_Text_Ext();       //Text schreiben
11
                    break;
12
                    case 2:
13
                        LCD_CLR();                  //LCD löschen
14
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
15
                        Text = "Verbindung";        //auszugebender Text
16
                        LCD_Write_Text_Ext();       //Text schreiben
17
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
18
                        Text = "BU2-7 - KL2-1";     //auszugebender Text
19
                        LCD_Write_Text_Ext();       //Text schreiben
20
                    break;
21
22
                    case 3:
23
                        LCD_CLR();                  //LCD löschen
24
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
25
                        Text = "Unterbrechung";     //auszugebender Text
26
                        LCD_Write_Text_Ext();       //Text schreiben
27
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
28
                        Text = "BU2-7 - KL2-3";     //auszugebender Text
29
                        LCD_Write_Text_Ext();       //Text schreiben
30
                    break;
31
32
                    case 4:
33
                        LCD_CLR();                  //LCD löschen
34
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
35
                        Text = "Verbindung";        //auszugebender Text
36
                        LCD_Write_Text_Ext();       //Text schreiben
37
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
38
                        Text = "BU2-7 - KL2-2";     //auszugebender Text
39
                        LCD_Write_Text_Ext();       //Text schreiben
40
                    break;
41
42
                    case 5:
43
                        LCD_CLR();                  //LCD löschen
44
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
45
                        Text = "Verbindung";        //auszugebender Text
46
                        LCD_Write_Text_Ext();       //Text schreiben
47
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
48
                        Text = "BU2-7 - KL1-1";     //auszugebender Text
49
                        LCD_Write_Text_Ext();       //Text schreiben
50
                    break;
51
52
                    case 6:
53
                        LCD_CLR();                  //LCD löschen
54
                        LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
55
                        Text = "Verbindung";        //auszugebender Text
56
                        LCD_Write_Text_Ext();       //Text schreiben
57
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
58
                        Text = "BU2-7 - KL1-2";     //auszugebender Text
59
                        LCD_Write_Text_Ext();       //Text schreiben
60
                    break;
61
                }

lässt sich problemlos vereinfachen in:
1
void Write_Verbindung()
2
{
3
                        Text = "Verbindung";        //auszugebender Text
4
                        LCD_Write_Text_Ext();       //Text schreiben
5
}
6
7
8
//in void Fehler_Out (void)
9
10
 LCD_CLR();                  //LCD hier löschen, denn das machen wir in jedem case
11
 LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1, machen wir auch immer
12
 switch (F1)
13
                {
14
                    case 1:
15
                        Write_Verbindung();
16
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
17
                        Text = "BU2-7 - KL2-4";     //auszugebender Text
18
                    break;
19
20
                    case 2:
21
                        Write_Verbindung();
22
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
23
                        Text = "BU2-7 - KL2-1";     //auszugebender Text
24
                    break;
25
26
                    case 3:
27
                        Text = "Unterbrechung";     //auszugebender Text
28
                        LCD_Write_Text_Ext();       //Text schreiben
29
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
30
                        Text = "BU2-7 - KL2-3";     //auszugebender Text
31
                    break;
32
33
                    case 4:
34
                        Write_Verbindung();
35
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
36
                        Text = "BU2-7 - KL2-2";     //auszugebender Text
37
                    break;
38
39
                    case 5:
40
                        Write_Verbindung();
41
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
42
                        Text = "BU2-7 - KL1-1";     //auszugebender Text
43
                    break;
44
45
                    case 6:
46
                        Write_Verbindung();
47
                        LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
48
                        Text = "BU2-7 - KL1-2";     //auszugebender Text
49
                    break;
50
                }
51
LCD_Write_Text_Ext();       //Text schreiben, hier ein Mal für alle Fälle

Und das ist bei weitem noch nicht alles, was man da machen kann.

Grüße,

Peter

von kraemer90 (Gast)


Lesenswert?

So kann man das jetzt noch weiter zusammenfassen und den code 
verkleinern?
1
//Florian Krämer
2
//PROTRAC-KLEMP3
3
4
5
 void Fehler_Out (void)
6
 {
7
 clr_pos1();                                        //LCD-Löschen und Cursor an Position 1 setzen
8
 fehler();                                          //"Fehler" ausgeben
9
 LCD_Locate_Ext(2,1);                               //Zeile 2, Pos 1
10
11
 switch (F)
12
        {
13
14
15
            case 1:
16
17
                Text = "Pruefschritt 1";            //auszugebender Text
18
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
19
20
                switch (F1)
21
                {
22
                    case 1:
23
                        unterbrechung();            //Unterbrechung wurd ausgegeben
24
                        Text = "BU2-5 - KL2-4";     //auszugebender Text
25
                    break;
26
                    case 2:
27
                        verbindung();               //Verbindung wird ausgegeben
28
                        Text = "BU2-5 - KL2-1";     //auszugebender Text
29
                    break;
30
31
                    case 3:
32
                        verbindung();               //Verbindung wird ausgegeben
33
                        Text = "BU2-5 - KL2-3";     //auszugebender Text
34
                    break;
35
36
                    case 4:
37
                        verbindung();               //Verbindung wird ausgegeben
38
                        Text = "BU2-5 - KL2-2";     //auszugebender Text
39
                    break;
40
41
                    case 5:
42
                        verbindung();               //Verbindung wird ausgegeben
43
                        Text = "BU2-5 - KL1-1";     //auszugebender Text
44
                    break;
45
46
                    case 6:
47
                        verbindung();               //Verbindung wird ausgegeben
48
                        Text = "BU2-5 - KL1-2";     //auszugebender Text
49
50
                    break;
51
                }
52
                break;
53
54
            case 2:
55
                Text = "Pruefschritt 2";            //auszugebender Text
56
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
57
58
                switch (F1)
59
                {
60
                    case 1:
61
                        unterbrechung();            //Unterbrechung wurd ausgegeben
62
                        Text = "BU2-5 - BU1-4";     //auszugebender Text
63
                    break;
64
                    case 2:
65
                        verbindung();               //Verbindung wird ausgegeben
66
                        Text = "BU2-5 - BU1-1";     //auszugebender Text
67
                    break;
68
69
                    case 3:
70
                        verbindung();               //Verbindung wird ausgegeben
71
                        Text = "BU2-5 - BU1-3";     //auszugebender Text
72
                    break;
73
74
                    case 4:
75
                        verbindung();               //Verbindung wird ausgegeben
76
                        Text = "BU2-5 - BU1-2";     //auszugebender Text
77
                    break;
78
79
                    case 5:
80
                        verbindung();               //Verbindung wird ausgegeben
81
                        Text = "BU2-5 - KL1-1";     //auszugebender Text
82
                    break;
83
84
                    case 6:
85
                        verbindung();               //Verbindung wird ausgegeben
86
                        Text = "BU2-5 - KL1-2";     //auszugebender Text
87
                    break;
88
                }
89
                break;
90
91
            case 3:
92
                Text = "Pruefschritt 3";            //auszugebender Text
93
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
94
95
                switch (F1)
96
                {
97
                    case 1:
98
                        verbindung();               //Verbindung wird ausgegeben
99
                        Text = "BU2-6 - KL2-4";     //auszugebender Text
100
                    break;
101
                    case 2:
102
                        unterbrechung();            //Unterbrechung wurd ausgegeben
103
                        Text = "BU2-6 - KL2-1";     //auszugebender Text
104
                    break;
105
106
                    case 3:
107
                        verbindung();               //Verbindung wird ausgegeben
108
                        Text = "BU2-6 - KL2-3";     //auszugebender Text
109
                    break;
110
111
                    case 4:
112
                        verbindung();               //Verbindung wird ausgegeben
113
                        Text = "BU2-6 - KL2-2";     //auszugebender Text
114
                    break;
115
116
                    case 5:
117
                        verbindung();               //Verbindung wird ausgegeben
118
                        Text = "BU2-6 - KL1-1";     //auszugebender Text
119
                    break;
120
121
                    case 6:
122
                        verbindung();               //Verbindung wird ausgegeben
123
                        Text = "BU2-6 - KL1-2";     //auszugebender Text
124
                    break;
125
                }
126
                break;
127
128
            case 4:
129
                Text = "Pruefschritt 4";            //auszugebender Text
130
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
131
                switch (F1)
132
                {
133
                    case 1:
134
                        verbindung();               //Verbindung wird ausgegeben
135
                        Text = "BU2-6 - BU1-4";     //auszugebender Text
136
                    break;
137
                    case 2:
138
                        unterbrechung();            //Unterbrechung wurd ausgegeben
139
                        Text = "BU2-6 - BU1-1";     //auszugebender Text
140
                    break;
141
142
                    case 3:
143
                        verbindung();               //Verbindung wird ausgegeben
144
                        Text = "BU2-6 - BU1-3";     //auszugebender Text
145
                    break;
146
147
                    case 4:
148
                        verbindung();               //Verbindung wird ausgegeben
149
                        Text = "BU2-6 - BU1-2";     //auszugebender Text
150
                    break;
151
152
                    case 5:
153
                        verbindung();               //Verbindung wird ausgegeben
154
                        Text = "BU2-6 - KL1-1";     //auszugebender Text
155
                    break;
156
157
                    case 6:
158
                        verbindung();               //Verbindung wird ausgegeben
159
                        Text = "BU2-6 - KL1-2";     //auszugebender Textn
160
                    break;
161
                }
162
                break;
163
164
            case 5:
165
                Text = "Pruefschritt 5";            //auszugebender Text
166
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
167
168
                switch (F1)
169
                {
170
                    case 1:
171
                        verbindung();               //Verbindung wird ausgegeben
172
                        Text = "BU2-7 - KL2-4";     //auszugebender Text
173
                    break;
174
                    case 2:
175
                        verbindung();               //Verbindung wird ausgegeben
176
                        Text = "BU2-7 - KL2-1";     //auszugebender Text
177
                    break;
178
179
                    case 3:
180
                        unterbrechung();            //Unterbrechung wurd ausgegeben
181
                        Text = "BU2-7 - KL2-3";     //auszugebender Text
182
                    break;
183
184
                    case 4:
185
                        verbindung();               //Verbindung wird ausgegeben
186
                        Text = "BU2-7 - KL2-2";     //auszugebender Text
187
                    break;
188
189
                    case 5:
190
                        verbindung();               //Verbindung wird ausgegeben
191
                        Text = "BU2-7 - KL1-1";     //auszugebender Text
192
                    break;
193
194
                    case 6:
195
                        verbindung();               //Verbindung wird ausgegeben
196
                        Text = "BU2-7 - KL1-2";     //auszugebender Text
197
                    break;
198
                }
199
                break;
200
201
            case 6:
202
                Text = "Pruefschritt 6";            //auszugebender Text
203
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
204
205
                switch (F1)
206
                {
207
                    case 1:
208
                        verbindung();               //Verbindung wird ausgegeben
209
                        Text = "BU2-7 - BU1-4";     //auszugebender Text
210
                    break;
211
                    case 2:
212
                        verbindung();               //Verbindung wird ausgegeben
213
                        Text = "BU2-7 - BU1-1";     //auszugebender Text
214
                    break;
215
216
                    case 3:
217
                        unterbrechung();            //Unterbrechung wurd ausgegeben
218
                        Text = "BU2-7 - BU1-3";     //auszugebender Text
219
                    break;
220
221
                    case 4:
222
                        verbindung();               //Verbindung wird ausgegeben
223
                        Text = "BU2-7 - BU1-2";     //auszugebender Text
224
                    break;
225
226
                    case 5:
227
                        verbindung();               //Verbindung wird ausgegeben
228
                        Text = "BU2-7 - KL1-1";     //auszugebender Text
229
                    break;
230
231
                    case 6:
232
                        verbindung();               //Verbindung wird ausgegeben
233
                        Text = "BU2-7 - KL1-2";     //auszugebender Text
234
                    break;
235
                }
236
                break;
237
238
            case 7:
239
                Text = "Pruefschritt 7";            //auszugebender Text
240
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
241
242
                switch (F1)
243
                {
244
                    case 1:
245
                        verbindung();               //Verbindung wird ausgegeben
246
                        Text = "BU2-8 - KL2-4";     //auszugebender Text
247
                    break;
248
                    case 2:
249
                        verbindung();               //Verbindung wird ausgegeben
250
                        Text = "BU2-8 - KL2-1";     //auszugebender Text
251
                    break;
252
253
                    case 3:
254
                        verbindung();               //Verbindung wird ausgegeben
255
                        Text = "BU2-8 - KL2-3";     //auszugebender Text
256
                    break;
257
258
                    case 4:
259
                        unterbrechung();            //Unterbrechung wurd ausgegeben
260
                        Text = "BU2-8 - KL2-2";     //auszugebender Text
261
                    break;
262
263
                    case 5:
264
                        verbindung();               //Verbindung wird ausgegeben
265
                        Text = "BU2-8 - KL1-1";     //auszugebender Text
266
                    break;
267
268
                    case 6:
269
                        verbindung();               //Verbindung wird ausgegeben
270
                        Text = "BU2-8 - KL1-2";     //auszugebender Text
271
                    break;
272
                }
273
                break;
274
275
            case 8:
276
                Text = "Pruefschritt 8";            //auszugebender Text
277
                write_w8_clr();                     //Text schreiben, Warten, LCD Löschen
278
279
                switch (F1)
280
                {
281
                    case 1:
282
                        verbindung();               //Verbindung wird ausgegeben
283
                        Text = "BU2-8 - BU1-4";     //auszugebender Text
284
                    break;
285
                    case 2:
286
                        verbindung();               //Verbindung wird ausgegeben
287
                        Text = "BU2-8 - BU1-1";     //auszugebender Text
288
                    break;
289
290
                    case 3:
291
                        verbindung();               //Verbindung wird ausgegeben
292
                        Text = "BU2-8 - BU1-3";     //auszugebender Text
293
                    break;
294
295
                    case 4:
296
                        unterbrechung();            //Unterbrechung wurd ausgegeben
297
                        Text = "BU2-8 - BU1-2";     //auszugebender Text
298
                    break;
299
300
                    case 5:
301
                        verbindung();               //Verbindung wird ausgegeben
302
                        Text = "BU2-8 - KL1-1";     //auszugebender Text
303
                    break;
304
305
                    case 6:
306
                        verbindung();               //Verbindung wird ausgegeben
307
                        Text = "BU2-8 - KL1-2";     //auszugebender Text
308
                    break;
309
                }
310
                break;
311
            }
312
    LCD_Write_Text_Ext();       //Text schreiben
313
 }
314
315
 void fehler (void)
316
 {
317
    Text = "Fehler";                    //auszugebender Text
318
    LCD_Write_Text_Ext();               //Text schreiben
319
 }
320
321
 void verbindung (void)
322
 {
323
    LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
324
    Text = "Verbindung";        //auszugebender Text
325
    LCD_Write_Text_Ext();       //Text schreiben
326
    LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
327
 }
328
329
 void unterbrechung (void)
330
 {
331
    LCD_Locate_Ext(1,1);        //Zeile 1, Pos 1
332
    Text = "Unterbrechung";     //auszugebender Text
333
    LCD_Write_Text_Ext();       //Text schreiben
334
    LCD_Locate_Ext(2,1);        //Zeile 1, Pos 1
335
 }
336
337
void write_w8_clr (void)        //Text schreiben, Warten, LCD Löschen
338
{
339
    LCD_Write_Text_Ext();       //Text schreiben
340
    AbsDelay(2000);             //Verzögerung in ms
341
    LCD_CLR();                  //LCD löschen
342
}

von Peter (Gast)


Lesenswert?

da geht noch viel mehr:
1
switch (F1)
2
                {
3
                    case 1:
4
                        verbindung();               //Verbindung wird ausgegeben
5
                        Text = "BU2-8 - BU1-4";     //auszugebender Text
6
                    break;
7
                    case 2:
8
                        verbindung();               //Verbindung wird ausgegeben
9
                        Text = "BU2-8 - BU1-1";     //auszugebender Text
10
                    break;
11
12
                    case 3:
13
                        verbindung();               //Verbindung wird ausgegeben
14
                        Text = "BU2-8 - BU1-3";     //auszugebender Text
15
                    break;
16
17
                    case 4:
18
                        unterbrechung();            //Unterbrechung wurd ausgegeben
19
                        Text = "BU2-8 - BU1-2";     //auszugebender Text
20
                    break;
21
22
                    case 5:
23
                        verbindung();               //Verbindung wird ausgegeben
24
                        Text = "BU2-8 - KL1-1";     //auszugebender Text
25
                    break;
26
27
                    case 6:
28
                        verbindung();               //Verbindung wird ausgegeben
29
                        Text = "BU2-8 - KL1-2";     //auszugebender Text
30
                    break;
31
                }
32
                break;

kann man in etwas so verkleinern.
1
char* Texte[] = {"BU2-8 - BU1-4", "BU2-8 - BU1-1", "BU2-8 - BU1-3", "BU2-8 - BU1-2", "BU2-8 - BU1-3", "BU2-8 - BU1-2", "BU2-8 - KL1-1","BU2-8 - KL1-2"};
2
verbindung();
3
Text = Texte[F1];

von Lukas K. (carrotindustries)


Lesenswert?

Gibt es einen mathematisch ausdrückbaren Zusammenhang zwischen F/F1 und 
BUn-o - KLp-q ?

Peter schrieb:
> char* Texte[]
Doch an ebendem scheitert die minderbemittelte C-Control IDE :(

von Floh (Gast)


Lesenswert?

Peter schrieb:
> char* Texte[] = {"BU2-8 - BU1-4", "BU2-8 - BU1-1", "BU2-8 - BU1-3", "BU2-8 - 
BU1-2", "BU2-8 - BU1-3", "BU2-8 - BU1-2", "BU2-8 - KL1-1","BU2-8 - KL1-2"};
> verbindung();
> Text = Texte[F1];

Da wärs noch perfekt, wenn du die Texte im Flash abspeichern könntest.
Aber das musst du im Handbuch für CompactC nachschauen, ob das geht.
:-)

von Peter (Gast)


Lesenswert?

Luk4s K. schrieb:
> Doch an ebendem scheitert die minderbemittelte C-Control IDE :(

nagut aber etwas geht doch bestimmt:
1
verbindung();
2
switch (F1) {
3
    case 1: Text = "BU2-8 - BU1-4"; break; 
4
    case 2: Text = "BU2-8 - BU1-1"; break;
5
    case 3: Text = "..."; break;
6
    case 4: Text = "..."; break;
7
    case 5: Text = "..."; break;
8
    case 6: Text = "..."; break;
9
 }
ist doch schon viel compakter lesbar

von Peter (Gast)


Lesenswert?

mist vergesst es, es ist ja nicht immer verbinden.

von Florian K. (kraemer90)


Lesenswert?

jop, ich muss jetzt erst mal nachlesen wie man ein "Text-Array" in 
CompactC hinbekommt.

So geht es auf jeden Fall nicht.
1
 char Texte("BU2-8 - BU1-4", "BU2-8 - BU1-1", "BU2-8 - BU1-3", "BU2-8 - BU1-2", "BU2-8 - BU1-3", "BU2-8 - BU1-2", "BU2-8 - KL1-1","BU2-8 - KL1-2");

von Florian K. (kraemer90)


Lesenswert?

also so würde es gehen, ist das die übliche Schreibweise?
1
                switch (F1)
2
                {
3
                    case 1: write_unterbrechung(); Text = "BU2-5 - KL2-4"; break;   //"Unterbrechung" ausgeben, Text definieren, verlassen
4
                    case 2: write_verbindung(); Text = "BU2-5 - KL2-1"; break;     //"Verbindung" ausgeben, Text definieren, verlassen

von Peter (Gast)


Lesenswert?

[c]
char* Texte= {"BU2-8 - BU1-4\0BU2-8 - BU1-1\0BU2-8 - BU1-3\0BU2-8 - 
BU1-2\0BU2-8 - BU1-3\0BU2-8 - BU1-2\0BU2-8 - KL1-1\0BU2-8 - KL1-2"};
Text = Texte[F1*13];

so sollte auch auch gehen, ist aber nicht sehr sauber.

von Florian K. (kraemer90)


Lesenswert?

Na toll, man kann gar keine Text-Arrays anlegen

"Semantik Fehler - String Initialisierungseinträge werden momentan nicht 
unterstützt"

von Karl H. (kbuchegg)


Lesenswert?

Da geht noch viel mehr.

Es besteht ein Zusammenhang zwischen der Zahl hier

                 Text = "BU2-8 - BU1-4"
                             ^
                             |

und dem Parameter F. Diesen Teil des Strings kann man daher per sprintf 
leicht generieren und damit fällt der komplette switch über F raus. Die 
ganze Funktion kann in weniger als 40 Zeilen forumliert werden.

Der ganze Originalcode ist ein Musterbeispiel dafür, wie man durch 
Ausschalten der kleinen grauen Zellen Code unnötig aufblähen kann. Das 
ganze hat Ähnlichkeit mit einer Multiplikation, die der Programmierer so 
gelöst hat, indem er das kleine 1*1 in Form von 10 cases mit jeweils 10 
Subcases implementiert. Mit Einsatz der kleinen grauen Zellen hätte er 
stattdessen ganz einfach eine Multiplikation geschrieben.

1
void Fehler_Out (void)
2
{
3
  char Buffer[20];
4
  unsigned char Klemme[] = { 2, 2, 2, 2, 1, 1 };
5
  unsigned char Pin[]    = { 4, 1, 3, 2, 1, 2 };
6
7
  LCD_CLR();
8
  LCD_Locate_Ext(1,1);
9
  Text = "Fehler";
10
  LCD_Write_Text_Ext();
11
12
  LCD_Locate_Ext(2,1);
13
  sprintf( Buffer, "Pruefschritt %d", F );
14
  Text = Buffer;
15
  LCD_Write_Text_Ext();
16
17
  AbsDelay(2000);
18
19
  LCD_CLR();
20
  LCD_Locate_Ext(1,1);
21
  if( F < 2 && F1 == 1 )
22
    Text = "Unterbrechung";
23
  else
24
    Text = "Verbindung";
25
26
  LCD_Write_Text_Ext();
27
  LCD_Locate_Ext(2,1);
28
29
  sprintf( Buffer, "BU2-%d - KL%d-%d", ( F - 1 ) / 2 + 5, Klemme[F1], Pin[F1] );
30
  Text = Buffer;
31
  LCD_Write_Text_Ext();
32
}


Und wenn man sich ein paar besser geeignete LCD Funktionen macht, dann 
könnte man auch diesen Code noch weiter abspecken und übersichtlicher 
machen.

Das könnte dann so aussehen
1
void Fehler_Out (void)
2
{
3
  char Buffer[20];
4
  unsigned char Klemme[] = { 2, 2, 2, 2, 1, 1 };
5
  unsigned char Pin[]    = { 4, 1, 3, 2, 1, 2 };
6
7
  LCD_CLR();
8
9
  sprintf( Buffer, "Pruefschritt %d", F );
10
  LCD_Write_Text_Pos( 1, 1, "Fehler" );
11
  LCD_Write_Text_Pos( 2, 1, Buffer );
12
13
  AbsDelay(2000);
14
15
  LCD_CLR();
16
  if( F < 2 && F1 == 1 )
17
    LCD_Write_Text_Pos( 1, 1, "Unterbrechung" );
18
  else
19
    LCD_Write_Text_Pos( 1, 1, "Verbindung" );
20
21
  sprintf( Buffer, "BU2-%d - KL%d-%d", ( F - 1 ) / 2 + 5, Klemme[F1], Pin[F1] );
22
  LCD_Write_Text_Pos( 2, 1, Buffer );
23
}


Und deine Kommentierung.
Spar sie dir. So wie du kommentierst ist das sinnlos.

von Karl H. (kbuchegg)


Lesenswert?

Florian K. schrieb:
> Na toll, man kann gar keine Text-Arrays anlegen
>
> "Semantik Fehler - String Initialisierungseinträge werden momentan nicht
> unterstützt"

Besorg dir einen ordentlichen Compiler.
Es gibt nichts schlimmeres als wie wenn man mit untauglichem Werkzeug 
arbeiten muss.

von Peter D. (pdiener) Benutzerseite


Lesenswert?

sprintf ist an dem Quelltext von Karl heinz Buchegger das Einzige, was 
die C-Control nicht kann.

Nachdem hier aber keine großartige Formatierung passiert, kann man das 
leicht durch eine eigene Funktion ersetzen.

Das hier zum Beispiel:
1
sprintf( Buffer, "Pruefschritt %d", F );

F liegt im Bereich zwischen 1 und 8, wenn ich das richtig sehe. Somit 
ist die Zahl einstellig.
Damit kann man das ASCII-Zeichen, das an letzter Stelle in Text steht, 
ausrechnen und dort einsetzen:
1
  Text = "Pruefschritt  ";
2
  Text[13] = F + '0';
3
  LCD_Write_Text_Ext();

Für das zweite sprintf geht das entsprechend genauso.

>Besorg dir einen ordentlichen Compiler.
Dem kann ich mich nur anschließen. Wenn es in deinem Projekt irgendwie 
möglich ist.

Hier gibt es ein Programm, das Hexfiles von anderen Compilern auf die 
unveränderte C-Control laden kann:
Beitrag "Programmvorstellung "CCPro-Loader" - natives C (ohne Interpreter) auf der C-Control Pro"

Dann ist es möglich, die C-Control als ganz normalen ATmega32 zu 
verwenden.

Man muss zwar alle in CompactC fertig implementierten Funkionen neu 
schreiben (z.B. die für das LCD), aber der Aufwnad lohnt sich 
normalerweise.

Grüße,

Peter

von Florian K. (kraemer90)


Lesenswert?

So, also das mit den grauen Zellen anstrengen ist ja gut und super, aber 
als Anfänger kann man halt nunmal nicht alles gleich wissen und können.

>Und deine Kommentierung.
>Spar sie dir. So wie du kommentierst ist das sinnlos.

Danke für die Info, aber hier wäre auch konstruktive Kritik besser, als 
nur herummosern. Was mache ich falsch?

Das mit dem Compiler wechseln werde ich mal abklären ob das möglich ist, 
einen komplett anderen Controller nehmen ist nämlich nicht mehr möglich, 
da die Hardware schon komplett steht.

von Rubelus (Gast)


Lesenswert?

Karl heinz Buchegger schrieb:
> Und deine Kommentierung.
> Spar sie dir. So wie du kommentierst ist das sinnlos.

Finde ich nun nicht, wenn es für IHN so hilfreich ist zu verstehen was 
er da eigentlich macht... ist das schon in Ordnung.

Florian K. schrieb:
> Danke für die Info, aber hier wäre auch konstruktive Kritik besser, als
> nur herummosern. Was mache ich falsch?

Lass dich da mal nicht durcheinanderbringen, bei den Comment ist es halt 
wichtig das DU damit zurecht kommst. Als Gedankenstütze ist das sehr 
hilfreich!

von Dirk (Gast)


Lesenswert?

Es ist nicht nur die Qualität des Werkzeuges mit der man arbeitet.

Ein Programm ist zum großen Teil nur so gut wie der Stil seines 
Programmierers.

Deshalb ist es vorallem in der embedded Programmierung wichtig bei den 
Grundlagen zu beginnen und die Beziehung zwischen Hard & Software zu 
kennen und zu verstehen. Das wirkt sich dann auch entsprechend auf den 
Programmcode aus.

Das ist im übrigen nicht nur eine Erfahrung die einem in der 
Softwareentwicklung begleitet sondern im gesamten Lebensablauf.


Hatte erst kürzlich ein typisches Beispiel, bei dem ein MSP430F169 in 
Java
programmiert wurde. Es sollten lediglich 24 LEDs geschaltet werden, 
Kommandogesteuert über UART 19200 Baud.
Der Programmierer meinte, die MCU sein dazu zu schwach.
Ich denke ein Intel ATOM wäre für diese Applikation angebracht.

Leider tummeln sich heute in vielen Bereichen sogenannte Pseudo-Profis
die selbst ohne Bezahlung zu viele Schäden anrichten.

von Falk B. (falk)


Lesenswert?


von Karl H. (kbuchegg)


Lesenswert?

Rubelus schrieb:
> Karl heinz Buchegger schrieb:
>> Und deine Kommentierung.
>> Spar sie dir. So wie du kommentierst ist das sinnlos.
>
> Finde ich nun nicht, wenn es für IHN so hilfreich ist zu verstehen was
> er da eigentlich macht... ist das schon in Ordnung.

Solange er im Kommentar nur dsas hinschreibt, was sowieso im Quelltext 
auch schon steht, ist das sinnlos.

von Karl H. (kbuchegg)


Lesenswert?

Florian K. schrieb:
> So, also das mit den grauen Zellen anstrengen ist ja gut und super, aber
> als Anfänger kann man halt nunmal nicht alles gleich wissen und können.

Das Problem ist, dass eines der ersten Dinge, praktisch gesehen 2. 
Unterrichtsstunde, in der C Programmierung darin besteht, wie man in 
einen Ausgabestring variable Dinge wie Zahlen oder Variablen einbaut.
Das heißt, das IST Anfängerwissen. Wenn ein Anfänger sonst nicht viel 
von C versteht, aber wie man Zahlen ausgibt und in einen Text einbettet, 
das weiß er.


> Danke für die Info, aber hier wäre auch konstruktive Kritik besser, als
> nur herummosern. Was mache ich falsch?

Deine Kommentare erzählen gegenüber dem eigentlichen Code nichts neues.

               LCD_CLR();                          //LCD löschen
                LCD_Locate_Ext(1,1);                //Zeile 1, Pos 1

Hier steht im Kommentar exakt dasselbe, was auch im Quelltext steht. 
Wenn die Funktion nicht LCD_CLR heißen würde, sondern LCD_Clear dann 
wäre es noch offensichtlicher. Das bedeutet (und ich weiß schon, da 
kannst du nichts dafür) dass unter Umständen die Funktionen mit 
schlechten Namen versehen wurden, wenn du dir da im Kommentar 
dazuschreiben musst, was die Funktion macht.

Kommentare sollen das 'Warum' erzählen und nicht das 'Wie'. Das 'Wie' 
steht im Quellcode und wenn es dort nicht ersichtlich ist, dann ist die 
richtige Vorgehensweise darin zu suchen, den Code so zu schreiben bzw. 
zu ändern, das man das sieht.

Beispiel
                AbsDelay(2000);                     //Verzögerung in ms

Du hast dir hier im Kommentar hingeschrieben, dass die Zeit in 
Millisekunden angegeben wird. Das ist gut. Aber auch schlecht. Denn wenn 
die Funktion nicht AbsDelay sondern AbsDelayMs heißen würde, dann würde 
bereits im Funktionsnamen die Information enthalten sein, für die du 
hier einen Kommentar als notwendig erachtet hast.

Jeder Kommentar, den du nicht brauchst, weil dieselbe Information schon 
im QUelltext enthalten ist, ist ein guter Kommentar :-)

Denn was ist das Problem?
Das Problem, wenn im Kommentar prinzipiell dasselbe steht wie im 
Quelltext, besteht darin, dass es öfter als man glaubt passiert, dass 
Quellcode und Kommentar nicht zusammenstimmen. Es ist noch gar nicht 
solange her, da konnte man hier im Forum lesen

     if( Wert == 29 )         // Wenn der Wert nicht gleich 29 ist

Genau hier haben wir zb eine Situation
* Im Kommentar steht prinzipiell genau das gleiche wie im Quellcode
* Aber: die beiden widersprechen sich! Im Kommentar steht das genaue
  Gegenteil vom eigentlichen Code.

Und da fragt man sich jetzt: Was stimmt denn nun? Was ist denn richtig?

Wenn der Kommentar sinnvoll gewesen wäre

    if( Tag == 29 )         // Wir wissen: Der Monat ist Februar
                            // damit ist der 29. Februar ein Sonderfall
                            // da er nur in Schaltjahren existiert

dann erzählt mir der Kommentar, warum hier eine Abfrage existiert, 
welchen Grund es dafür gibt, was der Hintergedanke dabei ist und ich 
kann im Zusammenhzang des Codes viel leichter entscheiden ob das == da 
jetzt richtig ist, oder ob es != hätte heißen müssen.

Der erste Kommentar der beiden war ein sinnloser Kommentar. Er erzählt 
mir nichts, was ich nicht auch im Code sehen würde. Der zweite Kommentar 
ist ein guter Kommentar. Er erzählt mir worum es an dieser Stelle im 
Code geht.

Gerade Anfänger denken oft (oder ihnen wird erzählt), dass man jede 
Zeile kommentieren soll. Und dann kommen solche Dinge raus, wie in 
deinem Eröffnungsposting. Im Grunde sieht es aus wie in einem 
Vokabelheft: Links steht das englische Wort, rechts die deutsche 
Übersetzung dazu. Genau so sollte Kommentierung aber nicht aussehen, 
denn das ist sinnlose Kommentierung - Tipparbeit für nichts. Im 
Idealfall lernt man nichts über den Code wenn man die Kommentare liest. 
Im schlechtesten Fall ist der Kommentar einfach nur falsch.

In diesem Sinne: Wiederhole in deinen Kommentaren nicht das, was du auch 
im Code siehst, sondern das was ich eben nicht im Code sehen kann!
Oder eben in Kurzform: Ein Kommentar erzählt mir das "Warum". Das "Wie" 
steht im Code. Wenn du das Gefühl hast, du musst das "Wie" kommentieren, 
dann sieh dir lieber den Code an und such nach Möglichkeiten, wie du den 
Code so ändern kannst, dass er diese Information mit enthält.

von Florian K. (kraemer90)


Lesenswert?

Danke, jetzt wo du es schreibst ist es mir auch klar, dass diese Art von 
Kommentare nichts bringen, man wiederholt nur dass was eh schon da 
steht.

Werde jetzt die Funktionen mal besser benennen und die restlichen 
Kommentare anpassen, bzw. löschen

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.