Kleine Frage ich würde gerne die Rückgabe einer Funktion über eine globale Variable vom Typ struct ermöglichen.Um Platz zu sparen(hab ich aus dem C- Tutorial) versteht sich. Kann ich verschiedene Datentypen in dieses Bitfeldfeld schreiben ohne das es zu Fehlern kommt, wenn sich die Struktur über mehrere Byte erstreckt.
1 | // ***********************************************************
|
2 | // Project:
|
3 | // Author:
|
4 | // Module description:
|
5 | // ***********************************************************
|
6 | //
|
7 | // -----------------------------------------------------------
|
8 | // Struct 'Daten'
|
9 | // Daten.bModus - 0 Ankerspannung | 1 Moment
|
10 | // Daten.iUsoll - Sollwert Steuerspannung
|
11 | // Daten.iUst - Istwert Ankerspannung
|
12 | // Daten.iI - Istwert Strom
|
13 | // -----------------------------------------------------------
|
14 | //
|
15 | |
16 | |
17 | #include <avr\io.h> // Most basic include files |
18 | #include <avr\interrupt.h> // Add the necessary ones |
19 | #include <avr\signal.h> // here |
20 | |
21 | // Datentypen / Strukturen
|
22 | struct { |
23 | unsigned char bModus:1; // 1 BIT |
24 | unsigned long iUsoll:16; // 16 BIT Sollwert Steuerspannung |
25 | unsigned long iUst:16; // 16 BIT Istwert Ankerspannung |
26 | unsigned long iI:16; // 16 BIT Istwert Strom |
27 | }Daten; |
28 | |
29 | // Funktionen
|
30 | void init(void) { |
31 | // PD0..PD7 Ausgang - D/A Wandler über R2R Netzwerk
|
32 | // PC0..PC2 Eingang (A/D Wandler) - Eingang der Ist-Werte
|
33 | // PC3 Eingang - Betriebsmodus
|
34 | // PC4..PC6 Ausgang - HD44780 Display Steuerleitungen
|
35 | // PB0..PB7 Ausgang - HD44780 Display Datenleitungen
|
36 | // DDRB - Data Direction Register B
|
37 | // 1 Ausgang | 0 Eingang
|
38 | DDRB = 0xFF; |
39 | DDRC = 0x00; |
40 | DDRD = 0xFF; |
41 | |
42 | // PullUp Widerstände der Eingänge PC0..PC3 aktivieren
|
43 | PORTC = 0x0F; |
44 | }
|
45 | |
46 | void Lesen(void) { |
47 | // Lesen der Eingangswert
|
48 | // Usoll - PC0(ADC0)
|
49 | // Ust - PC1(ADC1)
|
50 | // i - PC2(ADC2)
|
51 | // Modus - PC3
|
52 | Daten.bModus = PINC&(1<<PINC3); |
53 | }
|
54 | |
55 | int main(void) { |
56 | unsigned long test = 0; |
57 | void init(void); // PORT Zustände setzen |
58 | while(1) { |
59 | void Lesen(void); |
60 | Daten.bModus = PINC3; |
61 | }
|
62 | }
|