Hallo Leute! Ich habe folgendes Problem: Ich habe im Quellcode eine Variable definiert. Diese wird außerhalb der main Funktion in einem c-File deklariert. Es handelt sich um die Variable switch_pos_old. Nach einem RESET bzw weg- und wieder zuschalten der Betriebsspannung behält diese ihren Wert! Das versteh ich nicht. Die Variable sollte doch im RAM liegen. Wird der Inhalt vom RAM nicht beim RESET gelöscht? Das der Wert im RAm eine gewisse Zeit erhalten bleibt, auch ohne Spannung könnte mir auf Grund der Kondensatoren am atmega noch einleuchten, aber nach einem RESET? Bitte erklärt mir das mal! Ein Ausschnitt aus dem File:
1 | // **********************************************************************************
|
2 | // includes
|
3 | // **********************************************************************************
|
4 | #include <switch_pos.h> |
5 | #include <atmel/io.h> |
6 | #include <rolling_dir.h> |
7 | #include <definitions.h> |
8 | #include <mlx_90109.h> |
9 | #include <dio.h> |
10 | |
11 | |
12 | //*************************************************************************
|
13 | // functions
|
14 | //*************************************************************************
|
15 | uint8_t switch_pos_Detect(void); |
16 | |
17 | //*************************************************************************
|
18 | // variables
|
19 | //*************************************************************************
|
20 | uint8_t switch_pos_old = 0x00; |
21 | uint8_t switch_pos = 0x00; //switch position |
22 | |
23 | //*************************************************************************
|
24 | // detect switch position
|
25 | //*************************************************************************
|
26 | uint8_t switch_pos_Detect(void) |
27 | {
|
28 | uint8_t dir; //direction |
29 | uint8_t databyte6; //relevant databyte for group identification |
30 | uint8_t group; //group identification |
31 | uint8_t right_header; |
32 | uint8_t tag = GOODTAG; |
33 | |
34 | .
|
35 | .
|
36 | .
|
37 | .
|
38 | .
|
39 | // group one is not allowed to switch position center_right & right
|
40 | // group two is not allowed to switch position right
|
41 | |
42 | //if position center_right is activated group one must not switch
|
43 | if ( (switch_pos_old == CENTER_RIGHT) && (group == GROUP1) ) |
44 | {
|
45 | switch_pos = CENTER_RIGHT; |
46 | }
|
47 | |
48 | //if position right is activated group one must not switch
|
49 | if ( (switch_pos_old == RIGHT) && (group == GROUP1) ) |
50 | {
|
51 | switch_pos = RIGHT; |
52 | }
|
53 | |
54 | //if position right is activated group two must not switch
|
55 | if ( (switch_pos_old == RIGHT) && (group == GROUP2) ) |
56 | {
|
57 | switch_pos = RIGHT; |
58 | }
|
59 | |
60 | }
|
61 | |
62 | //if there is no tag in the field switch_pos stays switch_pos_old
|
63 | if (tag == NOTAG) |
64 | {
|
65 | switch_pos = switch_pos_old; |
66 | tag = GOODTAG; |
67 | }
|
68 | |
69 | switch_pos_old = switch_pos; |
70 | |
71 | return switch_pos; |
72 | }
|