Witam serdecznie. Wczoraj pisząc program napotkałem na takie dziwne zjawisko. Napisałem pewną funkcję tak:
Program z tą funkcją kompiluje się bez błędów i ostrzeżeń, ale gdy uruchamiam go na µkontrolerze to nie ma efektu. Po prostu nie działa.
Gdy zmodernizowałem powyższą funkcję do takiej formy:
Wszystko działa tak jak sobie to założyłem.
Czy ktoś z forumowiczów biegłych w C może mi wyjaśnić co może być przyczyną tego dziwnego działania?
Podaną funkcję w programie wywołuję np. tak:
Efektem działania programu jest płynne rozjaśnianie i ściemnianie (w pętli) podłączonej do wyjścia PWM diody LED.
void lightc(volatile uint8_t * color, _Bool dimmer)
{
switch (dimmer)
{
case 0:
for(*color; *color>0x00; *color--) _delay_ms(czas);
*color=0x00;
break;
case 1:
for(*color; *color<0xFF; *color++) _delay_ms(czas);
*color=0xFF;
break;
}
}
Program z tą funkcją kompiluje się bez błędów i ostrzeżeń, ale gdy uruchamiam go na µkontrolerze to nie ma efektu. Po prostu nie działa.
Gdy zmodernizowałem powyższą funkcję do takiej formy:
void lightc(volatile uint8_t * color, _Bool dimmer)
{
uint8_t i;
switch (dimmer)
{
case 0:
for(i=*color; i>0x00; *color=i--) _delay_ms(czas);
*color=0x00;
break;
case 1:
for(i=*color; i<0xFF; *color=i++) _delay_ms(czas);
*color=0xFF;
break;
}
}
Wszystko działa tak jak sobie to założyłem.
Czy ktoś z forumowiczów biegłych w C może mi wyjaśnić co może być przyczyną tego dziwnego działania?
Podaną funkcję w programie wywołuję np. tak:
#include <avr/io.h>
#include<util/delay.h>
//*****DEFINICJE STAŁYCH*****
#define RLED OCR0A // PINB.2
#define Dim 0
#define Brighten 1
#define czas 24
//*****DEKLARACJE FUNKCJI*****
void config(void);
void lightc(volatile uint8_t * color, _Bool dimmer);
//*****PROGRAM GŁÓWNY********
int main(void)
{
config();
while(1)
{
lightc(&RLED, Brighten);
_delay_ms(czas);
lightc(&RLED, Dim);
_delay_ms(czas);
}
}
Efektem działania programu jest płynne rozjaśnianie i ściemnianie (w pętli) podłączonej do wyjścia PWM diody LED.