-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathmain.cpp
75 lines (59 loc) · 1.92 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include "rtos.hpp" // for Rtos
#include "mailbox.hpp" // for Mailbox
#include "event.hpp" // for Event
#include "mytask.hpp" // for MyTask
#include "led1task.hpp" // for Led1Task
//#include "myfirsttask.h" // for MyFirstTask
//#include "buttontask.h" //for ButtonTask
#include "rccregisters.hpp" // for RCC
#include "Application/Diagnostic/GlobalStatus.hpp"
#include "gpioaregisters.hpp" // for GPIOA
#include "gpiocregisters.hpp" // for GPIOC
std::uint32_t SystemCoreClock = 16'000'000U;
extern "C" {
int __low_level_init(void)
{
//Switch on external 16 MHz oscillator
RCC::CR::HSION::On::Set();
// while (RCC::CR::HSIRDY::NotReady::IsSet())
{
}
//Switch system clock on external oscillator
RCC::CFGR::SW::Hsi::Set();
// while (!RCC::CFGR::SWS::Hsi::IsSet())
{
}
//Switch on clock on PortA and PortC
RCC::AHB1ENRPack<
RCC::AHB1ENR::GPIOCEN::Enable,
RCC::AHB1ENR::GPIOAEN::Enable
>::Set();
RCC::APB2ENR::SYSCFGEN::Enable::Set();
//LED1 on PortA.5, set PortA.5 as output
GPIOA::MODER::MODER5::Output::Set();
/* LED2 on PortC.9, LED3 on PortC.8, LED4 on PortC.5 so set PortC.5,8,9 as output */
GPIOC::MODERPack<
GPIOC::MODER::MODER5::Output,
GPIOC::MODER::MODER8::Output,
GPIOC::MODER::MODER9::Output
>::Set();
return 1;
}
}
OsWrapper::Event event{500ms, 1};
MyTask myTask(event, UserButton::GetInstance());
Led1Task led1Task(event, LedsController::GetInstance());
OsWrapper::Event buttonEvent(500ms, 1);
OsWrapper::MailBox<int, 1> buttonMailBox;
//ButtonTask buttonTask(buttonMailBox);
//MyFirstTask myFirstTask;
int main()
{
using namespace OsWrapper;
Rtos::CreateThread(myTask, "myTask", ThreadPriority::lowest);
Rtos::CreateThread(led1Task, "Led1Task");
// Rtos::CreateThread(myFirstTask, "MyFirstTask", ThreadPriority::highest);
// Rtos::CreateThread(buttonTask, "ButtonTask", ThreadPriority::normal);
Rtos::Start();
return 0;
}