update CosyOS-内核文件.

Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
This commit is contained in:
零中断延迟的RTOS
2025-06-17 08:34:46 +00:00
committed by Gitee
parent 43d06f9a62
commit c37c4f00a0
9 changed files with 3364 additions and 0 deletions

204
System/os_api.h Normal file
View File

@@ -0,0 +1,204 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_api.h
* @brief 系统内核专用API
* @author 迟凯峰
* @version V1.2.2
* @date 2025.06.17
******************************************************************************/
#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(s_timint_handle[tmid]->hookorhand.hand, OS_STATUS_SUSPENDED)
/** 启动定时查询任务 */
#define sStartTask_TimQry(tmid) \
sUSV_StartTask(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 sUpdateCopy(code) \
do{ \
s_sign_updatecopy = true; \
code; \
s_sign_updatecopy = false; \
}while(false)
/*
* 事件标志组 - 写标志位
*/
#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)
#endif

130
System/os_debug.c Normal file
View File

@@ -0,0 +1,130 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_debug.c
* @brief DEBUG接口
* @details DEBUG接口串口发送和接收解析。
* @author 迟凯峰
* @version V1.2.5
* @date 2025.06.17
******************************************************************************/
#include "os_var.h"
#if SYSCFG_DEBUGGING == __ENABLED__
#include "os_api.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
#include <string.h>
#if MCUCFG_ISA != __ARM__
/**
\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;
}
}
#else
#define _atoi_ atoi
#endif
/**
\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_strcmp(p, "taskmgr\r\n")){
s_sign_taskmgr = true;
s_taskmgr_upspeed = 0;
s_timqry_handle[OS_TMID_TASKMGR]->timer = s_timqry_handle[OS_TMID_TASKMGR]->reload;
}
else if(len == 6 && !s_strcmp(p, "exit\r\n")){
s_sign_taskmgr = 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_strcmp(mptr + i, "\r\n")){
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
}
#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

736
System/os_handler.c Normal file

File diff suppressed because it is too large Load Diff

737
System/os_redef.h Normal file

File diff suppressed because it is too large Load Diff

607
System/os_taskmgr.c Normal file

File diff suppressed because it is too large Load Diff

133
System/os_var.c Normal file
View File

@@ -0,0 +1,133 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.c
* @brief 系统全局变量定义
* @author 迟凯峰
* @version V1.2.6
* @date 2025.06.17
******************************************************************************/
#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_u8_t _SYS_MEM_ s_sign_setrtc/**/sZeroInstall; /*!< 设置RTC信号 */
s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC正本 */
#if SYSCFG_SOFTRTC_INTGET == __ENABLED__
s_rtc_ts _RTC_MEM_ s_rtc_copy = {SYSCFG_MANUFACTUREDATE}; /*!< RTC副本 */
#endif
#endif
/* The Task */
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_code = 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 _SYS_MEM_ s_list_timer = OS_VOID; /*!< 定时器链表 */
#if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__
#if SYSCFG_TIMESHARINGMODE == 2
const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY] = {SYSCFG_CUSTOMTIMESHARING}; /*!< 自定义时间片 -> 时间片数组 */
#endif
#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_sign_timeout/**/sZeroInstall; /*!< 超时信号 */
s_tasknode_tsp _SYS_MEM_ s_list_timeout = OS_VOID; /*!< 超时链表 */
#endif
/* The Timing Interrupt */
#if OS_TIMINTTOTAL
s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL]; /*!< 定时中断句柄 */
#endif
/* The Timing Query */
#if OS_TIMQRYTOTAL
s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL]; /*!< 定时查询句柄 */
#endif
/* The Global Variable Accessor */
m_bit_t /*_SYS_MEM_*/ s_sign_updatecopy/**/sZeroInstall; /*!< 更新副本信号 */
/* The Debug Interface */
#if SYSCFG_DEBUGGING == __ENABLED__
m_bit_t /*_SYS_MEM_*/ s_sign_debugsend/**/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_sign_taskmgr = 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

108
System/os_var.h Normal file
View File

@@ -0,0 +1,108 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.h
* @brief 系统全局变量声明
* @author 迟凯峰
* @version V1.2.6
* @date 2025.06.17
******************************************************************************/
#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_u8_t _SYS_MEM_ s_sign_setrtc;
extern s_every_ts _SYS_MEM_ s_sign_every;
extern s_rtc_ts _RTC_MEM_ s_rtc;
#if SYSCFG_SOFTRTC_INTGET == __ENABLED__
extern s_rtc_ts _RTC_MEM_ s_rtc_copy;
#endif
#endif
/* The Task */
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_code;
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 _SYS_MEM_ s_list_timer;
#if SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__
#if SYSCFG_TIMESHARINGMODE == 2
extern const s_sharing_t _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
#endif
#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_sign_timeout;
extern s_tasknode_tsp _SYS_MEM_ s_list_timeout;
#endif
/* The Timing Interrupt */
#if OS_TIMINTTOTAL
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
#endif
/* The Timing Query */
#if OS_TIMQRYTOTAL
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
#endif
/* The Global Variable Accessor */
extern m_bit_t /*_SYS_MEM_*/ s_sign_updatecopy;
/* The Debug Interface */
#if SYSCFG_DEBUGGING == __ENABLED__
extern m_bit_t /*_SYS_MEM_*/ s_sign_debugsend;
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_sign_taskmgr;
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
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
#endif

665
System/sv_com.c Normal file

File diff suppressed because it is too large Load Diff

44
System/sv_com.h Normal file
View File

@@ -0,0 +1,44 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_com.h
* @brief 系统内核专用API
* @author 迟凯峰
* @version V1.2.3
* @date 2025.06.17
******************************************************************************/
#ifndef __SV_COM_H
#define __SV_COM_H
#include "os_redef.h"
void sv_insert_taskque (s_tasknode_tsp htask);
void sv_remove_taskque (s_tasknode_tsp htask);
void sv_add_ready (s_tasknode_tsp htask);
void sv_remove_ready (s_tasknode_tsp htask);
void sv_free_task (s_tasknode_tsp htask);
void sv_resume_task (s_tasknode_tsp htask);
void sv_suspend_task (s_tasknode_tsp htask);
void sv_stop_task (s_tasknode_tsp htask);
void sv_delete_task (s_tasknode_tsp htask);
void sv_clear_block (s_tasknode_tsp htask);
void sv_set_block (s_tasknode_tsp htask, s_delay_t tick);
void sv_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
void sv_remove_blocklist (s_tasknode_tsp htask);
void sv_insert_blocklist (s_tasknode_tsp *h2task);
void sv_block_to_ready (s_tasknode_tsp *h2task);
void sv_block_to_float (s_tasknode_tsp htask);
void sv_float_to_block (s_tasknode_tsp htask);
void sv_insert_timerlist (void);
void sv_give_binary (s_binary_tsp hbin);
void sv_give_semaph (s_semaph_tsp hsem);
void sv_send_fetion (s_tionbox_tsp htbox, m_fetion_t tion);
void sv_send_mail (s_mailbox_tsp hmbox, void *mail);
s_ecode_t sv_send_msg (s_msgque_tsp hque, void *msg);
void *sv_recv_msg_staque (s_staque_tsp hque);
void *sv_recv_msg_dynque (s_dynque_tsp hque);
void sv_timint (s_u8_t tmid, s_timint_t tick);
void sv_timqry (s_u8_t tmid, s_timqry_t tick);
void sv_clear_delay (void);
void sv_update_rtccopy (void);
#endif