The first smartphone with MOE in the world!.......Bazinga!!!
MOE is an event-driven scheduler system for 8/16/32-bit MCUs. MOE means "Minds Of Embedded system", it’s also the name of my lovely baby daughter 😄
Features with:
Features | Description |
---|---|
Event-driven | Flexible event queue length, priority event supported. |
Timer | Useful ms-timer with callback. |
Message | Easy-use message API for communication between tasks, To-All-Task message with low RAM comsuption supported. |
Debug | Flexible debug print options for each task or module; Useful easy-assert; CmBacktrace(Hardfault backtrace for Cortex-M) |
Protothread | Protothread is supported for application module. |
For more discussion, please join our QQ Group: 475258651
- Step 1: Port the MOE to your hardware, provide "system clock in ms" and "poll function(if available)", init and run MOE.
/* EXAMPLE CODE */
uint16 GetMsClock(void) /* Function to get ms clock */
{
return sg_u16SysClk; /* System ms clock, increased every 1 ms in hardware timer interrupt */
}
void Poll(void) /* Function to be Polled */
{
/* Something you want to do by polling */
return;
}
void main(void)
{
.... /* Board init operation */
MOE_Init(GetMsClock, Poll); /* Init MOE with system clock funtion, and poll function(fill "NULL" if NOT available) */
MOE_Run(); /* Start MOE */
return;
}
- Step 2: Create your own tasks or re-use exist app tasks to build your application. (Protothread style application is shown below, For event handler style, please see the source)
/* EXAMPLE CODE */
/* Task 1: Blinking LED */
uint8 Task_PT_Demo_Process(uint8 u8Evt, void *pPara)
{
PT_INIT();
PT_BEGIN();
MOE_MANDATORY_INIT(); /* Mandatory init, shout call it here only */
while(1)
{
TASK_PT_DEMO_LED_Toggle(LED_RED);
PT_DELAY(1000);
TASK_PT_DEMO_LED_Toggle(LED_GREEN);
PT_DELAY(1000);
TASK_PT_DEMO_LED_Toggle(LED_BLUE);
PT_DELAY(1000);
}
PT_END();
return SW_OK;
}
/* EXAMPLE CODE */
/* Task 2: Periodic printing */
uint8 Task_PT_Demo2_Process(uint8 u8Evt, void *pPara)
{
PT_INIT();
PT_BEGIN();
MOE_MANDATORY_INIT(); /* Mandatory init, shout call it here only */
while(1)
{
DBG_PRINT("I am another Task!!\n");
PT_DELAY(1000);
}
PT_END();
return SW_OK;
}
- Step 3: Register tasks in Project_Config.h and continue other configuration in the same file.
#define LIST_OF_REG_TASK \
REG_TASK(Task_PT_Demo_Proces)\
REG_TASK(Task_PT_Demo2_Proces)
- Step 4: Run & Enjoy. 😄
Folder | Description |
---|---|
App/ | App modules which can be re-used in different projects. Please add new app module here for new application requirement |
Core/ | Core files including scheduler, Event-drivern, timer and message. |
Cpu/ | Startup and other necessary code for starting MCUs |
Debug/ | Useful tool & modules for debugging |
Driver/ | Driver of MCU peripheral and other extended module(sensors or RF parts) |
Network/ | Stack for kinds fo network(to be done.) |
Pub/ | Public files including public head file, MACRO and debug file |
Utility/ | Useful function modules including queue, link list, printf |
project/ | Files for specific projects including configuration of SW/HW and the main file |
Documents/ | Description documents including design record, API reference and pictures |
Tools/ | Useful Tools for configuration, building, debugging, analysis and so on |
- 🎉MOE Logo drawing by Miss Cai Jianan.:tada: