Huge refactoring for C++ and low-power mode
The display currently shows the time, with hours and minutes, and is capable of receiving input with buttons (though does nothing). It sleeps during intervals where nothing is happening. The display task runs once per second, and RTC alarm A is used for periodic alarms to update the system time.
This commit is contained in:
59
main.cpp
59
main.cpp
@@ -19,12 +19,13 @@
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include "ConcreteTaskScheduler.h"
|
||||
#include "LowPowerTaskScheduler.h"
|
||||
#include "RtcDriver.h"
|
||||
#include "DisplayDriver.h"
|
||||
#include "SpiDriver.h"
|
||||
#include "BlinkTask.h"
|
||||
#include "LowPowerDelay.h"
|
||||
#include "DisplayTimeTask.h"
|
||||
#include "LptimPwm.h"
|
||||
#include "ButtonManager.h"
|
||||
|
||||
#include "stm32l0xx.h"
|
||||
|
||||
@@ -32,12 +33,12 @@
|
||||
|
||||
using Common::Time;
|
||||
|
||||
static Common::Schedule::ConcreteTaskScheduler<10> g_sched;
|
||||
static Common::Schedule::LowPowerTaskScheduler<10> g_sched;
|
||||
static BSP::SpiDriver g_spi(g_sched);
|
||||
static BSP::DisplayDriver g_display(g_sched, g_spi);
|
||||
//static BlinkTask g_blink(Common::Time::seconds(2));
|
||||
static BSP::LptimPwm g_lptim_pwm(LPTIM1);
|
||||
static BSP::ButtonManager g_btn_manager(0, 1, 3, Time::millis(1));
|
||||
static DisplayTimeTask g_display_time(g_display);
|
||||
//static LowPowerDelay g_lp_delay;
|
||||
|
||||
extern "C" void __cxa_pure_virtual() { while(1) {} }
|
||||
|
||||
@@ -116,25 +117,61 @@ static void _init(void)
|
||||
(*func)();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[[noreturn]] void main() {
|
||||
|
||||
_init();
|
||||
|
||||
BSP::SystemTimer::init(RTC);
|
||||
// Set up the system clock
|
||||
BSP::RtcDriver::init();
|
||||
BSP::SystemTimer::set_timer(BSP::RtcDriver::get_system_timer());
|
||||
BSP::LowPower::init();
|
||||
|
||||
// Initialize the tasks
|
||||
g_lptim_pwm.init();
|
||||
g_spi.init();
|
||||
g_btn_manager.init();
|
||||
g_display.init();
|
||||
//g_blink.init();
|
||||
g_display_time.init();
|
||||
|
||||
// Enqueue each of the tasks
|
||||
Common::Schedule::NextTime asap = Common::Schedule::NextTime::asap();
|
||||
//g_sched.add_task(g_blink, asap);
|
||||
//g_sched.add_task(g_lp_delay, asap);
|
||||
g_sched.add_task(g_spi, asap);
|
||||
g_sched.add_task(g_btn_manager, asap);
|
||||
g_sched.add_task(g_display, asap);
|
||||
g_sched.add_task(g_display_time, asap);
|
||||
|
||||
// And we're off! This will never return
|
||||
g_sched.run();
|
||||
}
|
||||
|
||||
|
||||
extern "C" void NMI_Handler() {while (1);}
|
||||
extern "C" void HardFault_Handler() {while (1);}
|
||||
extern "C" void SVC_Handler() {while (1);}
|
||||
extern "C" void PendSV_Handler() {while (1);}
|
||||
extern "C" void SysTick_Handler() {while (1);}
|
||||
|
||||
extern "C" void WWDG_IRQHandler() {while (1);}
|
||||
extern "C" void PVD_IRQHandler() {while (1);}
|
||||
extern "C" void WDT_IRQHandler() {while (1);}
|
||||
//extern "C" void RTC_IRQHandler() {while (1);}
|
||||
extern "C" void FLASH_IRQHandler() {while (1);}
|
||||
extern "C" void RCC_CRS_IRQHandler() {while (1);}
|
||||
// extern "C" void EXTI_1_0_IRQHandler() {while (1);}
|
||||
// extern "C" void EXTI_3_2_IRQHandler() {while (1);}
|
||||
// extern "C" void EXTI_15_4_IRQHandler() {while (1);}
|
||||
extern "C" void DMA1_CHANNEL1_IRQHandler() {while (1);}
|
||||
extern "C" void DMA1_CHANNEL3_2_IRQHandler() {while (1);}
|
||||
extern "C" void DMA_CHANNEL_7_4_IRQHandler() {while (1);}
|
||||
extern "C" void ADC_COMP_IRQHandler() {while (1);}
|
||||
extern "C" void LPTIM1_IRQHandler() {while (1);}
|
||||
extern "C" void USART4_USART5_IRQHandler() {while (1);}
|
||||
extern "C" void TIM2_IRQHandler() {while (1);}
|
||||
extern "C" void TIM3_IRQHandler() {while (1);}
|
||||
extern "C" void TIM6_IRQHandler() {while (1);}
|
||||
extern "C" void TIM7_IRQHandler() {while (1);}
|
||||
extern "C" void TIM21_IRQHandler() {while (1);}
|
||||
extern "C" void I2C3_IRQHandler() {while (1);}
|
||||
extern "C" void TIM22_IRQHandler() {while (1);}
|
||||
|
||||
Reference in New Issue
Block a user