Subversion Repositories Projects

Compare Revisions

Ignore whitespace Rev 109 → Rev 110

/Transportables_Koptertool/trunk/V-0.1/base64.c
0,0 → 1,116
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "rs232.h"
#include "base64.h"
#include "lcd.h"
 
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
 
uint8_t get_message() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode(index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
 
uint8_t base64_decode(uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
p_buffer[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
p_buffer[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
p_buffer[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
void base64_send(uint8_t number) // Sendet Daten zur Flight-Control
{ // Die Daten werden in p_buffer erwartet, umcodiert und gesendet
uint8_t bpointer,spointer;
uint8_t x,y,z,a;
uint16_t checksum;
 
r_buffer[0] = p_buffer[0];
r_buffer[1] = p_buffer[1];
r_buffer[2] = p_buffer[2];
 
bpointer = 3;
spointer = 3;
 
while (spointer < number)
{
x = p_buffer[spointer];
y = p_buffer[spointer + 1];
z = p_buffer[spointer + 2];
spointer += 3;
r_buffer[bpointer + 0] = (x >> 2) + 61;
r_buffer[bpointer + 1] = (((x & 0x03) << 4) | ((y & 0xF0) >> 4)) + 61;
r_buffer[bpointer + 2] = (((y & 0x0F) << 2) | ((z & 0xC0) >> 6)) + 61;
r_buffer[bpointer + 3] = (z & 0x3F) + 61;
bpointer += 4;
}
 
checksum = 0;
for(a=0;a<bpointer;a++)
checksum += r_buffer[a];
checksum %= 4096;
r_buffer[bpointer] = (checksum / 64) + 61;
r_buffer[bpointer + 1] = (checksum % 64) + 61;
r_buffer[bpointer + 2] = 13;
r_buffer[bpointer + 3] = 0;
bpointer += 3;
for(a=0;a<bpointer;a++)
RS232_send(r_buffer[a]);
}
/Transportables_Koptertool/trunk/V-0.1/base64.d
0,0 → 1,0
base64.o base64.d : base64.c main.h rs232.h base64.h lcd.h
/Transportables_Koptertool/trunk/V-0.1/base64.h
0,0 → 1,12
#ifndef base64_h
#define base64_h
 
uint8_t base64_decode(uint8_t number);
void base64_send(uint8_t number);
uint8_t get_message(void);
 
uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
 
 
#endif
/Transportables_Koptertool/trunk/V-0.1/base64.lst
0,0 → 1,363
1 .file "base64.c"
2 .arch atmega32
3 __SREG__ = 0x3f
4 __SP_H__ = 0x3e
5 __SP_L__ = 0x3d
6 __tmp_reg__ = 0
7 __zero_reg__ = 1
8 .global __do_copy_data
9 .global __do_clear_bss
17 .Ltext0:
18 .global base64_decode
20 base64_decode:
21 .LFB5:
22 .LM1:
23 /* prologue: frame size=0 */
24 /* prologue end (size=0) */
25 0000 A82F mov r26,r24
26 .LM2:
27 0002 62E0 ldi r22,lo8(2)
28 .LM3:
29 0004 70E0 ldi r23,lo8(0)
30 .L7:
31 .LM4:
32 0006 6A17 cp r22,r26
33 0008 B0F5 brsh .L6
34 .LM5:
35 000a E62F mov r30,r22
36 000c FF27 clr r31
37 000e E050 subi r30,lo8(-(r_buffer))
38 0010 F040 sbci r31,hi8(-(r_buffer))
39 0012 8081 ld r24,Z
40 0014 8D53 subi r24,lo8(-(-61))
41 .LM6:
42 0016 3181 ldd r19,Z+1
43 0018 3D53 subi r19,lo8(-(-61))
44 .LM7:
45 001a 5281 ldd r21,Z+2
46 001c 5D53 subi r21,lo8(-(-61))
47 .LM8:
48 001e 4381 ldd r20,Z+3
49 0020 4D53 subi r20,lo8(-(-61))
50 .LM9:
51 0022 6C5F subi r22,lo8(-(4))
52 .LM10:
53 0024 E72F mov r30,r23
54 0026 FF27 clr r31
55 0028 E050 subi r30,lo8(-(p_buffer))
56 002a F040 sbci r31,hi8(-(p_buffer))
57 002c 9927 clr r25
58 002e 880F lsl r24
59 0030 991F rol r25
60 0032 880F lsl r24
61 0034 991F rol r25
62 0036 232F mov r18,r19
63 0038 2295 swap r18
64 003a 2F70 andi r18,0x0f
65 003c 282B or r18,r24
66 003e 2083 st Z,r18
67 .LM11:
68 0040 832F mov r24,r19
69 0042 9927 clr r25
70 0044 8F70 andi r24,lo8(15)
71 0046 9070 andi r25,hi8(15)
72 0048 34E0 ldi r19,4
73 004a 880F 1: lsl r24
74 004c 991F rol r25
75 004e 3A95 dec r19
76 0050 E1F7 brne 1b
77 0052 252F mov r18,r21
78 0054 2695 lsr r18
79 0056 2695 lsr r18
80 0058 282B or r18,r24
81 005a 2183 std Z+1,r18
82 .LM12:
83 005c 852F mov r24,r21
84 005e 9927 clr r25
85 0060 8370 andi r24,lo8(3)
86 0062 9070 andi r25,hi8(3)
87 0064 26E0 ldi r18,6
88 0066 880F 1: lsl r24
89 0068 991F rol r25
90 006a 2A95 dec r18
91 006c E1F7 brne 1b
92 006e 482B or r20,r24
93 0070 4283 std Z+2,r20
94 .LM13:
95 0072 7D5F subi r23,lo8(-(3))
96 0074 C8CF rjmp .L7
97 .L6:
98 .LM14:
99 0076 872F mov r24,r23
100 0078 9927 clr r25
101 /* epilogue: frame size=0 */
102 007a 0895 ret
103 /* epilogue end (size=1) */
104 /* function base64_decode size 62 (61) */
105 .LFE5:
107 .global get_message
109 get_message:
110 .LFB4:
111 .LM15:
112 /* prologue: frame size=0 */
113 007c CF93 push r28
114 /* prologue end (size=1) */
115 .LM16:
116 007e 84E1 ldi r24,lo8(20)
117 0080 8093 0000 sts timer,r24
118 .L9:
119 .LM17:
120 0084 0E94 0000 call RS232_get
121 0088 8332 cpi r24,lo8(35)
122 008a 21F0 breq .L10
123 008c 8091 0000 lds r24,timer
124 0090 8823 tst r24
125 0092 C1F7 brne .L9
126 .L10:
127 .LM18:
128 0094 8091 0000 lds r24,timer
129 0098 8823 tst r24
130 009a 99F0 breq .L12
131 .LM19:
132 009c C0E0 ldi r28,lo8(0)
133 .L13:
134 .LM20:
135 009e 0E94 0000 call RS232_get
136 .LM21:
137 00a2 EC2F mov r30,r28
138 00a4 FF27 clr r31
139 00a6 E050 subi r30,lo8(-(r_buffer))
140 00a8 F040 sbci r31,hi8(-(r_buffer))
141 00aa 8083 st Z,r24
142 00ac CF5F subi r28,lo8(-(1))
143 .LM22:
144 00ae C7FD sbrc r28,7
145 .LM23:
146 00b0 CFE7 ldi r28,lo8(127)
147 .L15:
148 .LM24:
149 00b2 8D30 cpi r24,lo8(13)
150 00b4 A1F7 brne .L13
151 .LM25:
152 00b6 8C2F mov r24,r28
153 00b8 0E94 0000 call base64_decode
154 .LM26:
155 00bc 80E0 ldi r24,lo8(0)
156 00be 90E0 ldi r25,hi8(0)
157 00c0 02C0 rjmp .L8
158 .L12:
159 .LM27:
160 00c2 81E0 ldi r24,lo8(1)
161 00c4 90E0 ldi r25,hi8(1)
162 .L8:
163 /* epilogue: frame size=0 */
164 00c6 CF91 pop r28
165 00c8 0895 ret
166 /* epilogue end (size=2) */
167 /* function get_message size 40 (37) */
168 .LFE4:
170 .global base64_send
172 base64_send:
173 .LFB6:
174 .LM28:
175 /* prologue: frame size=0 */
176 00ca FF92 push r15
177 00cc 0F93 push r16
178 00ce 1F93 push r17
179 00d0 CF93 push r28
180 /* prologue end (size=4) */
181 00d2 A82F mov r26,r24
182 .LM29:
183 00d4 8091 0000 lds r24,p_buffer
184 00d8 8093 0000 sts r_buffer,r24
185 .LM30:
186 00dc 8091 0000 lds r24,p_buffer+1
187 00e0 8093 0000 sts r_buffer+1,r24
188 .LM31:
189 00e4 8091 0000 lds r24,p_buffer+2
190 00e8 8093 0000 sts r_buffer+2,r24
191 .LM32:
192 00ec 43E0 ldi r20,lo8(3)
193 00ee F42E mov r15,r20
194 .LM33:
195 00f0 7F2D mov r23,r15
196 .LM34:
197 00f2 FA16 cp r15,r26
198 00f4 E0F5 brsh .L31
199 .L21:
200 .LM35:
201 00f6 E72F mov r30,r23
202 00f8 FF27 clr r31
203 00fa E050 subi r30,lo8(-(p_buffer))
204 00fc F040 sbci r31,hi8(-(p_buffer))
205 00fe 9081 ld r25,Z
206 .LM36:
207 0100 2181 ldd r18,Z+1
208 .LM37:
209 0102 6281 ldd r22,Z+2
210 .LM38:
211 0104 7D5F subi r23,lo8(-(3))
212 .LM39:
213 0106 EF2D mov r30,r15
214 0108 FF27 clr r31
215 010a E050 subi r30,lo8(-(r_buffer))
216 010c F040 sbci r31,hi8(-(r_buffer))
217 010e 892F mov r24,r25
218 0110 8695 lsr r24
219 0112 8695 lsr r24
220 0114 835C subi r24,lo8(-(61))
221 0116 8083 st Z,r24
222 .LM40:
223 0118 892F mov r24,r25
224 011a 9927 clr r25
225 011c 8370 andi r24,lo8(3)
226 011e 9070 andi r25,hi8(3)
227 0120 34E0 ldi r19,4
228 0122 880F 1: lsl r24
229 0124 991F rol r25
230 0126 3A95 dec r19
231 0128 E1F7 brne 1b
232 012a 422F mov r20,r18
233 012c 5527 clr r21
234 012e 9A01 movw r18,r20
235 0130 94E0 ldi r25,4
236 0132 3695 1: lsr r19
237 0134 2795 ror r18
238 0136 9A95 dec r25
239 0138 E1F7 brne 1b
240 013a 822B or r24,r18
241 013c 835C subi r24,lo8(-(61))
242 013e 8183 std Z+1,r24
243 .LM41:
244 0140 4F70 andi r20,lo8(15)
245 0142 5070 andi r21,hi8(15)
246 0144 440F lsl r20
247 0146 551F rol r21
248 0148 440F lsl r20
249 014a 551F rol r21
250 014c 862F mov r24,r22
251 014e 9927 clr r25
252 0150 16E0 ldi r17,6
253 0152 9695 1: lsr r25
254 0154 8795 ror r24
255 0156 1A95 dec r17
256 0158 E1F7 brne 1b
257 015a 842B or r24,r20
258 015c 835C subi r24,lo8(-(61))
259 015e 8283 std Z+2,r24
260 .LM42:
261 0160 6F73 andi r22,lo8(63)
262 0162 635C subi r22,lo8(-(61))
263 0164 6383 std Z+3,r22
264 .LM43:
265 0166 84E0 ldi r24,lo8(4)
266 0168 F80E add r15,r24
267 016a 7A17 cp r23,r26
268 016c 20F2 brlo .L21
269 .L31:
270 .LM44:
271 016e 20E0 ldi r18,lo8(0)
272 0170 30E0 ldi r19,hi8(0)
273 .LM45:
274 0172 C0E0 ldi r28,lo8(0)
275 0174 CF15 cp r28,r15
276 0176 40F4 brsh .L33
277 0178 E0E0 ldi r30,lo8(r_buffer)
278 017a F0E0 ldi r31,hi8(r_buffer)
279 .L25:
280 .LM46:
281 017c 8191 ld r24,Z+
282 017e 280F add r18,r24
283 0180 311D adc r19,__zero_reg__
284 .LM47:
285 0182 CF5F subi r28,lo8(-(1))
286 0184 CF15 cp r28,r15
287 0186 D0F3 brlo .L25
288 .L33:
289 .LM48:
290 0188 3F70 andi r19,hi8(4095)
291 .LM49:
292 018a EF2D mov r30,r15
293 018c FF27 clr r31
294 018e E050 subi r30,lo8(-(r_buffer))
295 0190 F040 sbci r31,hi8(-(r_buffer))
296 0192 C901 movw r24,r18
297 0194 C6E0 ldi r28,6
298 0196 9695 1: lsr r25
299 0198 8795 ror r24
300 019a CA95 dec r28
301 019c E1F7 brne 1b
302 019e 835C subi r24,lo8(-(61))
303 01a0 8083 st Z,r24
304 .LM50:
305 01a2 2F73 andi r18,lo8(63)
306 01a4 3070 andi r19,hi8(63)
307 01a6 822F mov r24,r18
308 01a8 835C subi r24,lo8(-(61))
309 01aa 8183 std Z+1,r24
310 .LM51:
311 01ac 8DE0 ldi r24,lo8(13)
312 01ae 8283 std Z+2,r24
313 .LM52:
314 01b0 1382 std Z+3,__zero_reg__
315 .LM53:
316 01b2 83E0 ldi r24,lo8(3)
317 01b4 F80E add r15,r24
318 .LM54:
319 01b6 C381 ldd r28,Z+3
320 01b8 CF15 cp r28,r15
321 01ba 50F4 brsh .L35
322 01bc 00E0 ldi r16,lo8(r_buffer)
323 01be 10E0 ldi r17,hi8(r_buffer)
324 .L29:
325 .LM55:
326 01c0 F801 movw r30,r16
327 01c2 8191 ld r24,Z+
328 01c4 8F01 movw r16,r30
329 01c6 0E94 0000 call RS232_send
330 .LM56:
331 01ca CF5F subi r28,lo8(-(1))
332 01cc CF15 cp r28,r15
333 01ce C0F3 brlo .L29
334 .L35:
335 /* epilogue: frame size=0 */
336 01d0 CF91 pop r28
337 01d2 1F91 pop r17
338 01d4 0F91 pop r16
339 01d6 FF90 pop r15
340 01d8 0895 ret
341 /* epilogue end (size=5) */
342 /* function base64_send size 137 (128) */
343 .LFE6:
345 .comm r_buffer,128,1
346 .comm p_buffer,128,1
347 .comm display_buffer,1024,1
348 .comm display_buffer_pointer,2,1
349 .comm display_buffer_counter,1,1
350 .comm display_page_counter,1,1
351 .comm display_mode,1,1
352 .Letext0:
DEFINED SYMBOLS
*ABS*:00000000 base64.c
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:3 *ABS*:0000003f __SREG__
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:4 *ABS*:0000003e __SP_H__
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:5 *ABS*:0000003d __SP_L__
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:6 *ABS*:00000000 __tmp_reg__
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:7 *ABS*:00000001 __zero_reg__
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:20 .text:00000000 base64_decode
*COM*:00000080 r_buffer
*COM*:00000080 p_buffer
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:109 .text:0000007c get_message
C:\DOKUME~1\thomas\LOKALE~1\Temp/ccmIaaaa.s:172 .text:000000ca base64_send
*COM*:00000400 display_buffer
*COM*:00000002 display_buffer_pointer
*COM*:00000001 display_buffer_counter
*COM*:00000001 display_page_counter
*COM*:00000001 display_mode
 
UNDEFINED SYMBOLS
__do_copy_data
__do_clear_bss
timer
RS232_get
RS232_send
/Transportables_Koptertool/trunk/V-0.1/debug.c
0,0 → 1,228
// debug Data
 
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/pgmspace.h>
 
#include "main.h"
#include "lcd.h"
#include "rs232.h"
#include "base64.h"
#include "parameter.h"
#include "menu.h"
#include "debug.h"
 
uint8_t r_buffer[128]; // Dieser Puffer enthält die Rohdaten (kodiert)
//uint8_t p_buffer[128]; // Dieser Puffer enthält die Daten im Klartext
//struct str_DebugIn *p_buffer;
 
uint8_t base64_decode_debug(unsigned char *ptrOut, uint8_t number) // Wandelt die base64-Rohdaten in lesbare Daten um
{
uint8_t p,q;
uint8_t a,b,c,d;
 
p = 2;
q = 0;
while (p < number)
{
a = r_buffer[p + 0] - 61;
b = r_buffer[p + 1] - 61;
c = r_buffer[p + 2] - 61;
d = r_buffer[p + 3] - 61;
p += 4;
ptrOut[q + 0] = (a << 2) | (b >> 4); // gespeichert werden die Daten in p_buffer
ptrOut[q + 1] = ((b & 0x0F) << 4) | (c >> 2);
ptrOut[q + 2] = ((c & 0x03) << 6) | d;
q += 3;
}
return q; // Rückgabe der Anzahl der Datenbytes
}
 
uint8_t get_message_debug() // Liest eine komplette Übertragung und dekodiert sie
{
uint8_t index, comm;
timer = 20; // Timer für Timeout
while ((RS232_get() != '#') && (timer > 0)); // Warten auf Start-Zeichen #
if (timer > 0) // Falls kein Timeout auftrat
{
index = 0; // Die Rohdaten in r_buffer einlesen
do
{
comm = RS232_get();
r_buffer[index++] = comm;
if (index > 127) // Schutz vor Puffer-Überlauf
index = 127;
}
while (comm != 0x0D); // ... bis End-Signal = 0x0D kommt...
base64_decode_debug((unsigned char *) &DebugIn, index); // Die base64-kodierten Rohdaten umwandeln
return 0; // kein Fehler aufgetreten
}
else
{
return 1; // Fehler aufgetreten
}
}
 
uint8_t read_debug(uint8_t command) //
{
uint8_t timeout;
timeout = 0;
p_buffer[0] = '#'; // Debug-Daten anfordern
p_buffer[1] = 'a';
p_buffer[2] = 'c';
p_buffer[3] = command;
p_buffer[4] = 0;
p_buffer[5] = 0;
base64_send(6);
do // warten, bis die Parameter gesendet werden
{
if (get_message_debug() == 1)
timeout = 30;
timeout ++;
}
while ((r_buffer[1] != 'D') && (timeout < 30));
if (timeout >= 30)
return 1;
else
return 0;
}
 
#define isminus 65536 / 2
 
void decimal_int (unsigned int data, uint8_t *text) // wandelt Wert in rechtsbündigen Text um
{
int sign = 0;
text[0] = 0x20; // (schneller/kleiner als printf())
if (data > isminus)
{
data = 65536 - data;
sign = 1;
text[0] = '-';
}
 
text[1] = data/10000;
data -= (text[1] * 10000);
text[2] = data/1000;
data -= (text[2] *1000);
 
text[3] = data/100;
data -= (text[3] * 100);
text[4] = data/10;
data -= (text[4] *10);
 
 
text[5] = data + 0x30;
text[1] += 0x30;
text[2] += 0x30;
text[3] += 0x30;
text[4] += 0x30;
 
 
if (text[1] == 0x30)
{
text[0] = 0x20;
if (sign == 1) text[1] = '-'; else text[1] = 0x20;
if (text[2] == 0x30)
{
text[1] = 0x20;
if (sign == 1) text[2] = '-'; else text[2] = 0x20;
if (text[3] == 0x30)
{
text[2] = 0x20;
if (sign == 1) text[3] = '-'; else text[3] = 0x20;
if (text[4] == 0x30)
{
text[3] = 0x20;
if (sign == 1) text[4] = '-'; else text[4] = 0x20;
}
}
}
}
// if (sign == 1) text[0] = '-';
text[6] = 0x00;
}
 
void display_debug(void)
{
uint8_t line;
uint8_t zeile;
uint8_t text[10];
 
lcd_cls();
zeile = 0;
lcd_printp(PSTR("Debug-Display"),0);
do
{
while (key != 0x00);
if (read_debug(0) == 1)
{
lcd_printp(PSTR("\r\nTimeout!"),0);
timer = 200;
while (timer > 0);
break;
}
else
{
line = p_buffer[2];
text[0] = line;
text[1] = 0x00;
lcd_print_at(15,0,text,0);
//lcd_print_at(0,++zeile,p_buffer,0);
 
decimal_int(DebugIn.Analog[0],text);
lcd_print_at(0,1,"Nick",0);
lcd_print_at(10,1,text,0);
decimal_int(DebugIn.Analog[1],text);
lcd_print_at(0,2,"Roll",0);
lcd_print_at(10,2,text,0);
decimal_int(DebugIn.Analog[2],text);
lcd_print_at(0,3,"ACC Nick",0);
lcd_print_at(10,3,text,0);
decimal_int(DebugIn.Analog[3],text);
lcd_print_at(0,4,"ACC Roll",0);
lcd_print_at(10,4,text,0);
decimal_int(DebugIn.Analog[4],text);
lcd_print_at(0,5,"Gier",0);
lcd_print_at(10,5,text,0);
decimal_int(DebugIn.Analog[5],text);
lcd_print_at(0,6,"ACC",0);
lcd_print_at(10,6,text,0);
 
decimal_int(DebugIn.Analog[9],text);
lcd_print_at(0,7,"Spannung",0);
lcd_print_at(10,7,text,0);
 
// decimal_int(DebugIn.Analog[zeile],text);
// lcd_print_at(0,++zeile,text,0);
 
 
// decimal(p_buffer[zeile],text);
// lcd_print_at(0,++zeile,text,0);
 
if (zeile > 5) zeile = 0;
 
timer = 10;
while(timer > 0);
// if (key == 0x01)
// read_debug(1);
// if (key == 0x02)
// read_debug(2);
}
}
while (key != 0x04);
}
/Transportables_Koptertool/trunk/V-0.1/debug.h
0,0 → 1,15
#ifndef debug_h
#define debug_h
 
void display_debug(void);
 
struct str_DebugIn
{
unsigned char Digital[2];
unsigned int Analog[32]; // Debugwerte
};
 
struct str_DebugIn DebugIn;
//extern struct str_DebugIn *p_buffer;
 
#endif