Skip to main content

Function pointer and Callback advantages

 



Example: Button Interrupt with Dynamic Callbacks

#include <stdio.h>
#include <stdint.h>

// Define a callback type
typedef void (*ButtonCallback)(void);

// Global variables
volatile uint8_t button_pressed_flag = 0;
ButtonCallback button_callback = NULL;

// ISR: fast, only sets flag
void BUTTON_IRQHandler(void) {
    button_pressed_flag = 1;
}

// Register a callback dynamically
void register_button_callback(ButtonCallback cb) {
    button_callback = cb;
}

// Two possible actions
void turn_on_led(void) {
    printf("LED turned ON!\n");
}

void send_message(void) {
    printf("Message sent!\n");
}

int main() {
    // At runtime, we can decide which action to use
    int user_choice;

    while (1) {
        printf("Choose action: 1=LED, 2=Message: ");
        scanf("%d", &user_choice);

        if (user_choice == 1)
            register_button_callback(turn_on_led);  // set LED action
        else
            register_button_callback(send_message); // set message action

        // Simulate button press
        BUTTON_IRQHandler();

        // Handle button press safely outside ISR
        if (button_pressed_flag) {
            button_pressed_flag = 0;

            // Here is the **callback in action**
            if (button_callback != NULL) {
                button_callback();  // Calls the function dynamically
            }
        }
    }

    return 0;
}

Key Points Highlighting the Advantage of Callbacks

Aspect Without Callback With Callback
ISR behavior Hardcoded to one action ISR stays fast; action is dynamic
Changing behavior Must edit ISR code Change button_callback at runtime
Flexibility Low — each ISR tied to one function High — ISR works for any registered function
Heavy processing Can block ISR if inside Run safely outside ISR via callback

Why we use callback here:

  • We can change the button behavior at runtime without touching the interrupt code.

  • The ISR stays short and safe, even if the actions are complex.

  • The system becomes modular and reusable: the same button can do different things in different program contexts.


Comments

Popular posts from this blog

[STM32] How to configure Timer 1, Channel 3 is PWM 1kHz, duty cycle 20% to control BLDC motor

 To configure Timer1 for a 1 kHz PWM signal with a 20% duty cycle on an STM32H7S3L8 microcontroller, follow these steps: 1. Understand the Timer Parameters PWM Frequency : 1 kHz → Period = 1 ms. Duty Cycle : 20% → ON time = 0.2 ms. The timer’s clock frequency is derived from the APB clock (e.g., TIMCLK). Let’s assume you know the APB clock frequency. The Timer prescaler and auto-reload register (ARR) define the PWM frequency. 2. Compute Timer Parameters Formula: PWM Frequency = Timer Clock (Prescaler + 1) * (ARR + 1) \text{PWM Frequency} = \frac{\text{Timer Clock}}{\text{(Prescaler + 1) * (ARR + 1)}} PWM Frequency = (Prescaler + 1) * (ARR + 1) Timer Clock ​ For 1 kHz PWM: A R R = Timer Clock PWM Frequency ∗ ( Prescaler + 1) − 1 ARR = \frac{\text{Timer Clock}}{\text{PWM Frequency} * (\text{Prescaler + 1)}} - 1 A RR = PWM Frequency ∗ ( Prescaler + 1) Timer Clock ​ −...

[CanadaLife] Example of answers for final test in Smart Service Ontario 2024

If you have failed the final exam in the first attempt. Congratulations, you are not odd. Here, take a look and grab some corrected answers for your next attempt.  Don't waste your money and time for more failure.  Good luck bros. Quick note: remember that, the system will change the bunch of questions after each attempt. Then your next questionnaire will be different compared with the first trial. ========================================== =============FINAL TEST=================== ========================================== TIP: Here is a list of questions you did not answer correctly. *Please note: You will only be able to view this list immediately following your test attempt. ========================================== Alcohol slows down the central nervous system and impacts how a person thinks, acts, and moves. This means alcohol is a: depressant ========================================== Alcohol is metabolized in the body at a set rate. For most people, that rate is: one...

How to use ChatGPT to get your resume shortlisted?

How to use ChatGPT to get your resume shortlisted? Core steps: Chat GPT -> Resume Creator -> LinkedIn(Copy the job description to ChatGPT) -> Add your personal information -> Copy output from ChatGPT to Instaresume.io to make the template -> Goto SkillSyncer to check ATS(Applicant Tracking Software) score, point out the missing keywords. Detail ☑️In my pursuit of job #opportunities, I encountered a familiar challenge - my resume seemingly disappeared into oblivion, yielding no responses despite my diverse skill set and numerous applications. ☑️As I delved into my research, I uncovered the existence of ATS software, the automated gatekeeper of #resumes, which swiftly filtered out those lacking relevant keywords. ☑️The outcome? Not just one #company, but over a dozen organizations recognized the potential in my resume, resulting in multiple shortlists and promising #job prospects! 💻If you want to supercharge your resume and unlock countless opportunities, don't miss o...