代码拉取完成,页面将自动刷新
/******************************************************************************
* @brief 系统模块管理(包含系统初始化,时间片轮询系统)
*
* Copyright (c) 2017~2020, <morro_luo@163.com>
*
* SPDX-License-Identifier: Apache-2.0
*
* Change Logs:
* Date Author Notes
* 2016-06-24 Morro 初版完成
* 2020-05-23 Morro 增加匿名类型,防止模块重名错误
* 2020-06-28 Morro 增加is_timeout超时判断接口
* 2020-09-28 Morro 解决伪任务项未初始化timer,导致引用了空指针的问题!
*
******************************************************************************/
#include "module.h"
static volatile unsigned int tick; //系统滴答计时
/*
* @brief 增加系统节拍数(定时器中断中调用,1ms 1次)
*/
void systick_increase(unsigned int ms)
{
tick += ms;
}
/*
* @brief 获取系统滴答时钟值(通常单位是1ms)
*/
unsigned int get_tick(void)
{
return tick;
}
/*
* @brief 超时判断
* @param[in] start - 起始时间
* @param[in] timeout - 超时时间(ms)
*/
bool is_timeout(unsigned int start, unsigned int timeout)
{
return get_tick() - start > timeout;
}
/*
* @brief 空处理,用于定位段入口
*/
static void nop_process(void) {}
//第一个初始化项
const init_item_t init_tbl_start SECTION("init.item.0") = {
"", nop_process
};
//最后个初始化项
const init_item_t init_tbl_end SECTION("init.item.4") = {
"", nop_process
};
//第一个任务项
const task_item_t task_tbl_start SECTION("task.item.0") = {
"", nop_process
};
//最后个任务项
const task_item_t task_tbl_end SECTION("task.item.2") = {
"", nop_process
};
/*
* @brief 模块初始处理
* 初始化模块优化级 system_init > driver_init > module_init
* @param[in] none
* @return none
*/
void module_task_init(void)
{
const init_item_t *it = &init_tbl_start;
while (it < &init_tbl_end) {
it++->init();
}
}
/*
* @brief 任务轮询处理
* @param[in] none
* @return none
*/
void module_task_process(void)
{
const task_item_t *t;
for (t = &task_tbl_start + 1; t < &task_tbl_end; t++) {
if ((get_tick() - *t->timer) >= t->interval) {
*t->timer = get_tick();
t->handle();
}
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。