From 692ad7f3ceae1e178585ee668b7b9536bf2f5c67 Mon Sep 17 00:00:00 2001 From: hugogogo Date: Tue, 11 Mar 2025 16:42:50 +0100 Subject: [PATCH] mod01 ex03 replace pointer function params with global --- module01/ex03/main.c | 40 ++++++++++++++++------------------------ 1 file changed, 16 insertions(+), 24 deletions(-) diff --git a/module01/ex03/main.c b/module01/ex03/main.c index 00186fa..f47e313 100644 --- a/module01/ex03/main.c +++ b/module01/ex03/main.c @@ -9,6 +9,9 @@ #define PRESCALE_VALUE 1024 // can be 1, 8, 64, 256, 1024 #define DUTY_CYCLE 10 +#define MAX 100 // max duty cycle percentage +#define MIN 10 // min duty cycle percentage + // Table 16-4 : Waveform Generation Mode Bit Description #define CTC_TOP_OCR1A_IN_TCCR1B (0<duty_cycle < params->max) { - params->duty_cycle += 10; +void increment_duty_cycle() { + if(duty_cycle < MAX) { + duty_cycle += 10; } - OCR1A = TIME_MS(PERCENT(params->duty_cycle, PERIOD), PRESCALE_VALUE); + OCR1A = TIME_MS(PERCENT(duty_cycle, PERIOD), PRESCALE_VALUE); } -void decrement_duty_cycle(void *param) { - IncrementParams *params = (IncrementParams *)param; - if(params->duty_cycle > params->min) { - params->duty_cycle -= 10; +void decrement_duty_cycle() { + if(duty_cycle > MIN) { + duty_cycle -= 10; } - OCR1A = TIME_MS(PERCENT(params->duty_cycle, PERIOD), PRESCALE_VALUE); + OCR1A = TIME_MS(PERCENT(duty_cycle, PERIOD), PRESCALE_VALUE); } -void on_press(int bit, void (*action)(void*), void *params) { +void on_press(int bit, void (*action)(void)) { if ((TEST(PIND, bit)) == 0) { - action(params); + action(); _delay_ms(20); while ((TEST(PIND, bit)) == 0) { continue; @@ -56,11 +53,6 @@ void on_press(int bit, void (*action)(void*), void *params) { // led turns on and off every PERIOD ms using Fast PWM timer, with duty cycle controlled by SW1 and SW2 int main() { - int duty_cycle = DUTY_CYCLE; - int max = 100; - int min = 0; - IncrementParams params = {duty_cycle, max, min}; - MODE_OUTPUT(LED2); TCCR1A |= FAST_PWM_TOP_ICR1_IN_TCCR1A; // Table 16-4 : set timer in Fast PWM (Pulse With Modulation) mode with TOP = ICR1 (Mode 14) @@ -75,7 +67,7 @@ int main() { TCCR1B |= (PRESCALE_SET(PRESCALE_VALUE)); // start the timer with the prescaler while(1) { - on_press(SW1, increment_duty_cycle, ¶ms); - on_press(SW2, decrement_duty_cycle, ¶ms); + on_press(SW1, increment_duty_cycle); + on_press(SW2, decrement_duty_cycle); } } \ No newline at end of file