mirror of
https://gitee.com/moluo-tech/CodeBrick.git
synced 2025-02-06 04:48:22 +08:00
110 lines
3.2 KiB
C
110 lines
3.2 KiB
C
/*******************************************************************************
|
|
* @brief 模块管理(包含系统初始化,时间片轮询系统)
|
|
*
|
|
* Change Logs:
|
|
* Date Author Notes
|
|
* 2016-06-24 魔罗卜士 初始版
|
|
* 2020-05-23 魔罗卜士 增加匿名类型,防止模块重名错误
|
|
*******************************************************************************/
|
|
#include "module.h"
|
|
|
|
/*
|
|
* 根据编译器特性得到初始化及任务数据段的开始/结束地址
|
|
*/
|
|
#ifdef __CC_ARM /* ARM Compiler */
|
|
extern task_item_t section_task_item$$Base;
|
|
extern task_item_t section_task_item$$Limit;
|
|
#define task_tbl_start §ion_task_item$$Base
|
|
#define task_tbl_end §ion_task_item$$Limit
|
|
|
|
extern module_init_item_t section_sys_init$$Base;
|
|
extern module_init_item_t section_sys_init$$Limit;
|
|
#define sys_init_start §ion_sys_init$$Base
|
|
#define sys_init_end §ion_sys_init$$Limit
|
|
|
|
#elif defined (__ICCARM__) /* for IAR Compiler */
|
|
#pragma section="section_task_item"
|
|
#define task_tbl_start __section_begin("section_task_item")
|
|
#define task_tbl_end __section_end("section_task_item")
|
|
|
|
#pragma section="section_sys_init"
|
|
#define sys_init_start __section_begin("section_sys_init")
|
|
#define sys_init_end __section_end("section_sys_init")
|
|
|
|
#pragma section="section_drv_init"
|
|
#define drv_init_start __section_begin("section_drv_init")
|
|
#define drv_init_end __section_end("section_drv_init")
|
|
|
|
#pragma section="section_app_init"
|
|
#define app_init_start __section_begin("section_app_init")
|
|
#define app_init_end __section_end("section_app_init")
|
|
|
|
#endif
|
|
|
|
|
|
static volatile unsigned int tick; //系统滴答计时
|
|
|
|
/*
|
|
* @brief 增加系统节拍数(定时器中断中调用)
|
|
*/
|
|
void systick_increase(void)
|
|
{
|
|
tick++;
|
|
}
|
|
|
|
/*
|
|
* @brief 获取系统滴答时钟值(通常单位是1ms)
|
|
*/
|
|
unsigned int get_tick(void)
|
|
{
|
|
return tick;
|
|
}
|
|
|
|
|
|
/*
|
|
* @brief 模块初始处理
|
|
* 初始化模块优化级 system_init > driver_init > module_init
|
|
* @param[in] none
|
|
* @return none
|
|
*/
|
|
void module_task_init(void)
|
|
{
|
|
module_init_item_t *m;
|
|
for (m = (module_init_item_t *)sys_init_start;
|
|
m < (module_init_item_t *)sys_init_end; m++) { //系统模块初始化
|
|
m->init();
|
|
}
|
|
for (m = (module_init_item_t *)drv_init_start;
|
|
m < (module_init_item_t *)drv_init_end; m++) { //驱动模块初始化
|
|
m->init();
|
|
}
|
|
for (m = (module_init_item_t *)app_init_start;
|
|
m < (module_init_item_t *)app_init_end; m++) { //应用模块初始化
|
|
m->init();
|
|
}
|
|
}
|
|
|
|
/*
|
|
* @brief 基于时间轮询任务调度
|
|
* @param[in] none
|
|
* @return none
|
|
*/
|
|
void module_task_poll(void)
|
|
{
|
|
task_item_t *t;
|
|
for (t = (task_item_t *)task_tbl_start;
|
|
t < (task_item_t*)task_tbl_end; t++) {
|
|
if ((get_tick() - *t->timer) >= t->interval) {
|
|
*t->timer = get_tick();
|
|
t->handle();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|