删除文件 System

This commit is contained in:
零中断延迟的RTOS
2026-07-21 11:43:30 +00:00
committed by Gitee
parent f6b7ea3f4b
commit 85ba43f42f
28 changed files with 0 additions and 9856 deletions
-30
View File
@@ -1,30 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file CosyOS.H
* @brief 系统链接头文件
* @details 用户的各个c文件中应包含此文件。
* @author 迟凯峰
* @version V2.4.2
* @date 2026.07.04
******************************************************************************/
#ifndef __COSYOS_H
#define __COSYOS_H
#define COSYOS3_VERSION "v2.4.2"
#include "os_var.h"
#include "os_api.h"
#include "sv_com.h"
#include "sv_create.h"
#include "sv_int_fifo.h"
#include "sv_int_loc.h"
#include "sv_pend.h"
#include "sv_task.h"
#include "sv_tick.h"
#include "ur_api.h"
#include "ur_eapi.h"
#endif
-313
View File
File diff suppressed because it is too large Load Diff
-22
View File
@@ -1,22 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_base.h
* @brief 基本数据类型定义
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#ifndef __OS_BASE_H
#define __OS_BASE_H
typedef char s_s8_t;
typedef short s_s16_t;
typedef long s_s32_t;
typedef unsigned char s_u8_t;
typedef unsigned short s_u16_t;
typedef unsigned long s_u32_t;
typedef s_u8_t s_ecode_t; /*!< 错误码类型 */
#endif
-147
View File
@@ -1,147 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_debug.c
* @brief DEBUG接口
* @details DEBUG接口,串口发送和接收解析。
* @author 迟凯峰
* @version V2.3.5
* @date 2026.06.10
******************************************************************************/
#include "os_var.h"
#if (SYSCFG_DEBUGGING == __ENABLED__)
#include "os_api.h"
#include "sv_com.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
#include <string.h>
/**
\brief 字符串转整型
\param[in] str 字符串指针
\return 转换后的整型数据
\note Keil C51/C251 标准库中的 atoi() 是非线程安全的,故额外定义此函数,
专用于DEBUG接口的串口接收解析。
*/
static int _atoi_(char const *str)
{
if(str == OS_NULL || !*str){
return 0;
}
else{
int a = 0;
int k = 1;
s_u8_t i = s_strlen(str);
while(i--){
if(str[i] >= '0' && str[i] <= '9'){
a += (str[i] - '0') * k;
k *= 10;
}
else if(str[i] == '+'){
return a;
}
else if(str[i] == '-'){
return -a;
}
else{
return 0;
}
}
return a;
}
}
/**
\brief 接收解析
\details DEBUG接口,串口接收解析。
\return 无
*/
void os_debug_recv(void)
{
#define p s_debug_recvptr
#define len s_debug_recvlen
p[len] = '\0';
if(len == 9 && !s_memcmp(p, "taskmgr\r\n", 9)){
s_taskmgr_sign = true;
s_taskmgr_upspeed = 0;
s_timqry_handle[OS_TMID_TASKMGR]->timer = s_timqry_handle[OS_TMID_TASKMGR]->reload;
}
else if(len == 6 && !s_memcmp(p, "exit\r\n", 6)){
s_taskmgr_sign = false;
}
else if(len >= 15 && !s_memcmp(p, "taskmgr /s=", 11)){
s_u8_t i;
char *mptr = p + 11;
for(i = 0; i < 5; i++){
if(mptr[i] >= '0' && mptr[i] <= '9');
else break;
}
if(i >= 2 && !s_memcmp(mptr + i, "\r\n", 2)){
s_u16_t temp;
mptr[i] = '\0';
temp = _atoi_(mptr);
if(temp >= 50 && temp <= 5000){
s_timqry_handle[OS_TMID_TASKMGR]->reload = (temp * 1000UL) / SYSCFG_SYSTICK_CYCLE;
}
}
}
#undef p
#undef len
}
/**
\brief 系统调试器
\details 负责系统DEBUG信息的输出,具体包括命令行和任务管理器。
\param[in] 定时器ID OS_TMID_DEBUGGER
\param[in] 定时查询事件 s_debug_sendtype
\param[in] 自动重装载 false
\param[in] 任务名称 Debugger
\param[in] 任务优先级 SYSCFG_TASKPRIORITY - 1
\param[in] 任务栈大小 SYSCFG_STACKSIZE_DEBUGGER
\param[in] 安全运行时 0
\param[in] 任务名称文本<br>
遗产模式:"Debugger"<br>
标准/兼容模式:[中文:"系统调试器",英文:"Debugger"]
\return 无
\note 定时查询任务
*/
#if (SYSCFG_DEBUG_LANGUAGE == 0)
#define _taskname "Debugger"
#else
#define _taskname "\xCF\xB5\xCD\xB3\xB5\xF7\xCA\xD4\xC6\xF7" /*!< "系统调试器" */
#endif
uCreateTask_TimQry
(
OS_TMID_DEBUGGER, s_debug_sendtype, false,
Debugger, SYSCFG_TASKPRIORITY - 1, SYSCFG_STACKSIZE_DEBUGGER, 0, _taskname
)
{
#if (SYSCFG_DEBUG_SENDLEN == __DISABLED__)
void debug_hook(char _XDATA_MEM_ *p);
#else
void debug_hook(char _XDATA_MEM_ *p, s_u16_t len);
#endif
while(true){
if(s_debug_sendtype & OS_DEBUG_SEND_TASKMGR){
s_debug_sendtype &= ~OS_DEBUG_SEND_TASKMGR;
#if (SYSCFG_DEBUG_SENDLEN == __DISABLED__)
debug_hook(s_taskmgr_sendbuff);
#else
debug_hook(s_taskmgr_sendbuff, s_taskmgr_sendlen);
#endif
}/*
else if(s_debug_sendtype & OS_DEBUG_SEND_CMDLINE){
s_debug_sendtype &= ~OS_DEBUG_SEND_CMDLINE;
#if (SYSCFG_DEBUG_SENDLEN == __DISABLED__)
debug_hook(s_cmdline_sendbuff);
#else
debug_hook(s_cmdline_sendbuff, s_cmdline_sendlen);
#endif
}*/
uSuspendTasking();
}
}
#undef _taskname
#endif
-153
View File
@@ -1,153 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_def.h
* @brief 初始宏定义
* @author 迟凯峰
* @version V2.4.0
* @date 2026.06.22
******************************************************************************/
#ifndef __OS_DEF_H
#define __OS_DEF_H
/*
* SYSAPI
*/
#define sDefStr(s) sDefStr_0(s)
#define sDefStr_0(s) #s
#define sCat2Str(s1, s2) sCat2Str_0(s1, s2)
#define sCat2Str_0(s1, s2) s1##s2
#define sCat3Str(s1, s2, s3) sCat3Str_0(s1, s2, s3)
#define sCat3Str_0(s1, s2, s3) s1##s2##s3
#define sDefBitField(v) s_u8_t v:1
#define sDefVoidBits(n) s_u8_t :n
/*
* CONST
*/
#define true 1
#define false 0
#define OS_NULL 0
/*
* CONFIG VALUE
*/
#define __DISABLED__ 0
#define __ENABLED__ 1
#define __STATIC__ 0 /*!< 静态队列 ............. */
#define __DYNAMIC__ 1 /*!< 动态队列 ............. */
#define __QUE_FIFO__ 0 /*!< 先入先出队列 ......... */
#define __QUE_LIFO__ 1 /*!< 后入先出队列 ......... */
#define __MCS_51__ 0 /*!< 指令集架构:MCS51 .... */
#define __MCS_251__ 1 /*!< 指令集架构:MCS251 ... */
#define __ARM__ 2 /*!< 指令集架构:ARM ...... */
#define __COOPERATIVE__ 1 /*!< 协作式调度............ */
#define __TIMESHARING__ 2 /*!< 时间片轮转调度........ */
#define __MSP__ 0x01
#define __PSP__ 0x02
#define __MSP_PSP__ (__MSP__ | __PSP__)
/*
* 任务相关
*/
/* 任务状态 */
#define OS_STATUS_READY 0x00 /*!< 就绪/运行状态 ............ */
#define OS_STATUS_FLOATING 0x01 /*!< 浮动状态 ................. */
#define OS_STATUS_BLOCKED 0x02 /*!< 阻塞状态 ................. */
#define OS_STATUS_TIMEOUT 0x04 /*!< 超时状态 ................. */
#define OS_STATUS_SUSPENDED 0x08 /*!< 挂起状态 ................. */
#define OS_STATUS_STOPPED 0x40 /*!< 停止状态 ................. */
#define OS_STATUS_DELETED 0x80 /*!< 已删除/未启动状态 ........ */
/* 阻塞类型 */
#define OS_BLOCKED_DELAY 0x00 /*!< 延时阻塞 ................. */
/*- 0x01/0x02/0x04:sizeof(Group) -*//*!< 事件标志组阻塞(等待).... */
#define OS_BLOCKED_BINARY 0x10 /*!< 二值信号量阻塞(获取/等待)*/
#define OS_BLOCKED_MUTEX 0x20 /*!< 互斥信号量阻塞(获取).... */
#define OS_BLOCKED_SEMAPHORE 0x30 /*!< 计数信号量阻塞(获取).... */
#define OS_BLOCKED_TASKMSG 0x40 /*!< 接收私信阻塞 ............. */
#define OS_BLOCKED_FETION 0x50 /*!< 接收飞信阻塞 ............. */
#define OS_BLOCKED_MAIL 0x60 /*!< 接收邮件阻塞 ............. */
#define OS_BLOCKED_MSG 0x70 /*!< 接收消息阻塞 ............. */
/*
* DEBUG SEND TYPE
*/
#define OS_DEBUG_SEND_CMDLINE 0x01 /*!< 命令行发送 ... */
#define OS_DEBUG_SEND_TASKMGR 0x02 /*!< 任务管理器发送 */
/*
* TASKMGR LEN
*/
#define OS_TASKMGR_LEN_PRI 6
#define OS_TASKMGR_LEN_STA 6
#define OS_TASKMGR_LEN_CPU 9
/*
* SVID(服务ID,中断FIFO服务-系统专用ID)
*/
#define OS_SVID_CLEARDELAY 0x00 /*!< 清除就绪延时 ....... */
#define OS_SVID_RESUMETASK 0x01 /*!< 恢复任务 ........... */
#define OS_SVID_SUSPENDTASK 0x02 /*!< 挂起任务 ........... */
#define OS_SVID_DELETETASK 0x03 /*!< 删除任务 ........... */
#define OS_SVID_RESETTASK 0x04 /*!< 重置任务 ........... */
#define OS_SVID_CLEARBLOCK 0x05 /*!< 清除阻塞 ........... */
#define OS_SVID_SETBLOCK 0x06 /*!< 设置阻塞 ........... */
#define OS_SVID_SETTASKPRI 0x07 /*!< 设置任务优先级 ..... */
#define OS_SVID_WRITEBINARY 0x08 /*!< 写二值信号量 ....... */
#define OS_SVID_GIVESEMAPH 0x09 /*!< 给予计数信号量 ..... */
#define OS_SVID_SENDFETION 0x0A /*!< 发送飞信 ........... */
#define OS_SVID_SENDMAIL 0x0B /*!< 发送邮件 ........... */
#define OS_SVID_SENDMSG 0x0C /*!< 发送消息 ........... */
#define OS_SVID_TIMINT 0x0D /*!< 定时中断 ........... */
#define OS_SVID_TIMQRY 0x0E /*!< 定时查询 ........... */
#define OS_SVID_WRITEGROUP 0x0F /*!< 写标志组 ........... */
#define OS_SVID_WRITEGVAR 0x10 /*!< 写全局变量 ......... */
#define OS_SVID_PENDSVC 0x11 /*!< 挂起服务调用 ....... */
#define OS_SVID_END 0x12
/*
* ECODE(错误码)
*/
#define OS_ECODE_NOERROR 0x00 /*!< 无错误 ............. */
#define OS_ECODE_TASKSTARTED 0x0D /*!< 任务已启动 ......... */
#define OS_ECODE_TASKSUSPENDED 0x0E /*!< 任务已挂起 ......... */
#define OS_ECODE_TASKSTOPPED 0x0F /*!< 任务已停止 ......... */
#define OS_ECODE_TASKDELETED 0x10 /*!< 任务已删除 ......... */
#define OS_ECODE_TASKNOTSTARTED 0x10 /*!< 任务未启动 ......... */
#define OS_ECODE_TASKNOTBLOCKED 0x11 /*!< 任务未阻塞 ......... */
#define OS_ECODE_TASKNOTSUSPENDED 0x12 /*!< 任务未挂起 ......... */
#define OS_ECODE_TASKPRIUNCHANGED 0x13 /*!< 任务优先级未改变 ... */
#define OS_ECODE_OVERFLOW_MSGQUEUE 0x21 /*!< 消息队列溢出 ....... */
#define OS_ECODE_OVERFLOW_TASKQUEUE 0x22 /*!< 任务队列溢出 ....... */
#define OS_ECODE_OVERFLOW_TASKSTACK 0x23 /*!< 任务栈溢出 ......... */
#define OS_ECODE_MALLOCFAIL_MSGNODE 0x31 /*!< 消息节点内存分配失败 */
#define OS_ECODE_MALLOCFAIL_TASKNODE 0x32 /*!< 任务节点内存分配失败 */
#define OS_ECODE_MALLOCFAIL_TASKSTACK 0x33 /*!< 任务栈内存分配失败 . */
#define OS_ECODE_DONOTKNOW 0xFF /*!< 未知错误 ........... */
#endif
-696
View File
File diff suppressed because it is too large Load Diff
-33
View File
@@ -1,33 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_main.c
* @brief 启动-CosyOS
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#include "os_var.h"
#include "os_api.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
/**
\brief 启动-CosyOS
\param 无
\return 错误码
\note 用户应自主创建main函数,并在其末尾处调用该函数来启动-CosyOS;
在正常情况下,该函数并不会返回,而是直接调度至 Starter 运行;
只有当 Starter 启动失败时,才会返回错误码提示用户。
*/
s_ecode_t uStartCosyOS(void)
{
sCat2Str(SYSCFG_STARTERCREATE, ExtTask(Starter));
#if (OS_TIMINTTOTAL > 0 || OS_TIMQRYTOTAL > 0)
void os_init_timing(void);
os_init_timing();
#endif
mCosyOS_INIT();
return uStartTask_Ready(Starter);
}
-719
View File
File diff suppressed because it is too large Load Diff
-72
View File
@@ -1,72 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_starter.c
* @brief 任务启动器(Starter)
* @author 迟凯峰
* @version V2.3.2
* @date 2026.03.08
******************************************************************************/
#include "os_var.h"
#include "os_api.h"
#include "sv_com.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
/**
\brief 任务启动器
\param[in] 任务名称 Starter
\param[in] 任务优先级 SYSCFG_TASKPRIORITY - (SYSCFG_DEBUGGING ? 3 : 1)
\param[in] 任务栈大小 SYSCFG_STACKSIZE_STARTER
\param[in] 安全运行时 0
\param[in] 任务名称文本<br>
遗产模式:"Starter"<br>
标准/兼容模式:[中文:"任务启动器",英文:"Starter"]
\return 无
*/
#if (SYSCFG_DEBUG_LANGUAGE == 0)
#define _taskname "Starter"
#else
#define _taskname "\xC8\xCE\xCE\xF1\xC6\xF4\xB6\xAF\xC6\xF7" /*!< "任务启动器" */
#endif
sCat2Str
(
SYSCFG_STARTERCREATE,
CreateTask(Starter, SYSCFG_TASKPRIORITY - (SYSCFG_DEBUGGING ? 3 : 1), SYSCFG_STACKSIZE_STARTER, 0, _taskname)
)
{
// uScheduleLock();
if(true){
uExtTask(Sysidle);
uStartTask_Ready(Sysidle);
}
#if (OS_TIMINTTOTAL > 0 || OS_TIMQRYTOTAL > 0)
if(true){
s_u8_t i;
#if (OS_TIMINTTOTAL > 0)
i = OS_TIMINTTOTAL;
while(i--){
if(s_timint_handle[i]->hookortask){
sStartTask_TimInt(i);
}
}
#endif
#if (OS_TIMQRYTOTAL > 0)
i = OS_TIMQRYTOTAL;
while(i--){
if(s_timqry_handle[i]->hookortask){
sStartTask_TimQry(i);
}
}
#endif
}
#endif
// uScheduleUnlock();
if(true){
void start_hook(void);
start_hook();
}
uDeleteTasking();
}
#undef _taskname
-63
View File
@@ -1,63 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_sysidle.c
* @brief 系统空闲任务(Sysidle)
* @author 迟凯峰
* @version V2.3.9
* @date 2026.06.20
******************************************************************************/
#include "os_var.h"
#include "os_api.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
/**
\brief 系统空闲任务
\param[in] 任务名称 Sysidle
\param[in] 任务优先级 0
\param[in] 任务栈大小 SYSCFG_STACKSIZE_SYSIDLE
\param[in] 安全运行时 0
\param[in] 任务名称文本<br>
遗产模式:"Sysidle"<br>
标准/兼容模式:[中文:"系统空闲",英文:"Sysidle"]
\return 无
*/
#if (SYSCFG_DEBUG_LANGUAGE == 0)
#define _taskname "Sysidle"
#else
#define _taskname "\xCF\xB5\xCD\xB3\xBF\xD5\xCF\xD0" /*!< "系统空闲" */
#endif
uCreateTask(Sysidle, 0, SYSCFG_STACKSIZE_SYSIDLE, 0, _taskname)
{
void idle_hook(void);
while(true){
#if (SYSCFG_SOFTRTC == __ENABLED__)
static s_u8_t _RTC_MEM_ year = 0xFF;
if(year != s_rtc.year){
year = s_rtc.year;
s_month2day = year ? ((year & 3) ? 28 : 29) : ((s_rtc.yeah & 3) ? 28 : 29);
}
#endif
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
s_timeout_sign = false;
#endif
#if (SYSCFG_IDLEHOOK == __ENABLED__)
idle_hook();
#endif
#if (SYSCFG_DEBUGGING == __ENABLED__) && (MCUCFG_TASKSTACK_MODE & __MSP__)
if(true){
m_stacklen_t len = mMainStack_Check();
if(m_stacklen_max < len){
m_stacklen_max = len;
}
}
#endif
#if (SYSCFG_LOWPOWERMODE == __ENABLED__)
mCosyOS_IDLE();
#endif
OS_NOP(4);
}
}
#undef _taskname
-694
View File
File diff suppressed because it is too large Load Diff
-433
View File
File diff suppressed because it is too large Load Diff
-133
View File
@@ -1,133 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.c
* @brief 系统全局变量定义
* @author 迟凯峰
* @version V2.3.8
* @date 2026.06.15
******************************************************************************/
#include "os_redef.h"
/* The Soft-RTC */
#if (SYSCFG_SOFTRTC == __ENABLED__)
s_u8_t const _CONST_MEM_ s_month0day[13] = {31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; /*!< 每月各有几天?*/
s_u8_t _RTC_MEM_ s_month2day = 28; /*!< 二月有几天?*/
s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
m_rtccount_t _SYS_MEM_ s_rtc_counter/**/sZeroInstall; /*!< RTC计数器 */
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC */
#endif
/* The Task */
m_bit_t volatile/*_SYS_MEM_*/ s_sign_startup = true;
s_schesign_tu volatile _SYS_MEM_ s_sign_schedule = {{0, 1}}; /*!< 调度信号 */
m_bit_t volatile/*_SYS_MEM_*/ s_sign_delay/**/sZeroInstall; /*!< 就绪延时信号 */
s_u8_t _SYS_MEM_ s_schedulelock_counter/**/sZeroInstall;/*!< 调度锁嵌套计数器 */
s_taskstart_ts _SYS_MEM_ s_task_starter/**/sZeroInstall_Group; /*!< 任务启动器 */
s_taskctrl_tsp _SYS_MEM_ s_task_current/**/sZeroInstall; /*!< 当前任务句柄 */
s_taskctrl_tsp s_timer_list[OS_TIMESLOTNUM]/**/sZeroInstall_Group; /*!< 定时器链表 */
s_u8_t _SYS_MEM_ s_timer_pointer = OS_TIMESLOTNUM - 1UL;
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
s_sharing_t const _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY] = {SYSCFG_CUSTOMTIMESHARING}; /*!< 自定义时间片 -> 时间片数组 */
#endif
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
s_u8_t _SYS_MEM_ s_kernellock_counter/**/sZeroInstall; /*!< 内核锁嵌套计数器 */
#endif
/* The Safe runtime */
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
m_bit_t /*_SYS_MEM_*/ s_timeout_sign/**/sZeroInstall; /*!< 超时信号 */
s_taskctrl_tsp _STATIC_MEM_ s_timeout_list/**/sZeroInstall; /*!< 超时链表 */
#endif
/* The Timing Interrupt */
#if (OS_TIMINTTOTAL > 0)
s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL]; /*!< 定时中断句柄 */
#endif
/* The Timing Query */
#if (OS_TIMQRYTOTAL > 0)
s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL]; /*!< 定时查询句柄 */
#endif
/* The Task Message */
#if (SYSCFG_TASKMSG == __ENABLED__)
s_u8_t volatile _SYS_MEM_ s_taskmsg_sign/**/sZeroInstall; /*!< 发送私信信号 */
#endif
/* The Debug Interface */
#if (SYSCFG_DEBUGGING == __ENABLED__)
m_bit_t /*_SYS_MEM_*/ s_debug_sendsign/**/sZeroInstall;
s_u8_t _SYS_MEM_ s_debug_sendtype/**/sZeroInstall;
s_u8_t _SYS_MEM_ s_debug_recvlen/**/sZeroInstall;
char * _XDATA_MEM_ s_debug_recvptr;/*
char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
#endif*/
m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign = SYSCFG_TASKMGR_AUTOSTART;
char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
#endif
s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed/**/sZeroInstall;
s_alarm_ts _DEBUG_MEM_ s_alarm/**/sZeroInstall_Group;
s_fault_ts _DEBUG_MEM_ s_fault/**/sZeroInstall_Group;
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
s_u32_t _DEBUG_MEM_ s_tick_count1/**/sZeroInstall;
s_u32_t _DEBUG_MEM_ s_tick_count2/**/sZeroInstall;
#endif
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
m_pc_t _SYS_MEM_ s_pc/**/sZeroInstall;
#endif
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
s_runtime_ts _DEBUG_MEM_ s_runtime/**/sZeroInstall_Group;
#endif
#endif
/* The Task */
s_u8_t const _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128] =
{
#if (SYSCFG_TASKPICKBITMAP == 1)
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F */
/* 0 */ 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
/* 1 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 2 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
/* 3 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
/* 4 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* 5 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* 6 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* 7 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
#elif (SYSCFG_TASKPICKBITMAP == 2)
/* 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F */
/* 0 */~0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
/* 1 */ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
/* 2 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 3 */ 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
/* 4 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
/* 5 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
/* 6 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
/* 7 */ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
/* 8 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* 9 */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* A */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* B */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* C */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* D */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* E */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
/* F */ 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
#endif
}; /*!< Task pick bitmap */
s_taskctrl_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group; /*!< 任务队列 */
m_tqcount_t _QUE_MEM_ s_task_queue_count/**/sZeroInstall;
#if (SYSCFG_TASKPRIORITY > 64)
s_u8_t _QUE_MEM_ s_task_table_index/**/sZeroInstall; /*!< 任务表索引 */
s_u8_t _QUE_MEM_ s_task_bytes_index[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)]/**/sZeroInstall_Group;
s_u8_t _QUE_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)][8]/**/sZeroInstall_Group;
#elif (SYSCFG_TASKPRIORITY > 8)
s_u8_t _QUE_MEM_ s_task_bytes_index/**/sZeroInstall; /*!< 任务字节索引 */
s_u8_t _QUE_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 8 + !!(SYSCFG_TASKPRIORITY % 8)]/**/sZeroInstall_Group;
#else
s_u8_t _QUE_MEM_ s_task_ready_table/**/sZeroInstall; /*!< 任务就绪表 */
#endif
#if (SYSCFG_SAMEPRISCHEDULE)
s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group;
#elif (SYSCFG_MUTEX == __ENABLED__)
s_u8_t _SYS_MEM_ s_taskpri_ceiling = SYSCFG_BASEPRI_CEILING; /*!< 天花板优先级 */
#endif
#if (MCUCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
s_ecode_t _SYS_MEM_ s_psvfifo_ecode; /*!< 中断挂起服务_FIFO-错误调用返回.错误码 */
#endif
-107
View File
@@ -1,107 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.h
* @brief 系统全局变量声明
* @author 迟凯峰
* @version V2.3.8
* @date 2026.06.15
******************************************************************************/
#ifndef __OS_VAR_H
#define __OS_VAR_H
#include "os_redef.h"
/* The Soft-RTC */
#if (SYSCFG_SOFTRTC == __ENABLED__)
extern s_u8_t const _CONST_MEM_ s_month0day[13];
extern s_u8_t _RTC_MEM_ s_month2day;
extern s_every_ts _SYS_MEM_ s_sign_every;
extern m_rtccount_t _SYS_MEM_ s_rtc_counter;
extern s_rtc_ts _RTC_MEM_ s_rtc;
#endif
/* The Task */
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_startup;
extern s_schesign_tu volatile _SYS_MEM_ s_sign_schedule;
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_delay;
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
extern s_taskstart_ts _SYS_MEM_ s_task_starter;
extern s_taskctrl_tsp _SYS_MEM_ s_task_current;
extern s_taskctrl_tsp s_timer_list[OS_TIMESLOTNUM];
extern s_u8_t _SYS_MEM_ s_timer_pointer;
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
extern s_sharing_t const _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
#endif
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
extern s_u8_t _SYS_MEM_ s_kernellock_counter;
#endif
/* The Safe runtime */
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
extern m_bit_t /*_SYS_MEM_*/ s_timeout_sign;
extern s_taskctrl_tsp _STATIC_MEM_ s_timeout_list;
#endif
/* The Timing Interrupt */
#if (OS_TIMINTTOTAL > 0)
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
#endif
/* The Timing Query */
#if (OS_TIMQRYTOTAL > 0)
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
#endif
/* The Task Message */
#if (SYSCFG_TASKMSG == __ENABLED__)
extern s_u8_t volatile _SYS_MEM_ s_taskmsg_sign;
#endif
/* The Debug Interface */
#if (SYSCFG_DEBUGGING == __ENABLED__)
extern m_bit_t /*_SYS_MEM_*/ s_debug_sendsign;
extern s_u8_t _SYS_MEM_ s_debug_sendtype;
extern s_u8_t _SYS_MEM_ s_debug_recvlen;
extern char * _XDATA_MEM_ s_debug_recvptr;/*
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
extern s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
#endif*/
extern m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign;
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
extern s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
#endif
extern s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed;
extern s_alarm_ts _DEBUG_MEM_ s_alarm;
extern s_fault_ts _DEBUG_MEM_ s_fault;
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
extern s_u32_t _DEBUG_MEM_ s_tick_count1;
extern s_u32_t _DEBUG_MEM_ s_tick_count2;
#endif
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
extern m_pc_t _SYS_MEM_ s_pc;
#endif
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
extern s_runtime_ts _DEBUG_MEM_ s_runtime;
#endif
#endif
/* The Task */
extern s_u8_t const _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128];
extern s_taskctrl_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
extern m_tqcount_t _QUE_MEM_ s_task_queue_count;
#if (SYSCFG_TASKPRIORITY > 64)
extern s_u8_t _QUE_MEM_ s_task_table_index;
extern s_u8_t _QUE_MEM_ s_task_bytes_index[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)];
extern s_u8_t _QUE_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)][8];
#elif (SYSCFG_TASKPRIORITY > 8)
extern s_u8_t _QUE_MEM_ s_task_bytes_index;
extern s_u8_t _QUE_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 8 + !!(SYSCFG_TASKPRIORITY % 8)];
#else
extern s_u8_t _QUE_MEM_ s_task_ready_table;
#endif
#if (SYSCFG_SAMEPRISCHEDULE)
extern s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY];
#elif (SYSCFG_MUTEX == __ENABLED__)
extern s_u8_t _SYS_MEM_ s_taskpri_ceiling;
#endif
#if (MCUCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
extern s_ecode_t _SYS_MEM_ s_psvfifo_ecode;
#endif
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
#endif
-951
View File
File diff suppressed because it is too large Load Diff
-54
View File
@@ -1,54 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_com.h
* @brief 内核公共服务
* @details 在服务层临界区中调用并执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
******************************************************************************/
#ifndef __SV_COM_H
#define __SV_COM_H
#include "os_redef.h"
void sa_add_ready (s_taskctrl_tsp htask);
void sa_remove_ready (s_taskctrl_tsp htask);
void sa_insert_taskque (s_taskctrl_tsp htask);
void sa_remove_taskque (s_taskctrl_tsp htask);
void sa_insert_blocklist (s_taskctrl_tsp *h2task);
void sa_remove_blocklist (s_taskctrl_tsp htask);
void sa_insert_timerlist (s_taskctrl_tsp htask, s_delay_t tick);
void sa_remove_timerlist (s_taskctrl_tsp htask);
void sa_block_to_float (s_taskctrl_tsp htask);
void sa_float_to_block (s_taskctrl_tsp htask);
void sa_block_to_ready (s_taskctrl_tsp htask);
void sa_resume_task (s_taskctrl_tsp htask);
void sa_suspend_task (s_taskctrl_tsp htask);
void sa_stop_task (s_taskctrl_tsp htask);
void sa_free_task (s_taskctrl_tsp htask);
void sa_delete_task (s_taskctrl_tsp htask);
void sa_reset_task (s_taskctrl_tsp htask, s_u8_t status);
void sa_clear_block (s_taskctrl_tsp htask);
void sa_set_block (s_taskctrl_tsp htask, s_delay_t tick);
void sa_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
void sc_clear_delay (void);
s_ecode_t sc_resume_task (s_taskctrl_tsp htask);
s_ecode_t sc_suspend_task (s_taskctrl_tsp htask);
s_ecode_t sc_delete_task (s_taskctrl_tsp htask);
s_ecode_t sc_reset_task (s_taskctrl_tsp htask, s_u8_t status);
s_ecode_t sc_clear_block (s_taskctrl_tsp htask);
s_ecode_t sc_set_block (s_taskctrl_tsp htask, s_delay_t tick);
s_ecode_t sc_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
void sc_write_binary (s_binary_tsp hbin, bool value);
void sc_give_semaph (s_semaph_tsp hsem);
void sc_send_fetion (s_tionbox_tsp htbox, m_fetion_t tion);
void sc_send_mail (s_mailbox_tsp hmbox, void *mail);
s_ecode_t sc_send_msg (s_msgque_tsp hque, void *msg);
void *sc_recv_msg_staque (s_staque_tsp hque);
void *sc_recv_msg_dynque (s_dynque_tsp hque);
void sc_timint (s_u8_t tmid, s_timint_t tick);
void sc_timqry (s_u8_t tmid, s_timqry_t tick);
#endif
-308
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
-189
View File
@@ -1,189 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_fifo.h
* @brief 中断FIFO服务-调用宏
* @details 仅在用户中断中调用,而后挂起到 PendSV中断 中执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
******************************************************************************/
#ifndef __SV_INT_FIFO_H
#define __SV_INT_FIFO_H
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 中断FIFO服务
\brief 在用户中断中调用但不在本地执行,而是把服务的相关内容写入到局部的结构体中,
再把结构体指针入 PendSV_FIFO,再触发 PendSV,而后在 PendSV中断 中执行服务。
@{
*//**
\ingroup 中断FIFO服务
\defgroup 中断FIFO服务-调用宏
@{
*/
/** 清除就绪延时 */
#define sIPS_ClearDelay() \
do{ \
static sp_svid_ts u_psv = {OS_SVID_CLEARDELAY}; \
mPendSV_FIFOLoad(); \
}while(false)
/** 恢复任务 */
#define sIPS_ResumeTask(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_RESUMETASK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad(); \
}while(false)
/** 挂起任务 */
#define sIPS_SuspendTask(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_SUSPENDTASK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad(); \
}while(false)
/** 删除任务 */
#define sIPS_DeleteTask(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_DELETETASK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad(); \
}while(false)
/** 重置任务 */
#define sIPS_ResetTask(_htask, _status) \
do{ \
static sp_taskrst_ts u_psv = {OS_SVID_RESETTASK, OS_NULL, _status}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad(); \
}while(false)
/** 清除阻塞(状态)*/
#define sIPS_ClearBlock(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_CLEARBLOCK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad(); \
}while(false)
/** 设置阻塞(时间)*/
#define sIPS_SetBlock(_htask, _tick) \
do{ \
static sp_blocktime_ts u_psv = {OS_SVID_SETBLOCK, OS_NULL, _tick}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad(); \
}while(false)
/** 设置任务优先级 */
#define sIPS_SetTaskPri(_htask, _npri) \
do{ \
static sp_taskpri_ts u_psv = {OS_SVID_SETTASKPRI, OS_NULL, _npri}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad(); \
}while(false)
/** 写二值信号量 */
#define sIPS_WriteBin(_bin, _value) \
do{ \
static sp_binary_ts u_psv = {OS_SVID_WRITEBINARY, &_bin, _value}; \
mPendSV_FIFOLoad(); \
}while(false)
/** 给予计数信号量 */
#define sIPS_GiveSem(_sem) \
do{ \
static sp_semaph_ts u_psv = {OS_SVID_GIVESEMAPH, &_sem}; \
mPendSV_FIFOLoad(); \
}while(false)
/** 发送飞信 */
#define sIPS_SendFetion(_tbox, _tion) \
do{ \
static sp_tionbox_ts u_psv = {OS_SVID_SENDFETION, &_tbox, 0}; \
u_psv.tion = _tion; \
mPendSV_FIFOLoad(); \
}while(false)
/** 发送邮件 */
#define sIPS_SendMail(_mbox, _mail) \
do{ \
static sp_mailbox_ts u_psv = {OS_SVID_SENDMAIL, &_mbox, OS_NULL}; \
u_psv.mail = _mail; \
mPendSV_FIFOLoad(); \
}while(false)
/** 发送消息 */
#define sIPS_SendMsg(_que, _msg) \
do{ \
static sp_msgque_ts u_psv = {OS_SVID_SENDMSG, (s_msgque_tsp)&_que, OS_NULL}; \
u_psv.msg = _msg; \
mPendSV_FIFOLoad(); \
}while(false)
/** 定时中断 */
#define sIPS_TimInt(_tmid, _tick) \
do{ \
static sp_timint_ts u_psv = {OS_SVID_TIMINT, _tmid, 0}; \
u_psv.tick = _tick; \
mPendSV_FIFOLoad(); \
}while(false)
/** 定时查询 */
#define sIPS_TimQry(_tmid, _tick) \
do{ \
static sp_timqry_ts u_psv = {OS_SVID_TIMQRY, _tmid, 0}; \
u_psv.tick = _tick; \
mPendSV_FIFOLoad(); \
}while(false)
/** 清除标志组 */
#define sIPS_ClearFlagGroup(_group) \
do{ \
static sp_group_ts u_psv = {OS_SVID_WRITEGROUP, (void *)&_group, -sizeof(_group), ~0}; \
mPendSV_FIFOLoad(); \
}while(false)
/** 写多标志位 */
#define sIPS_WriteFlagBits(_group, _sign, _nbit) \
do{ \
static sp_group_ts u_psv = {OS_SVID_WRITEGROUP, (void *)&_group, _sign##sizeof(_group), 0}; \
u_##_group##_ts u_grp; \
miWriteFlagBits(); \
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp = false : MCUCFG_TERNARYMASK \
sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp = false : MCUCFG_TERNARYMASK \
sizeof(u_grp) == 4 ? *(s_u32_t *)&u_grp = false : false; \
siWriteFlagBits_##_nbit(
/** 全局变量写访问 */
#define sIPS_WriteGVar(_gp, _lp, _size) \
do{ \
static sp_gvar_ts u_psv = {OS_SVID_WRITEGVAR, _gp, _lp, _size}; \
mPendSV_FIFOLoad(); \
}while(false)
/** 挂起服务调用 */
#define sIPS_PendSVC(_fp) \
do{ \
static sp_pendsvc_ts u_psv = {OS_SVID_PENDSVC, _fp}; \
mPendSV_FIFOLoad(); \
}while(false)
/** 设置时间 */
#define sIPS_SetTime(_t) \
do{ \
static m_rtccount_t const _c = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
iWriteGAry(&s_rtc, _t, sizeof(s_rtc)); \
iWriteGVar(s_rtc_counter, _c); \
}while(false)
/** @} */
/** @} */
/** @} */
#endif
-146
View File
@@ -1,146 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_loc.c
* @brief 中断本地服务
* @details 在用户中断中调用并直接在本地执行。
* @author 迟凯峰
* @version V2.4.2
* @date 2026.07.04
******************************************************************************/
#include "os_var.h"
#include "sv_com.h"
#if (SYSCFG_MCUCORE == 8051)
#pragma NOAREGS /* 相对寄存器访问 for C51 */
#endif
/**
@addtogroup 中断本地服务
@{
*/
#if (SYSCFG_BINARY == __ENABLED__)
/**
\brief 获取二值信号量
\param[in] hbin 二值信号量句柄
\return 结果 [true:成功,false:失败]
*/
bool si_take_binary(s_binary_tsp hbin)
{
if(hbin->binary){
hbin->binary = false;
return true;
}
return false;
}
#endif
#if (SYSCFG_FETION == __ENABLED__)
/**
\brief 接收飞信
\param[in] htbox 信箱句柄
\return 飞信数据 [false:失败]
*/
m_fetion_t si_recv_fetion(s_tionbox_tsp htbox)
{
m_fetion_t tion = htbox->tion;
htbox->tion = false;
return tion;
}
#endif
#if (SYSCFG_MAILBOX == __ENABLED__)
/**
\brief 接收邮件
\param[in] hmbox 邮箱句柄
\return 邮件指针 [NULL:失败]
*/
void *si_recv_mail(s_mailbox_tsp hmbox)
{
if(hmbox->flag){
hmbox->flag = false;
return hmbox->mail;
}
return OS_NULL;
}
#endif
#if (SYSCFG_MSGQUEUE == __ENABLED__) && (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
#if (SYSCFG_MCUCORE == 8051)
/**
\brief 获取队列互斥量
\details 获取队列访问权限 for C51接收消息。
\param[in] hque 队列句柄
\return 结果 [true:成功,false:失败]
*/
bool si_take_quemut(s_msgque_tsp hque)
{
if(!hque->lock) return false;
hque->lock = false;
if(hque->type == __DYNAMIC__){
#if (SYSCFG_DEBUGGING == __ENABLED__)
s_fault.error_recvmsg_int = true;
#endif
}
else if(!hque->counter);
else return true;
hque->lock = true;
return false;
}
/**
\brief 归还并返回
\details 归还队列互斥量并返回消息指针 for C51接收消息。
\param[out] mut 队列互斥量指针
\param[in] msg 消息指针
\return 消息指针 [NULL:失败]
*/
static void *_back_ret_(bool _STATIC_MEM_ *mut, void *msg)
{
*mut = true;
return msg;
}
/**
\brief C51接收消息
\param[in] hque 队列句柄
\return 消息指针 [NULL:失败]
*/
void *si_recv_msg_c51(s_msgque_tsp hque)
{
void *msg = sc_recv_msg_staque((s_staque_tsp)hque);
return _back_ret_((bool *)&hque->lock, msg);
}
#else
/**
\brief 非51接收消息
\param[in] hque 队列句柄
\return 消息指针 [NULL:失败]
*/
void *si_recv_msg_n51(s_msgque_tsp hque)
{
void *msg = OS_NULL;
if(!hque->lock) return OS_NULL;
hque->lock = false;
__mx_MMB();
if(hque->type == __DYNAMIC__){
#if (SYSCFG_DEBUGGING == __ENABLED__)
s_fault.error_recvmsg_int = true;
#endif
}
else if(hque->counter){
msg = sc_recv_msg_staque((s_staque_tsp)hque);
}
__mx_MMB();
hque->lock = true;
return msg;
}
#endif
#endif
/** @} */
-60
View File
@@ -1,60 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_loc.h
* @brief 中断本地服务
* @details 在用户中断中调用并直接在本地执行。
* @author 迟凯峰
* @version V2.4.2
* @date 2026.07.04
******************************************************************************/
#ifndef __SV_INT_LOC_H
#define __SV_INT_LOC_H
#include "os_redef.h"
bool si_take_binary (s_binary_tsp hbin);
bool si_take_quemut (s_msgque_tsp hque);
void *si_recv_msg_c51(s_msgque_tsp hque);
void *si_recv_msg_n51(s_msgque_tsp hque);
void *si_recv_mail (s_mailbox_tsp hmbox);
m_fetion_t si_recv_fetion (s_tionbox_tsp htbox);
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 中断本地服务
\brief 在用户中断中调用并直接在本地执行的服务。
@{
*/
#define sISV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
#define sISV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
#define sISV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
#if (SYSCFG_MCUCORE == 8051)
#define sISV_RecvMsg(que) (si_take_quemut((s_msgque_tsp)&que) ? si_recv_msg_c51((s_msgque_tsp)&que) : OS_NULL) /*!< C51接收消息 */
#else
#define sISV_RecvMsg(que) si_recv_msg_n51((s_msgque_tsp)&que) /*!< 非51接收消息 */
#endif
/** 归还二值信号量 */
#define sISV_BackBin(bin) \
do{ \
__mx_MMB(); \
bin.binary = true; \
}while(false)
/** 查询标志组 */
#define sISV_QueryFlagGroup(group) \
( \
sizeof(group) == 1 ? *(s_u8_t *)&group ? true : false \
: sizeof(group) == 2 ? *(s_u16_t *)&group ? true : false \
: sizeof(group) == 4 ? *(s_u32_t *)&group ? true : false \
: false \
)
/** @} */
/** @} */
#endif
-39
View File
@@ -1,39 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_pend.h
* @brief PSV服务
* @details 仅在 PendSV中断 中调用并执行。
* @author 迟凯峰
* @version V2.3.7
* @date 2026.06.13
******************************************************************************/
#ifndef __SV_PEND_H
#define __SV_PEND_H
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup PSV服务
\brief 仅在 PendSV中断 中调用并执行的服务。
包括通过挂起服务调用(iPendSVC)间接调用,在挂起服务钩子(pendsv_hook)中调用。
如果通过挂起服务调用(iPendSVC)间接调用,就是 FIFO服务;
如果通过挂起服务钩子(pendsv_hook) 调用,就是 FIAG服务。
@{
*/
#define sPSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
#define sPSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
#define sPSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
#define sPSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
#define sPSV_ResetTask(htask, status) sc_reset_task(htask, status)/*!< 重置任务 */
#define sPSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞(状态)*/
#define sPSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞(时间)*/
#define sPSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
#define sPSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
/** @} */
/** @} */
#endif
-843
View File
File diff suppressed because it is too large Load Diff
-456
View File
File diff suppressed because it is too large Load Diff
-70
View File
@@ -1,70 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_tick.c
* @brief 滴答服务
* @details 仅在 SysTick中断 中调用并执行。
* @author 迟凯峰
* @version V2.4.2
* @date 2026.07.04
******************************************************************************/
#include "os_var.h"
#include "sv_com.h"
/**
@addtogroup 滴答服务
@{
*/
#if (SYSCFG_SEMAPHORE == __ENABLED__)
/**
\brief 获取计数信号量
\param[in] hsem 计数信号量句柄
\return 结果
\retval false 失败
\retval true 成功
*/
bool st_take_semaph(s_semaph_tsp hsem) MCUCFG_OSIT_ATTRIBUTE
{
s_semaph_t counter = hsem->counter;
if(counter){
hsem->counter = counter - 1;
return true;
}
return false;
}
#endif
#if (SYSCFG_MSGQUEUE == __ENABLED__)
/**
\brief 接收消息
\param[in] hque 队列句柄
\return 消息指针
\retval NULL 无消息
*/
void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
{
void *msg = OS_NULL;
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
hque->lock = false;
__mx_MMB();
#endif
if(hque->counter){
if(hque->type == __DYNAMIC__){
msg = sc_recv_msg_dynque((s_dynque_tsp)hque);
}
else{
msg = sc_recv_msg_staque((s_staque_tsp)hque);
}
}
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
__mx_MMB();
hque->lock = true;
#endif
return msg;
}
#endif
/** @} */
-98
View File
@@ -1,98 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_tick.h
* @brief 滴答服务
* @details 仅在 SysTick中断 中调用并执行。
* @author 迟凯峰
* @version V2.4.2
* @date 2026.07.04
******************************************************************************/
#ifndef __SV_TICK_H
#define __SV_TICK_H
#include "os_redef.h"
bool st_take_semaph (s_semaph_tsp hsem);
void *st_recv_msg (s_msgque_tsp hque);
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 滴答服务
\brief 仅在 SysTick中断 中调用并执行的服务。
包括直接在 SysTick中断 中调用,在滴答钩子(tick_hook)、定时中断钩子(u_timint_##tmid)、
定时查询钩子(u_timqry_##tmid)、定时查询事件(u_timqryevent_##tmid)中调用。
@{
*/
#define sTSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
#define sTSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
#define sTSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
#define sTSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
#define sTSV_ResetTask(htask, status) sc_reset_task(htask, status) /*!< 重置任务 */
#define sTSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞 */
#define sTSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞 */
#define sTSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
#define sTSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
#define sTSV_GiveSem(sem) sc_give_semaph(&sem) /*!< 给予计数信号量 */
#define sTSV_SendFetion(tbox, tion) sc_send_fetion(&tbox, tion) /*!< 发送飞信 */
#define sTSV_SendMail(mbox, mail) sc_send_mail(&mbox, mail) /*!< 发送邮件 */
#define sTSV_SendMsg(que, msg) sc_send_msg((s_msgque_tsp)&que, msg)/*!< 发送消息 */
#define sTSV_TimInt(tmid, tick) sc_timint(tmid, tick) /*!< 定时中断 */
#define sTSV_TimQry(tmid, tick) sc_timqry(tmid, tick) /*!< 定时查询 */
#define sTSV_TakeSem(sem) st_take_semaph(&sem) /*!< 获取计数信号量 */
#define sTSV_RecvMsg(que) st_recv_msg((s_msgque_tsp)&que) /*!< 接收消息 */
#define sTSV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
#define sTSV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
#define sTSV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
#define sTSV_GetTime(t) s_memcpy(t, &s_rtc, sizeof(s_rtc)) /*!< 获取时间 */
/** 归还二值信号量 */
#define sTSV_BackBin(bin) \
do{ \
__mx_MMB(); \
bin.binary = true; \
}while(false)
/** 发送私信 */
#define sTSV_SendTaskmsg(task) \
s_taskmsg_sign = 1; \
sa_block_to_ready(task); \
u_task_##task
/** 设置时间 */
#define sTSV_SetTime(t) \
do{ \
s_memcpy(&s_rtc, t, sizeof(s_rtc)); \
s_rtc_counter = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
}while(false)
/** 查询标志组 */
#define sTSV_QueryFlagGroup(group) \
( \
sizeof(group) == 1 ? *(s_u8_t *)&group ? true : false \
: sizeof(group) == 2 ? *(s_u16_t *)&group ? true : false \
: sizeof(group) == 4 ? *(s_u32_t *)&group ? true : false \
: false \
)
/** 清除标志组 */
#define sTSV_ClearFlagGroup(group) \
do{ \
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARYMASK \
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARYMASK \
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
}while(false)
/** 写多标志位 */
#define sTSV_WriteFlagBits(group, value, nbit) \
stWriteFlagBits_##nbit(group, value,
/** @} */
/** @} */
#endif
-2103
View File
File diff suppressed because it is too large Load Diff
-297
View File
File diff suppressed because it is too large Load Diff