ich sollte vlt auch noch erwähnen das in der Interrupt-overflow-Teil die
volatile variablen red, green und blue verändert werden.
1 | volatile uint8_t red,green,blue;
|
2 | volatile uint16_t rgbspeed=0;
|
3 |
|
4 | ISR(TIM0_OVF_vect) {
|
5 | if (++rgbspeed>=1000) {
|
6 | rgbspeed=0;
|
7 | //rgbstep:
|
8 | //0: r->g 1: g 2: g->b 3: b 4: b->r 5: r
|
9 | //umgedreht denken pwm_setting[7]=rot; pwm_setting[6]=grün; pwm_setting[5]=blau;
|
10 |
|
11 | //rot->grün
|
12 | if (rgbstep==0) {
|
13 | green++;
|
14 | if (green==255) {
|
15 | rgbstep=1;
|
16 | }
|
17 | //grün
|
18 | } else if (rgbstep==2) {
|
19 | red--;
|
20 | if (red==0) {
|
21 | rgbstep=3;
|
22 | }
|
23 | //grün->blau
|
24 | } else if (rgbstep==4) {
|
25 | blue++;
|
26 | if (blue==255) {
|
27 | rgbstep=5;
|
28 | }
|
29 | //blau
|
30 | } else if (rgbstep==6) {
|
31 | green--;
|
32 | if (green==0) {
|
33 | rgbstep=7;
|
34 | }
|
35 | //blau->rot
|
36 | } else if (rgbstep==8) {
|
37 | red++;
|
38 | if (red==255) {
|
39 | rgbstep=9;
|
40 | }
|
41 | //rot
|
42 | } else if (rgbstep==10) {
|
43 | blue--;
|
44 | if (blue==0) {
|
45 | rgbstep=11;
|
46 | }
|
47 | //rgb und cmy hold
|
48 | } else if ((rgbstep==1)||(rgbstep==3)||(rgbstep==5)||(rgbstep==7)||(rgbstep==9)||(rgbstep==11)) {
|
49 | if (++colorhold>=colorholdtime) {
|
50 | colorhold=0;
|
51 | if (rgbstep==11) {rgbstep=0;}
|
52 | else rgbstep++;
|
53 | }
|
54 | }
|
55 | }
|
56 | }
|
Ich denke mal das eine Zugriffsverletzung wegen red, green und blue
hervorgerufen wird, denn wenn ich alles aus dem Overflow rausnehme, dass
mit red etc zu tun hat funktioniert es mit <. Die Frage ist nur warum es
mit <= funktioniert?
Gruß equi