mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-06 11:51:38 +08:00
204
System/os_api.h
Normal file
204
System/os_api.h
Normal 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
130
System/os_debug.c
Normal 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
736
System/os_handler.c
Normal file
File diff suppressed because it is too large
Load Diff
737
System/os_redef.h
Normal file
737
System/os_redef.h
Normal file
File diff suppressed because it is too large
Load Diff
607
System/os_taskmgr.c
Normal file
607
System/os_taskmgr.c
Normal file
File diff suppressed because it is too large
Load Diff
133
System/os_var.c
Normal file
133
System/os_var.c
Normal 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
108
System/os_var.h
Normal 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
665
System/sv_com.c
Normal file
File diff suppressed because it is too large
Load Diff
44
System/sv_com.h
Normal file
44
System/sv_com.h
Normal 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
|
||||
Reference in New Issue
Block a user