update 内核文件.

Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
零中断延迟的RTOS
2026-02-01 18:58:41 +00:00
committed by Gitee
parent df990b7b7e
commit ddbec84cbc
14 changed files with 3461 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file CosyOS.H
* @brief 系统链接头文件
* @details 用户的各个c文件中应包含此文件。
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#ifndef __COSYOS_H
#define __COSYOS_H
#include "os_var.h"
#include "os_api.h"
#include "sv_com.h"
#include "sv_create.h"
#include "sv_task.h"
#include "sv_tick.h"
#include "sv_int_loc.h"
#include "sv_int_pend.h"
#include "sv_int_pend_fifo.h"
#include "ur_api.h"
#include "ur_eapi.h"
#endif
+313
View File
@@ -0,0 +1,313 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_api.h
* @brief 系统内核专用API
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#ifndef __OS_API_H
#define __OS_API_H
/*
* 引用.标准库函数
*/
#define s_init_mempool init_mempool
#define s_malloc malloc
#define s_calloc calloc
#define s_realloc realloc
#define s_free free
#define s_memcpy memcpy
#define s_memcmp memcmp
#define s_strcpy strcpy
#define s_strcmp strcmp
#define s_strlen strlen
/*
* 操作.定时中断/查询
*/
/** 启动定时中断任务 */
#define sStartTask_TimInt(tmid) \
sUSV_StartTask_0(s_timint_handle[tmid]->hookorhand.hand, OS_STATUS_SUSPENDED)
/** 启动定时查询任务 */
#define sStartTask_TimQry(tmid) \
sUSV_StartTask_0(s_timqry_handle[tmid]->hookorhand.hand, OS_STATUS_SUSPENDED)
/** 恢复定时中断任务 */
#define sResumeTask_TimInt(tmid) \
sTSV_ResumeTask(*(s_timint_handle[tmid]->hookorhand.hand)->dualhandle)
/** 恢复定时查询任务 */
#define sResumeTask_TimQry(tmid) \
sTSV_ResumeTask(*(s_timqry_handle[tmid]->hookorhand.hand)->dualhandle)
/** 调用定时中断钩子 */
#define sCallHook_TimInt(tmid) \
(*s_timint_handle[tmid]->hookorhand.hook)()
/** 调用定时查询钩子 */
#define sCallHook_TimQry(tmid) \
(*s_timqry_handle[tmid]->hookorhand.hook)()
/*
* 事件标志组 - 写标志位
*/
#define stWriteFlagBits_1(g, v, b0) \
g.b0 = v
#define stWriteFlagBits_2(g, v, b0, b1) \
g.b0 = g.b1 = v
#define stWriteFlagBits_3(g, v, b0, b1, b2) \
g.b0 = g.b1 = g.b2 = v
#define stWriteFlagBits_4(g, v, b0, b1, b2, b3) \
g.b0 = g.b1 = g.b2 = g.b3 = v
#define stWriteFlagBits_5(g, v, b0, b1, b2, b3, b4) \
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = v
#define stWriteFlagBits_6(g, v, b0, b1, b2, b3, b4, b5) \
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = g.b5 = v
#define stWriteFlagBits_7(g, v, b0, b1, b2, b3, b4, b5, b6) \
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = g.b5 = g.b6 = v
#define stWriteFlagBits_8(g, v, b0, b1, b2, b3, b4, b5, b6, b7) \
g.b0 = g.b1 = g.b2 = g.b3 = g.b4 = g.b5 = g.b6 = g.b7 = v
#define suWriteFlagBits_1(g, v, b0) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_1(g, v, b0); \
su_kernel_unlocks(); \
}while(false)
#define suWriteFlagBits_2(g, v, b0, b1) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_2(g, v, b0, b1); \
su_kernel_unlocks(); \
}while(false)
#define suWriteFlagBits_3(g, v, b0, b1, b2) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_3(g, v, b0, b1, b2); \
su_kernel_unlocks(); \
}while(false)
#define suWriteFlagBits_4(g, v, b0, b1, b2, b3) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_4(g, v, b0, b1, b2, b3); \
su_kernel_unlocks(); \
}while(false)
#define suWriteFlagBits_5(g, v, b0, b1, b2, b3, b4) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_5(g, v, b0, b1, b2, b3, b4); \
su_kernel_unlocks(); \
}while(false)
#define suWriteFlagBits_6(g, v, b0, b1, b2, b3, b4, b5) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_6(g, v, b0, b1, b2, b3, b4, b5); \
su_kernel_unlocks(); \
}while(false)
#define suWriteFlagBits_7(g, v, b0, b1, b2, b3, b4, b5, b6) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_7(g, v, b0, b1, b2, b3, b4, b5, b6); \
su_kernel_unlocks(); \
}while(false)
#define suWriteFlagBits_8(g, v, b0, b1, b2, b3, b4, b5, b6, b7) \
do{ \
su_kernel_locks(); \
stWriteFlagBits_8(g, v, b0, b1, b2, b3, b4, b5, b6, b7); \
su_kernel_unlocks(); \
}while(false)
#define siWriteFlagBits_1(b0) \
stWriteFlagBits_1(u_grp, true, b0); \
siWriteFlagBits()
#define siWriteFlagBits_2(b0, b1) \
stWriteFlagBits_2(u_grp, true, b0, b1); \
siWriteFlagBits()
#define siWriteFlagBits_3(b0, b1, b2) \
stWriteFlagBits_3(u_grp, true, b0, b1, b2); \
siWriteFlagBits()
#define siWriteFlagBits_4(b0, b1, b2, b3) \
stWriteFlagBits_4(u_grp, true, b0, b1, b2, b3); \
siWriteFlagBits()
#define siWriteFlagBits_5(b0, b1, b2, b3, b4) \
stWriteFlagBits_5(u_grp, true, b0, b1, b2, b3, b4); \
siWriteFlagBits()
#define siWriteFlagBits_6(b0, b1, b2, b3, b4, b5) \
stWriteFlagBits_6(u_grp, true, b0, b1, b2, b3, b4, b5); \
siWriteFlagBits()
#define siWriteFlagBits_7(b0, b1, b2, b3, b4, b5, b6) \
stWriteFlagBits_7(u_grp, true, b0, b1, b2, b3, b4, b5, b6); \
siWriteFlagBits()
#define siWriteFlagBits_8(b0, b1, b2, b3, b4, b5, b6, b7) \
stWriteFlagBits_8(u_grp, true, b0, b1, b2, b3, b4, b5, b6, b7); \
siWriteFlagBits()
#define siWriteFlagBits() \
u_psv.value = ( \
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp \
: sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp \
: sizeof(u_grp) == 4 ? *(s_u32_t *)&u_grp \
: 0 \
); \
} \
mPendSV_FIFOLoad(); \
}while(false)
/*
* 私信 - 创建信箱
*/
#define sTaskMsg_Init_1(g) \
tm1##g = tm1_##g
#define sTaskMsg_Init_2(g) \
sTaskMsg_Init_1(g); \
tm2##g = tm2_##g
#define sTaskMsg_Init_3(g) \
sTaskMsg_Init_2(g); \
tm3##g = tm3_##g
#define sTaskMsg_Init_4(g) \
sTaskMsg_Init_3(g); \
tm4##g = tm4_##g
#define sTaskMsg_Init_5(g) \
sTaskMsg_Init_4(g); \
tm5##g = tm5_##g
#define sTaskMsg_Init_6(g) \
sTaskMsg_Init_5(g); \
tm6##g = tm6_##g
#define sTaskMsg_Init_7(g) \
sTaskMsg_Init_6(g); \
tm7##g = tm7_##g
#define sTaskMsg_Init_8(g) \
sTaskMsg_Init_7(g); \
tm8##g = tm8_##g
#define sTaskMsg_Init(n) \
static volatile s_u8_t u_tmrf = 0; \
if(s_taskmsg_sign){ \
u_tmrf = 1; \
sTaskMsg_Init_##n(_); \
if(--s_taskmsg_sign){ \
s_taskmsg_sign = 0; \
su_kernel_unlocks(); \
} \
return; \
} \
else if(u_tmrf == 2){ \
u_tmrf = 0; \
sTaskMsg_Init_##n( ); \
return; \
}
#define sCreateTaskMsg_0_1(m1) \
(m1##__) \
{ \
static m1##_; \
static m1 ; \
sTaskMsg_Init(1); \
do
#define sCreateTaskMsg_0_2(m1, m2) \
(m1##__, m2##__) \
{ \
static m1##_; static m2##_; \
static m1 ; static m2 ; \
sTaskMsg_Init(2); \
do
#define sCreateTaskMsg_0_3(m1, m2, m3) \
(m1##__, m2##__, m3##__) \
{ \
static m1##_; static m2##_; static m3##_; \
static m1 ; static m2 ; static m3 ; \
sTaskMsg_Init(3); \
do
#define sCreateTaskMsg_0_4(m1, m2, m3, m4) \
(m1##__, m2##__, m3##__, m4##__) \
{ \
static m1##_; static m2##_; static m3##_; static m4##_; \
static m1 ; static m2 ; static m3 ; static m4 ; \
sTaskMsg_Init(4); \
do
#define sCreateTaskMsg_0_5(m1, m2, m3, m4, m5) \
(m1##__, m2##__, m3##__, m4##__, m5##__) \
{ \
static m1##_; static m2##_; static m3##_; static m4##_; static m5##_; \
static m1 ; static m2 ; static m3 ; static m4 ; static m5 ; \
sTaskMsg_Init(5); \
do
#define sCreateTaskMsg_0_6(m1, m2, m3, m4, m5, m6) \
(m1##__, m2##__, m3##__, m4##__, m5##__, m6##__) \
{ \
static m1##_; static m2##_; static m3##_; static m4##_; static m5##_; static m6##_; \
static m1 ; static m2 ; static m3 ; static m4 ; static m5 ; static m6 ; \
sTaskMsg_Init(6); \
do
#define sCreateTaskMsg_0_7(m1, m2, m3, m4, m5, m6, m7) \
(m1##__, m2##__, m3##__, m4##__, m5##__, m6##__, m7##__) \
{ \
static m1##_; static m2##_; static m3##_; static m4##_; static m5##_; static m6##_; static m7##_; \
static m1 ; static m2 ; static m3 ; static m4 ; static m5 ; static m6 ; static m7 ; \
sTaskMsg_Init(7); \
do
#define sCreateTaskMsg_0_8(m1, m2, m3, m4, m5, m6, m7, m8) \
(m1##__, m2##__, m3##__, m4##__, m5##__, m6##__, m7##__, m8##__) \
{ \
static m1##_; static m2##_; static m3##_; static m4##_; static m5##_; static m6##_; static m7##_; static m8##_; \
static m1 ; static m2 ; static m3 ; static m4 ; static m5 ; static m6 ; static m7 ; static m8 ; \
sTaskMsg_Init(8); \
do
#define sCreateTaskMsg_1(m1) sCreateTaskMsg_0_1(m1)
#define sCreateTaskMsg_2(m1, m2) sCreateTaskMsg_0_2(m1, m2)
#define sCreateTaskMsg_3(m1, m2, m3) sCreateTaskMsg_0_3(m1, m2, m3)
#define sCreateTaskMsg_4(m1, m2, m3, m4) sCreateTaskMsg_0_4(m1, m2, m3, m4)
#define sCreateTaskMsg_5(m1, m2, m3, m4, m5) sCreateTaskMsg_0_5(m1, m2, m3, m4, m5)
#define sCreateTaskMsg_6(m1, m2, m3, m4, m5, m6) sCreateTaskMsg_0_6(m1, m2, m3, m4, m5, m6)
#define sCreateTaskMsg_7(m1, m2, m3, m4, m5, m6, m7) sCreateTaskMsg_0_7(m1, m2, m3, m4, m5, m6, m7)
#define sCreateTaskMsg_8(m1, m2, m3, m4, m5, m6, m7, m8) sCreateTaskMsg_0_8(m1, m2, m3, m4, m5, m6, m7, m8)
#endif
+22
View File
@@ -0,0 +1,22 @@
/**************************************************************************//**
* @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
+141
View File
@@ -0,0 +1,141 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_debug.c
* @brief DEBUG接口
* @details DEBUG接口,串口发送和接收解析。
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#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_(const char* 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] 任务名称文本 遗产模式:"Debugger",标准/兼容模式:"系统调试器"
\return 无
\note 定时查询任务
*/
#define _taskname "\xCF\xB5\xCD\xB3\xB5\xF7\xCA\xD4\xC6\xF7" /*!< "系统调试器" */
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
+145
View File
@@ -0,0 +1,145 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_def.h
* @brief 初始宏定义
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#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 /*!< 通用的空指针 */
#define OS_VOID ((s_tasknode_tsp)~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 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/0x04sizeof(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_CLEARBLOCK 0x04
#define OS_SVID_SETBLOCK 0x05
#define OS_SVID_SETTASKPRI 0x06
#define OS_SVID_WRITEBINARY 0x07
#define OS_SVID_GIVESEMAPH 0x08
#define OS_SVID_SENDFETION 0x09
#define OS_SVID_SENDMAIL 0x0A
#define OS_SVID_SENDMSG 0x0B
#define OS_SVID_TIMINT 0x0C
#define OS_SVID_TIMQRY 0x0D
#define OS_SVID_WRITEGROUP 0x0E
#define OS_SVID_WRITEGVAR 0x0F
#define OS_SVID_PENDSVC 0x10
#define OS_SVID_END 0x11
/*
* ECODE(错误码)
*/
#define OS_ECODE_NOERROR 0 /*!< 无错误 ............. */
#define OS_ECODE_OVERFLOW_MSGQUEUE 1 /*!< 消息队列溢出 ....... */
#define OS_ECODE_OVERFLOW_TASKQUEUE 2 /*!< 任务队列溢出 ....... */
#define OS_ECODE_OVERFLOW_TASKSTACK 3 /*!< 任务栈溢出 ......... */
#define OS_ECODE_MALLOCFAIL_MSGNODE 4 /*!< 消息节点内存分配失败 */
#define OS_ECODE_MALLOCFAIL_TASKNODE 5 /*!< 任务节点内存分配失败 */
#define OS_ECODE_MALLOCFAIL_TASKSTACK 6 /*!< 任务栈内存分配失败 . */
#define OS_ECODE_TASKSUSPENDED 7 /*!< 任务已挂起 ......... */
#define OS_ECODE_TASKSTOPPED 8 /*!< 任务已停止 ......... */
#define OS_ECODE_TASKNOTSTARTED 9 /*!< 任务未启动/已删除 .. */
#define OS_ECODE_TASKNOTREADY 10 /*!< 任务未就绪 ......... */
#define OS_ECODE_TASKNOTBLOCKED 11 /*!< 任务未阻塞 ......... */
#define OS_ECODE_TASKNOTSUSPENDED 12 /*!< 任务未挂起 ......... */
#define OS_ECODE_TASKPRIUNCHANGED 13 /*!< 任务优先级未改变 ... */
#define OS_ECODE_DONOTKNOW 255 /*!< 未知错误 ........... */
#endif
+680
View File
File diff suppressed because it is too large Load Diff
+33
View File
@@ -0,0 +1,33 @@
/**************************************************************************//**
* @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);
}
+680
View File
File diff suppressed because it is too large Load Diff
+66
View File
@@ -0,0 +1,66 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_starter.c
* @brief 任务启动器(Starter
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#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] 任务名称文本 遗产模式:"Starter",标准/兼容模式:"任务启动器"
\return 无
*/
#define _taskname "\xC8\xCE\xCE\xF1\xC6\xF4\xB6\xAF\xC6\xF7" /*!< "任务启动器" */
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
+49
View File
@@ -0,0 +1,49 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_sysidle.c
* @brief 系统空闲任务(Sysidle
* @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 系统空闲任务
\param[in] 任务名称 Sysidle
\param[in] 任务优先级 0
\param[in] 任务栈大小 SYSCFG_STACKSIZE_SYSIDLE
\param[in] 安全运行时 0
\param[in] 任务名称文本 遗产模式:"Sysidle",标准/兼容模式:"系统空闲"
\return 无
*/
#define _taskname "\xCF\xB5\xCD\xB3\xBF\xD5\xCF\xD0" /*!< "系统空闲" */
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_LOWPOWERMODE == __ENABLED__)
mCosyOS_IDLE();
#endif
OS_NOP(4);
}
}
#undef _taskname
+627
View File
File diff suppressed because it is too large Load Diff
+433
View File
@@ -0,0 +1,433 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_timing.c
* @brief 初始化定时中断、定时查询
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#include "os_var.h"
#if (OS_TIMINTTOTAL > 0 || OS_TIMQRYTOTAL > 0)
#define __EXT_TIMINT(tmid) extern s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid;
#define __EXT_TIMQRY(tmid) extern s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid;
#define __INIT_TIMINT(tmid) s_timint_handle[tmid] = &u_timinthand_##tmid;
#define __INIT_TIMQRY(tmid) s_timqry_handle[tmid] = &u_timqryhand_##tmid;
#if (OS_TIMINTTOTAL > 0)
__EXT_TIMINT(0)
#if (OS_TIMINTTOTAL > 1)
__EXT_TIMINT(1)
#if (OS_TIMINTTOTAL > 2)
__EXT_TIMINT(2)
#if (OS_TIMINTTOTAL > 3)
__EXT_TIMINT(3)
#if (OS_TIMINTTOTAL > 4)
__EXT_TIMINT(4)
#if (OS_TIMINTTOTAL > 5)
__EXT_TIMINT(5)
#if (OS_TIMINTTOTAL > 6)
__EXT_TIMINT(6)
#if (OS_TIMINTTOTAL > 7)
__EXT_TIMINT(7)
#if (OS_TIMINTTOTAL > 8)
__EXT_TIMINT(8)
#if (OS_TIMINTTOTAL > 9)
__EXT_TIMINT(9)
#if (OS_TIMINTTOTAL > 10)
__EXT_TIMINT(10)
#if (OS_TIMINTTOTAL > 11)
__EXT_TIMINT(11)
#if (OS_TIMINTTOTAL > 12)
__EXT_TIMINT(12)
#if (OS_TIMINTTOTAL > 13)
__EXT_TIMINT(13)
#if (OS_TIMINTTOTAL > 14)
__EXT_TIMINT(14)
#if (OS_TIMINTTOTAL > 15)
__EXT_TIMINT(15)
#if (OS_TIMINTTOTAL > 16)
__EXT_TIMINT(16)
#if (OS_TIMINTTOTAL > 17)
__EXT_TIMINT(17)
#if (OS_TIMINTTOTAL > 18)
__EXT_TIMINT(18)
#if (OS_TIMINTTOTAL > 19)
__EXT_TIMINT(19)
#if (OS_TIMINTTOTAL > 20)
__EXT_TIMINT(20)
#if (OS_TIMINTTOTAL > 21)
__EXT_TIMINT(21)
#if (OS_TIMINTTOTAL > 22)
__EXT_TIMINT(22)
#if (OS_TIMINTTOTAL > 23)
__EXT_TIMINT(23)
#if (OS_TIMINTTOTAL > 24)
__EXT_TIMINT(24)
#if (OS_TIMINTTOTAL > 25)
__EXT_TIMINT(25)
#if (OS_TIMINTTOTAL > 26)
__EXT_TIMINT(26)
#if (OS_TIMINTTOTAL > 27)
__EXT_TIMINT(27)
#if (OS_TIMINTTOTAL > 28)
__EXT_TIMINT(28)
#if (OS_TIMINTTOTAL > 29)
__EXT_TIMINT(29)
#if (OS_TIMINTTOTAL > 30)
__EXT_TIMINT(30)
#if (OS_TIMINTTOTAL > 31)
__EXT_TIMINT(31)
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#if (OS_TIMQRYTOTAL > 0)
__EXT_TIMQRY(0)
#if (OS_TIMQRYTOTAL > 1)
__EXT_TIMQRY(1)
#if (OS_TIMQRYTOTAL > 2)
__EXT_TIMQRY(2)
#if (OS_TIMQRYTOTAL > 3)
__EXT_TIMQRY(3)
#if (OS_TIMQRYTOTAL > 4)
__EXT_TIMQRY(4)
#if (OS_TIMQRYTOTAL > 5)
__EXT_TIMQRY(5)
#if (OS_TIMQRYTOTAL > 6)
__EXT_TIMQRY(6)
#if (OS_TIMQRYTOTAL > 7)
__EXT_TIMQRY(7)
#if (OS_TIMQRYTOTAL > 8)
__EXT_TIMQRY(8)
#if (OS_TIMQRYTOTAL > 9)
__EXT_TIMQRY(9)
#if (OS_TIMQRYTOTAL > 10)
__EXT_TIMQRY(10)
#if (OS_TIMQRYTOTAL > 11)
__EXT_TIMQRY(11)
#if (OS_TIMQRYTOTAL > 12)
__EXT_TIMQRY(12)
#if (OS_TIMQRYTOTAL > 13)
__EXT_TIMQRY(13)
#if (OS_TIMQRYTOTAL > 14)
__EXT_TIMQRY(14)
#if (OS_TIMQRYTOTAL > 15)
__EXT_TIMQRY(15)
#if (OS_TIMQRYTOTAL > 16)
__EXT_TIMQRY(16)
#if (OS_TIMQRYTOTAL > 17)
__EXT_TIMQRY(17)
#if (OS_TIMQRYTOTAL > 18)
__EXT_TIMQRY(18)
#if (OS_TIMQRYTOTAL > 19)
__EXT_TIMQRY(19)
#if (OS_TIMQRYTOTAL > 20)
__EXT_TIMQRY(20)
#if (OS_TIMQRYTOTAL > 21)
__EXT_TIMQRY(21)
#if (OS_TIMQRYTOTAL > 22)
__EXT_TIMQRY(22)
#if (OS_TIMQRYTOTAL > 23)
__EXT_TIMQRY(23)
#if (OS_TIMQRYTOTAL > 24)
__EXT_TIMQRY(24)
#if (OS_TIMQRYTOTAL > 25)
__EXT_TIMQRY(25)
#if (OS_TIMQRYTOTAL > 26)
__EXT_TIMQRY(26)
#if (OS_TIMQRYTOTAL > 27)
__EXT_TIMQRY(27)
#if (OS_TIMQRYTOTAL > 28)
__EXT_TIMQRY(28)
#if (OS_TIMQRYTOTAL > 29)
__EXT_TIMQRY(29)
#if (OS_TIMQRYTOTAL > 30)
__EXT_TIMQRY(30)
#if (OS_TIMQRYTOTAL > 31)
__EXT_TIMQRY(31)
#if (OS_TIMQRYTOTAL > 32)
__EXT_TIMQRY(32)
#if (OS_TIMQRYTOTAL > 33)
__EXT_TIMQRY(33)
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
void os_init_timing(void)
{
#if (OS_TIMINTTOTAL > 0)
__INIT_TIMINT(0)
#if (OS_TIMINTTOTAL > 1)
__INIT_TIMINT(1)
#if (OS_TIMINTTOTAL > 2)
__INIT_TIMINT(2)
#if (OS_TIMINTTOTAL > 3)
__INIT_TIMINT(3)
#if (OS_TIMINTTOTAL > 4)
__INIT_TIMINT(4)
#if (OS_TIMINTTOTAL > 5)
__INIT_TIMINT(5)
#if (OS_TIMINTTOTAL > 6)
__INIT_TIMINT(6)
#if (OS_TIMINTTOTAL > 7)
__INIT_TIMINT(7)
#if (OS_TIMINTTOTAL > 8)
__INIT_TIMINT(8)
#if (OS_TIMINTTOTAL > 9)
__INIT_TIMINT(9)
#if (OS_TIMINTTOTAL > 10)
__INIT_TIMINT(10)
#if (OS_TIMINTTOTAL > 11)
__INIT_TIMINT(11)
#if (OS_TIMINTTOTAL > 12)
__INIT_TIMINT(12)
#if (OS_TIMINTTOTAL > 13)
__INIT_TIMINT(13)
#if (OS_TIMINTTOTAL > 14)
__INIT_TIMINT(14)
#if (OS_TIMINTTOTAL > 15)
__INIT_TIMINT(15)
#if (OS_TIMINTTOTAL > 16)
__INIT_TIMINT(16)
#if (OS_TIMINTTOTAL > 17)
__INIT_TIMINT(17)
#if (OS_TIMINTTOTAL > 18)
__INIT_TIMINT(18)
#if (OS_TIMINTTOTAL > 19)
__INIT_TIMINT(19)
#if (OS_TIMINTTOTAL > 20)
__INIT_TIMINT(20)
#if (OS_TIMINTTOTAL > 21)
__INIT_TIMINT(21)
#if (OS_TIMINTTOTAL > 22)
__INIT_TIMINT(22)
#if (OS_TIMINTTOTAL > 23)
__INIT_TIMINT(23)
#if (OS_TIMINTTOTAL > 24)
__INIT_TIMINT(24)
#if (OS_TIMINTTOTAL > 25)
__INIT_TIMINT(25)
#if (OS_TIMINTTOTAL > 26)
__INIT_TIMINT(26)
#if (OS_TIMINTTOTAL > 27)
__INIT_TIMINT(27)
#if (OS_TIMINTTOTAL > 28)
__INIT_TIMINT(28)
#if (OS_TIMINTTOTAL > 29)
__INIT_TIMINT(29)
#if (OS_TIMINTTOTAL > 30)
__INIT_TIMINT(30)
#if (OS_TIMINTTOTAL > 31)
__INIT_TIMINT(31)
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#if (OS_TIMQRYTOTAL > 0)
__INIT_TIMQRY(0)
#if (OS_TIMQRYTOTAL > 1)
__INIT_TIMQRY(1)
#if (OS_TIMQRYTOTAL > 2)
__INIT_TIMQRY(2)
#if (OS_TIMQRYTOTAL > 3)
__INIT_TIMQRY(3)
#if (OS_TIMQRYTOTAL > 4)
__INIT_TIMQRY(4)
#if (OS_TIMQRYTOTAL > 5)
__INIT_TIMQRY(5)
#if (OS_TIMQRYTOTAL > 6)
__INIT_TIMQRY(6)
#if (OS_TIMQRYTOTAL > 7)
__INIT_TIMQRY(7)
#if (OS_TIMQRYTOTAL > 8)
__INIT_TIMQRY(8)
#if (OS_TIMQRYTOTAL > 9)
__INIT_TIMQRY(9)
#if (OS_TIMQRYTOTAL > 10)
__INIT_TIMQRY(10)
#if (OS_TIMQRYTOTAL > 11)
__INIT_TIMQRY(11)
#if (OS_TIMQRYTOTAL > 12)
__INIT_TIMQRY(12)
#if (OS_TIMQRYTOTAL > 13)
__INIT_TIMQRY(13)
#if (OS_TIMQRYTOTAL > 14)
__INIT_TIMQRY(14)
#if (OS_TIMQRYTOTAL > 15)
__INIT_TIMQRY(15)
#if (OS_TIMQRYTOTAL > 16)
__INIT_TIMQRY(16)
#if (OS_TIMQRYTOTAL > 17)
__INIT_TIMQRY(17)
#if (OS_TIMQRYTOTAL > 18)
__INIT_TIMQRY(18)
#if (OS_TIMQRYTOTAL > 19)
__INIT_TIMQRY(19)
#if (OS_TIMQRYTOTAL > 20)
__INIT_TIMQRY(20)
#if (OS_TIMQRYTOTAL > 21)
__INIT_TIMQRY(21)
#if (OS_TIMQRYTOTAL > 22)
__INIT_TIMQRY(22)
#if (OS_TIMQRYTOTAL > 23)
__INIT_TIMQRY(23)
#if (OS_TIMQRYTOTAL > 24)
__INIT_TIMQRY(24)
#if (OS_TIMQRYTOTAL > 25)
__INIT_TIMQRY(25)
#if (OS_TIMQRYTOTAL > 26)
__INIT_TIMQRY(26)
#if (OS_TIMQRYTOTAL > 27)
__INIT_TIMQRY(27)
#if (OS_TIMQRYTOTAL > 28)
__INIT_TIMQRY(28)
#if (OS_TIMQRYTOTAL > 29)
__INIT_TIMQRY(29)
#if (OS_TIMQRYTOTAL > 30)
__INIT_TIMQRY(30)
#if (OS_TIMQRYTOTAL > 31)
__INIT_TIMQRY(31)
#if (OS_TIMQRYTOTAL > 32)
__INIT_TIMQRY(32)
#if (OS_TIMQRYTOTAL > 33)
__INIT_TIMQRY(33)
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#endif
#if (SYSCFG_DEBUGGING == __ENABLED__)
#if (SYSCFG_USERTIMQRYINIT - 1)
s_timqry_handle[OS_TMID_DEBUGGER]->timer
= s_timqry_handle[OS_TMID_DEBUGGER]->reload
= 0;
#endif
s_timqry_handle[OS_TMID_TASKMGR]->timer
= s_timqry_handle[OS_TMID_TASKMGR]->reload
= (SYSCFG_TASKMGR_UPSPEED * 1000UL) / SYSCFG_SYSTICK_CYCLE;
#endif
}
#endif
+135
View File
@@ -0,0 +1,135 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.c
* @brief 系统全局变量定义
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#include "os_redef.h"
/* The Soft-RTC */
#if (SYSCFG_SOFTRTC == __ENABLED__)
const s_u8_t _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 */
volatile m_bit_t /*_SYS_MEM_*/ s_sign_startup = true;
volatile s_schesign_tu _SYS_MEM_ s_sign_schedule = {{0, 1}}; /*!< 调度信号 */
volatile m_bit_t /*_SYS_MEM_*/ s_sign_delay/**/sZeroInstall; /*!< 就绪延时信号 */
s_u8_t _SYS_MEM_ s_schedulelock_counter/**/sZeroInstall;/*!< 调度锁嵌套计数器 */
s_ecode_t _SYS_MEM_ s_startup_ecode = OS_ECODE_NOERROR; /*!< 启动任务时,用来异地缓存错误码 */
s_u8_t _SYS_MEM_ s_task_status0 = OS_STATUS_DELETED; /*!< 被启动任务 -> 初始状态 */
s_taskhand_tsp _SYS_MEM_ s_task_starter/**/sZeroInstall; /*!< 被启动任务 -> 装载块句柄 */
s_tasknode_tsp _SYS_MEM_ s_task_current/**/sZeroInstall; /*!< 当前任务句柄 */
s_tasknode_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)
const s_sharing_t _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_tasknode_tsp _SYS_MEM_ s_timeout_list = OS_VOID; /*!< 超时链表 */
#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__)
volatile s_u8_t /*_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 */
const s_u8_t _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_tasknode_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
+109
View File
@@ -0,0 +1,109 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.h
* @brief 系统全局变量声明
* @author 迟凯峰
* @version V2.3.0
* @date 2026.02.01
******************************************************************************/
#ifndef __OS_VAR_H
#define __OS_VAR_H
#include "os_redef.h"
/* The Soft-RTC */
#if (SYSCFG_SOFTRTC == __ENABLED__)
extern const s_u8_t _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 volatile m_bit_t /*_SYS_MEM_*/ s_sign_startup;
extern volatile s_schesign_tu _SYS_MEM_ s_sign_schedule;
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_delay;
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
extern s_ecode_t _SYS_MEM_ s_startup_ecode;
extern s_u8_t _SYS_MEM_ s_task_status0;
extern s_taskhand_tsp _SYS_MEM_ s_task_starter;
extern s_tasknode_tsp _SYS_MEM_ s_task_current;
extern s_tasknode_tsp s_timer_list[OS_TIMESLOTNUM];
extern s_u8_t _SYS_MEM_ s_timer_pointer;
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
extern const s_sharing_t _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_tasknode_tsp _SYS_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 volatile s_u8_t /*_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 const s_u8_t _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128];
extern s_tasknode_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