You are a highly proficient firmware engineer with expertise in firmware development and coding.

Help me optimize the codes
Unoptimized codes:

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

// GPIO Register addresses (Assume memory-mapped I/O)
#define GPIO_BASE 0x40020000
#define GPIO_MODER ((volatile uint32_t*)(GPIO_BASE + 0x00))  // Mode register
#define GPIO_ODR ((volatile uint32_t*)(GPIO_BASE + 0x14))    // Output Data Register

// Macros for setting and clearing GPIO pins
#define SET_PIN(pin) (*GPIO_ODR |= (1 << (pin)))     // Set pin high
#define CLEAR_PIN(pin) (*GPIO_ODR &= ~(1 << (pin)))  // Set pin low

// Function to simulate turning on/off an LED (Unoptimized GPIO manipulation)
void toggle_led(uint8_t pin, uint32_t times) {
    for (uint32_t i = 0; i < times; i++) {
        // Inefficient approach: calling the same function multiple times
        SET_PIN(pin);
        delay(1000);  

        CLEAR_PIN(pin);
        delay(1000);  
    }
}

// Simple delay function using a software loop (Inefficient, blocking)
void delay(uint32_t time) {
    for (uint32_t i = 0; i < time * 10000; i++) {
    }
}

// Function to initialize GPIO (Unnecessarily verbose)
void gpio_init(uint8_t pin) {
    if (pin < 16) {
        *GPIO_MODER &= ~(0x3 << (pin * 2));  // Clear mode bits for the pin
        *GPIO_MODER |= (0x1 << (pin * 2));   // Set the pin to output mode
    } else {
        // Bad error handling (just returning)
        return;  // Doesn't notify about the invalid pin
    }
}


void led_pattern(uint8_t pin) {
    for (int i = 0; i < 5; i++) {
        SET_PIN(pin);
        // Inefficient use of repeated delays
        delay(1000);
        delay(1000);  

        CLEAR_PIN(pin);
        delay(2000); 
    }
}

int main() {
    // Initialize GPIO for LED control
    gpio_init(5);  
    // Toggle the LED with inefficient delay handling
    toggle_led(5, 10);


    led_pattern(5);

    return 0;  
}


User: Help me optimize the codes
Unoptimized codes:

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

// GPIO Register addresses (Assume memory-mapped I/O)
#define GPIO_BASE 0x40020000
#define GPIO_MODER ((volatile uint32_t*)(GPIO_BASE + 0x00))  // Mode register
#define GPIO_ODR ((volatile uint32_t*)(GPIO_BASE + 0x14))    // Output Data Register

// Macros for setting and clearing GPIO pins
#define SET_PIN(pin) (*GPIO_ODR |= (1 << (pin)))     // Set pin high
#define CLEAR_PIN(pin) (*GPIO_ODR &= ~(1 << (pin)))  // Set pin low

// Function to simulate turning on/off an LED (Unoptimized GPIO manipulation)
void toggle_led(uint8_t pin, uint32_t times) {
    for (uint32_t i = 0; i < times; i++) {
        // Inefficient approach: calling the same function multiple times
        SET_PIN(pin);
        delay(1000);  

        CLEAR_PIN(pin);
        delay(1000);  
    }
}

// Simple delay function using a software loop (Inefficient, blocking)
void delay(uint32_t time) {
    for (uint32_t i = 0; i < time * 10000; i++) {
    }
}

// Function to initialize GPIO (Unnecessarily verbose)
void gpio_init(uint8_t pin) {
    if (pin < 16) {
        *GPIO_MODER &= ~(0x3 << (pin * 2));  // Clear mode bits for the pin
        *GPIO_MODER |= (0x1 << (pin * 2));   // Set the pin to output mode
    } else {
        // Bad error handling (just returning)
        return;  // Doesn't notify about the invalid pin
    }
}


void led_pattern(uint8_t pin) {
    for (int i = 0; i < 5; i++) {
        SET_PIN(pin);
        // Inefficient use of repeated delays
        delay(1000);
        delay(1000);  

        CLEAR_PIN(pin);
        delay(2000); 
    }
}

int main() {
    // Initialize GPIO for LED control
    gpio_init(5);  
    // Toggle the LED with inefficient delay handling
    toggle_led(5, 10);


    led_pattern(5);

    return 0;  
}