Skip to content

Conversation

@victor-Lopez25
Copy link

@victor-Lopez25 victor-Lopez25 commented Dec 2, 2025

example main.cpp:

#include "main.h"
#include "ST-LIB.hpp"

DigitalOutput *led_on_1_ptr;
DigitalOutput *led_on_2_ptr;
DigitalOutput *led_on_3_ptr;

#define def_led_toggle_task(num) \
    void led_##num##_toggle_task(void) { \
        led_on_##num##_ptr->toggle(); \
    }

def_led_toggle_task(1)
def_led_toggle_task(2)
def_led_toggle_task(3)

int main(void) {
#ifdef SIM_ON
    SharedMemory::start();
#endif

    DigitalOutput led_1_on(PB0);
    DigitalOutput led_2_on(PE1);
    DigitalOutput led_3_on(PB14);
    led_on_1_ptr = &led_1_on;
    led_on_2_ptr = &led_2_on;
    led_on_3_ptr = &led_3_on;
    STLIB::start();

    // STLIB::start() enables this, I only want it to be enabled in Scheduler::start() for testing purposes
    RCC->APB1LENR &= ~RCC_APB1LENR_TIM2EN;

#define PARTY_MODE 0
#if PARTY_MODE
    Scheduler::register_task(200*1000, led_1_toggle_task);
    Scheduler::register_task(300*1000, led_2_toggle_task);
    Scheduler::register_task(500*1000, led_3_toggle_task);
    
    Scheduler::register_task(700*1000, led_1_toggle_task);
    Scheduler::register_task(1100*1000, led_2_toggle_task);
    Scheduler::register_task(1300*1000, led_3_toggle_task);
#else
    Scheduler::register_task(200*1000, led_1_toggle_task);
#endif
    Scheduler::start();

    while (1) {
        STLIB::update();
        Scheduler::update();
    }
}

void Error_Handler(void) {
    ErrorHandler("HAL error handler triggered");
    while (1) {
    }
}

@victor-Lopez25 victor-Lopez25 marked this pull request as draft December 2, 2025 09:01
Copy link
Member

@StefanCostea StefanCostea left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall looks very good

Comment on lines +65 to +66
this->CNT += val;
simulate_ticks(this);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You have removed the side effects fomr CNT and added them into this function, why have you chosen this approach?

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Because I wanted something separate that would only increment CNT when specified, when I used the previous approach, clearing CNT from the scheduler in schedule_next_interval() would cause simulate_ticks() to be called sometimes

Comment on lines +243 to +248

$<$<NOT:$<BOOL:${CMAKE_CROSSCOMPILING}>>:${CMAKE_CURRENT_LIST_DIR}/Src/HALAL/Services/Time/Scheduler.cpp>
$<$<NOT:$<BOOL:${CMAKE_CROSSCOMPILING}>>:${CMAKE_CURRENT_LIST_DIR}/Src/MockedDrivers/mocked_ll_tim.cpp>
$<$<NOT:$<BOOL:${CMAKE_CROSSCOMPILING}>>:${CMAKE_CURRENT_LIST_DIR}/Src/MockedDrivers/mocked_system_stm32h7xx.c>
$<$<NOT:$<BOOL:${CMAKE_CROSSCOMPILING}>>:${CMAKE_CURRENT_LIST_DIR}/Src/MockedDrivers/stm32h723xx_wrapper.c>
$<$<NOT:$<BOOL:${CMAKE_CROSSCOMPILING}>>:${CMAKE_CURRENT_LIST_DIR}/Src/MockedDrivers/NVIC.cpp>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should be moved into a variable, MockedSources or something like that

victor-Lopez25 added a commit that referenced this pull request Dec 27, 2025
#534 (comment)

Co-authored-by: Jorge Sáez <125664643+jorgesg82@users.noreply.github.com>
@victor-Lopez25 victor-Lopez25 marked this pull request as ready for review January 13, 2026 21:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants