From 5ae4ea81db371ad567604b3792343d3764ddfbfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9B=B6=E4=B8=AD=E6=96=AD=E5=BB=B6=E8=BF=9F=E7=9A=84RTOS?= Date: Fri, 4 Apr 2025 05:59:08 +0000 Subject: [PATCH] =?UTF-8?q?update=20CosyOS-=E9=92=A9=E5=AD=90=E6=96=87?= =?UTF-8?q?=E4=BB=B6.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 零中断延迟的RTOS --- Hook/copy_hook.c | 20 ++++++++++++ Hook/debug_hook.c | 23 ++++++++++++++ Hook/idle_hook.c | 19 ++++++++++++ Hook/pendsv_hook.c | 19 ++++++++++++ Hook/start_hook.c | 19 ++++++++++++ Hook/tick_hook.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 176 insertions(+) create mode 100644 Hook/copy_hook.c create mode 100644 Hook/debug_hook.c create mode 100644 Hook/idle_hook.c create mode 100644 Hook/pendsv_hook.c create mode 100644 Hook/start_hook.c create mode 100644 Hook/tick_hook.c diff --git a/Hook/copy_hook.c b/Hook/copy_hook.c new file mode 100644 index 00000000..5555f0e0 --- /dev/null +++ b/Hook/copy_hook.c @@ -0,0 +1,20 @@ +/**************************************************************************//** + * @item CosyOS-III Hook + * @file copy_hook.c + * @brief 副本钩子(用于更新全局变量副本) + * @details 当一个非原子访问的全局变量需要在中断中读取时,可在副本钩子中 + 用全局变量的正本来更新副本,可采用赋值、内存拷贝、字符串拷贝等方式。 + * @author 迟凯峰 + * @version V1.2.0 + * @date 2025.03.30 + ******************************************************************************/ + +#include "CosyOS.H" +#if SYSCFG_COPYHOOK == __ENABLED__ + +__WEAK void copy_hook(void) MCUCFG_C51USING +{ + +} + +#endif diff --git a/Hook/debug_hook.c b/Hook/debug_hook.c new file mode 100644 index 00000000..394f34d3 --- /dev/null +++ b/Hook/debug_hook.c @@ -0,0 +1,23 @@ +/**************************************************************************//** + * @item CosyOS-III Hook + * @file debug_hook.c + * @brief DEBUG钩子 + * @details 在系统调试任务中被调用,用户可自行实现DEBUG信息的输出。 + * @author 迟凯峰 + * @version V1.2.0 + * @date 2025.03.30 + ******************************************************************************/ + +#include "CosyOS.H" +#if SYSCFG_DEBUGGING == __ENABLED__ + +#if SYSCFG_DEBUG_SENDLEN == __DISABLED__ +__WEAK void debug_hook(char *p) +#else +__WEAK void debug_hook(char *p, size_t len) +#endif +{ + +} + +#endif diff --git a/Hook/idle_hook.c b/Hook/idle_hook.c new file mode 100644 index 00000000..93c29850 --- /dev/null +++ b/Hook/idle_hook.c @@ -0,0 +1,19 @@ +/**************************************************************************//** + * @item CosyOS-III Hook + * @file idle_hook.c + * @brief 空闲钩子 + * @details 在系统空闲任务中被调用,用户可添加自己的代码做一些没有实时性要求的工作。 + * @author 迟凯峰 + * @version V1.2.0 + * @date 2025.03.30 + ******************************************************************************/ + +#include "CosyOS.H" +#if SYSCFG_IDLEHOOK == __ENABLED__ + +__WEAK void idle_hook(void) +{ + +} + +#endif diff --git a/Hook/pendsv_hook.c b/Hook/pendsv_hook.c new file mode 100644 index 00000000..6d20a95f --- /dev/null +++ b/Hook/pendsv_hook.c @@ -0,0 +1,19 @@ +/**************************************************************************//** + * @item CosyOS-III Hook + * @file pendsv_hook.c + * @brief 挂起服务钩子 + * @details 用于处理标志队列中的中断挂起服务。 + * @author 迟凯峰 + * @version V1.2.0 + * @date 2025.03.30 + ******************************************************************************/ + +#include "CosyOS.H" +#if SYSCFG_PENDSVHOOK == __ENABLED__ + +__WEAK void pendsv_hook(void) MCUCFG_C51USING +{ + +} + +#endif diff --git a/Hook/start_hook.c b/Hook/start_hook.c new file mode 100644 index 00000000..35a93ae7 --- /dev/null +++ b/Hook/start_hook.c @@ -0,0 +1,19 @@ +/**************************************************************************//** + * @item CosyOS-III Hook + * @file start_hook.c + * @brief 启动钩子 + * @details 在启动任务中被调用,可在此启动用户任务。 + * @service uStartTask(task, status); 启动任务 + uStartTask_Ready(task); 启动任务并就绪 + uStartTask_Suspend(task); 启动任务并挂起 + * @author 迟凯峰 + * @version V1.2.0 + * @date 2025.03.30 + ******************************************************************************/ + +#include "CosyOS.H" + +__WEAK void start_hook(void) +{ + +} diff --git a/Hook/tick_hook.c b/Hook/tick_hook.c new file mode 100644 index 00000000..e032bd12 --- /dev/null +++ b/Hook/tick_hook.c @@ -0,0 +1,76 @@ +/**************************************************************************//** + * @item CosyOS-III Hook + * @file tick_hook.c + * @brief 滴答钩子 + * @details 每个系统滴答周期,在系统滴答中断中都会被调用一次, + 适用于每滴答周期/秒/分/时/日/月/年/...做一次的工作。 + * @note 1. 如果在滴答钩子中调用服务,应调用滴答API。 + 2. 如果在滴答钩子中调用自定义函数并且MCU内核为8051,自定义函数 + 可能需要添加using属性、或声明为相对寄存器访问。 + demo1: + void your_function(void) MCUCFG_C51USING {... ...} + + demo2: + #pragma NOAREGS + void your_function(void) {... ...} + #pragma AREGS + * @author 迟凯峰 + * @version V1.2.0 + * @date 2025.03.30 + ******************************************************************************/ + +#include "CosyOS.H" +#if SYSCFG_TICKHOOK == __ENABLED__ + +__WEAK void tick_hook(void) MCUCFG_C51USING +{ + if(true){ /* 每滴答周期执行一次 */ + + } + #if SYSCFG_SOFTRTC == __ENABLED__ + if(s_sign_every.halfsec){ + s_sign_every.halfsec = false; + if(true){ /* 每半秒执行一次(每半秒,first tick)*/ + + } + if(s_sign_every.second){ + s_sign_every.second = false; + if(true){ /* 每秒钟执行一次(每秒,first tick)*/ + + } + if(s_sign_every.minute){ + s_sign_every.minute = false; + if(true){ /* 每分钟执行一次(每分0秒,first tick)*/ + + } + if(s_sign_every.hour){ + s_sign_every.hour = false; + if(true){ /* 每小时执行一次(每时0分0秒,first tick)*/ + + } + if(s_sign_every.day){ + s_sign_every.day = false; + if(true){ /* 每天执行一次(每天0时0分0秒,first tick)*/ + + } + if(s_sign_every.month){ + s_sign_every.month = false; + if(true){ /* 每月执行一次(每月1日0时0分0秒,first tick)*/ + + } + if(s_sign_every.year){ + s_sign_every.year = false; + if(true){ /* 每年执行一次(每年1月1日0时0分0秒,first tick)*/ + + } + } + } + } + } + } + } + } + #endif +} + +#endif