删除文件 System

This commit is contained in:
零中断延迟的RTOS
2025-04-04 05:49:55 +00:00
committed by Gitee
parent 55aefa623a
commit f6407a52dc
30 changed files with 0 additions and 9163 deletions
View File
-202
View File
@@ -1,202 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_api.h
* @brief 系统内核专用API
* @author 迟凯峰
* @version V1.0.1
* @date 2025.02.26
******************************************************************************/
#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_taskhand_tsp)s_timint_handle[tmid]->hookorhand, OS_STATUS_SUSPENDED)
/** 启动定时查询任务 */
#define sStartTask_TimQry(tmid) \
sUSV_StartTask((s_taskhand_tsp)s_timqry_handle[tmid]->hookorhand, OS_STATUS_SUSPENDED)
/** 恢复定时中断任务 */
#define sResumeTask_TimInt(tmid) \
sTSV_ResumeTask(*((s_taskhand_tsp)s_timint_handle[tmid]->hookorhand)->dualhandle)
/** 恢复定时查询任务 */
#define sResumeTask_TimQry(tmid) \
sTSV_ResumeTask(*((s_taskhand_tsp)s_timqry_handle[tmid]->hookorhand)->dualhandle)
/** 调用定时中断钩子 */
#define sCallHook_TimInt(tmid) \
(*(s_voidvoid_tfp)s_timint_handle[tmid]->hookorhand)()
/** 调用定时查询钩子 */
#define sCallHook_TimQry(tmid) \
(*(s_voidvoid_tfp)s_timqry_handle[tmid]->hookorhand)()
/*
* 更新.全局变量副本
*/
#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
-22
View File
@@ -1,22 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_base.h
* @brief 基本数据类型定义
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#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;
#endif
-119
View File
@@ -1,119 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_debug.c
* @brief DEBUG接口
* @details DEBUG接口,串口发送和接收解析。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#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接口,串口接收解析。
\param 无
\return 无
*/
static void _debug_recv_(void)
{
#define hptr s_debug_recvbuff
s_u16_t temp;
char strtmp[8];
char _XDATA_MEM_ *mptr = hptr;
char _XDATA_MEM_ *tptr = hptr + s_strlen(hptr) - 2;
if(!s_strcmp(tptr, "\r\n")){
if(!s_strcmp(hptr, "taskmgr\r\n")){
s_sign_taskmgr = true;
}
else if(!s_strcmp(hptr, "exit\r\n")){
s_sign_taskmgr = false;
}
else if(!s_memcmp(hptr, "taskmgr /s=", 11)){
mptr += 11;
s_memcpy(strtmp, mptr, tptr - mptr);
strtmp[tptr - mptr] = '\0';
temp = _atoi_(strtmp);
if(temp >= 50 && temp <= 5000){
mSysIRQ_Disable;
s_timqry_handle[OS_TMID_TASKMGR]->reload = (1000UL * temp) / SYSCFG_SYSTICKCYCLE;
mSysIRQ_Enable;
}
}
}
}
uCreateTask_TimInt
(
OS_TMID_DEBUGGER, false,
Debugger, SYSCFG_TASKPRIORITY - 2, MCUCFG_STACKSIZE_DEBUGGER, 0, 0
)
{
while(true){
s_debug_recvptr[0] = '\0';
_debug_recv_();
s_debug_recvptr = s_debug_recvbuff;
uSuspendTasking;
}
}
uCreateHook_TimQry(OS_TMID_DEBUGHOOK, s_debug_sendtype, false, debug_hook)
{
if(s_debug_sendtype & OS_DEBUG_SEND_TASKMGR){
s_debug_sendtype &= ~OS_DEBUG_SEND_TASKMGR;
s_debug_sendptr = s_taskmgr_sendbuff;
}/*
else if(s_debug_sendtype & OS_DEBUG_SEND_CMDLINE){
s_debug_sendtype &= ~OS_DEBUG_SEND_CMDLINE;
s_debug_sendptr = s_cmdline_sendbuff;
}*/
SYSCFG_DEBUGSEND;
}
#endif
-129
View File
@@ -1,129 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_def.h
* @brief 初始宏定义
* @author 迟凯峰
* @version V1.0.2
* @date 2025.03.17
******************************************************************************/
#ifndef __OS_DEF_H
#define __OS_DEF_H
#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 __MSP__ 0 /*!< 任务栈模式:MSP模式 .. */
#define __PSP__ 1 /*!< 任务栈模式:PSP模式 .. */
#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_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_FETION 0x40 /*!< 接收飞信阻塞 ............. */
#define OS_BLOCKED_MAIL 0x50 /*!< 接收邮件阻塞 ............. */
#define OS_BLOCKED_MSG 0x60 /*!< 接收消息阻塞 ............. */
/*
* 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_TIMINT 0x07
#define OS_SVID_TIMQRY 0x08
#define OS_SVID_BINARY 0x09
#define OS_SVID_GIVESEM 0x0A
#define OS_SVID_SENDFETION 0x0B
#define OS_SVID_SENDMAIL 0x0C
#define OS_SVID_SENDMSG 0x0D
#define OS_SVID_GROUP 0x0E
#define OS_SVID_GVARWRITE 0x0F
#define OS_SVID_PENDSVC 0x10
#define OS_SVID_SENDSIGN 0x11
#define OS_SVID_END 0x12
/*
* 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
-647
View File
File diff suppressed because it is too large Load Diff
-28
View File
@@ -1,28 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_link.h
* @brief 系统链接头文件
* @details 用户的各个c文件中应包含此文件。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#ifndef __OS_LINK_H
#define __OS_LINK_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_fifo.h"
#include "sv_int_pend_flag.h"
#include "ur_api.h"
#include "ur_eapi.h"
#endif
-38
View File
@@ -1,38 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_main.c
* @brief 主函数
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#include "os_var.h"
#include "os_api.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
/**
\brief 主函数
\param 无
\return 无
\note CosyOS 的主函数是系统托管的,如非必要不建议用户擅自调整及修改。
可在 init_hook 中进行前期的初始化工作,而后在 start_hook 中
启动用户任务。
*/
int main(void)
{
void init_hook(void);
uExternTask(Sysidle);
sCat2Str(SYSCFG_STARTERCREATE, ExternTask(Starter));
#if OS_TIMINTTOTAL || OS_TIMQRYTOTAL
void s_init_timing(void);
s_init_timing();
#endif
init_hook();
mSys_INIT;
uStartTask_Ready(Sysidle);
uStartTask_Ready(Starter);
while(true);
}
-738
View File
File diff suppressed because it is too large Load Diff
-44
View File
@@ -1,44 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_starter.c
* @brief 启动任务(Starter
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#include "os_var.h"
#include "os_api.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
sCat2Str
(
SYSCFG_STARTERCREATE,
CreateTask(Starter, SYSCFG_TASKPRIORITY - (SYSCFG_DEBUGGING ? 4 : 2), MCUCFG_STACKSIZE_STARTER, 0, 0)
)
{
void start_hook(void);
#if OS_TIMINTTOTAL || OS_TIMQRYTOTAL
s_u8_t i;
#if OS_TIMINTTOTAL
i = OS_TIMINTTOTAL;
while(i--){
if(s_timint_handle[i]->hookortask){
sStartTask_TimInt(i);
}
}
#endif
#if OS_TIMQRYTOTAL
i = OS_TIMQRYTOTAL;
while(i--){
if(s_timqry_handle[i]->hookortask){
sStartTask_TimQry(i);
}
}
#endif
#endif
start_hook();
uDeleteTasking;
}
-38
View File
@@ -1,38 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_sysidle.c
* @brief 系统空闲任务(Sysidle
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#include "os_var.h"
#include "os_api.h"
#include "sv_create.h"
#include "sv_task.h"
#include "ur_api.h"
uCreateTask(Sysidle, 0, MCUCFG_STACKSIZE_SYSIDLE, 0, 0)
{
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_sign_timeout = false;
#endif
#if SYSCFG_IDLEHOOK == __ENABLED__
idle_hook();
#endif
#if SYSCFG_LOWPOWERMODE == __ENABLED__
mSys_Idle;
#endif
OS_NOPx2;
}
}
-575
View File
File diff suppressed because it is too large Load Diff
-823
View File
File diff suppressed because it is too large Load Diff
-127
View File
@@ -1,127 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.c
* @brief 系统全局变量定义
* @author 迟凯峰
* @version V1.0.4
* @date 2025.03.06
******************************************************************************/
#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; /*!< 二月有几天?*/
volatile s_every_ts _SYS_MEM_ s_sign_every/**/sZeroInstall_Group; /*!< 每信号 */
s_rtc_ts _RTC_MEM_ s_rtc = {SYSCFG_MANUFACTUREDATE}; /*!< RTC正本 */
#if SYSCFG_GETRTC_INT == __ENABLED__
s_rtc_ts _RTC_MEM_ s_rtc_copy = {SYSCFG_MANUFACTUREDATE}; /*!< RTC副本 */
volatile m_bit_t /*_SYS_MEM_*/ s_sign_rtc/**/sZeroInstall; /*!< 更新RTC副本信号 */
#endif
#endif
/* The Task */
volatile s_schesign_tu _SYS_MEM_ s_sign_schedule = {0, 1}; /*!< 调度信号 */
volatile m_bit_t /*_SYS_MEM_*/ s_sign_ready_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__
volatile 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 */
volatile m_bit_t /*_SYS_MEM_*/ s_sign_updatecopy/**/sZeroInstall; /*!< 更新副本信号 */
/* The Debug Interface */
#if SYSCFG_DEBUGGING == __ENABLED__
volatile m_bit_t /*_SYS_MEM_*/ s_sign_taskmgr = SYSCFG_TASKMGRAUTOSTART;
volatile m_bit_t /*_SYS_MEM_*/ s_sign_debug_send/**/sZeroInstall;
volatile m_bit_t /*_SYS_MEM_*/ s_sign_debug_recv/**/sZeroInstall;
volatile s_u8_t _SYS_MEM_ s_debug_sendtype/**/sZeroInstall;
char _XDATA_MEM_ s_debug_recvbuff[OS_DEBUGRECVBUFFSIZE];/*
char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];*/
char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
char _XDATA_MEM_ * _SYS_MEM_ s_debug_recvptr = s_debug_recvbuff;
char _XDATA_MEM_ * _SYS_MEM_ s_debug_sendptr;
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_counter1/**/sZeroInstall;
s_u32_t _DEBUG_MEM_ s_tick_counter2/**/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 bitmap */
const s_u8_t _CONST_MEM_ s_task_map_mask[8] = {0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80};
const s_u8_t _CONST_MEM_ s_task_map_pick[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
};
#if SYSCFG_TASKPRIORITY > 64
s_u8_t _SYS_MEM_ s_task_table_index/**/sZeroInstall; /*!< 表索引 */
s_u8_t _SYS_MEM_ s_task_bytes_index[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)]/**/sZeroInstall_Group;
s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)][8]/**/sZeroInstall_Group;
#elif SYSCFG_TASKPRIORITY > 8
s_u8_t _SYS_MEM_ s_task_bytes_index/**/sZeroInstall; /*!< 字节索引 */
s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 8 + !!(SYSCFG_TASKPRIORITY % 8)]/**/sZeroInstall_Group;
#else
s_u8_t _SYS_MEM_ s_task_ready_table/**/sZeroInstall; /*!< 任务就绪表 */
#endif
s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group; /*!< 任务队列 */
s_tqcount_t _QUE_MEM_ s_task_queue_count/**/sZeroInstall;
#if SYSCFG_SAMEPRISCHEDULE
s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY]/**/sZeroInstall_Group;
#endif
-102
View File
@@ -1,102 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file os_var.h
* @brief 系统全局变量声明
* @author 迟凯峰
* @version V1.0.3
* @date 2025.03.06
******************************************************************************/
#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 volatile s_every_ts _SYS_MEM_ s_sign_every;
extern s_rtc_ts _RTC_MEM_ s_rtc;
#if SYSCFG_GETRTC_INT == __ENABLED__
extern s_rtc_ts _RTC_MEM_ s_rtc_copy;
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_rtc;
#endif
#endif
/* The Task */
extern volatile s_schesign_tu _SYS_MEM_ s_sign_schedule;
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_ready_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 volatile 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 volatile m_bit_t /*_SYS_MEM_*/ s_sign_updatecopy;
/* The Debug Interface */
#if SYSCFG_DEBUGGING == __ENABLED__
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_taskmgr;
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_debug_send;
extern volatile m_bit_t /*_SYS_MEM_*/ s_sign_debug_recv;
extern volatile s_u8_t _SYS_MEM_ s_debug_sendtype;
extern char _XDATA_MEM_ s_debug_recvbuff[OS_DEBUGRECVBUFFSIZE];/*
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];*/
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
extern char _XDATA_MEM_ * _SYS_MEM_ s_debug_recvptr;
extern char _XDATA_MEM_ * _SYS_MEM_ s_debug_sendptr;
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_counter1;
extern s_u32_t _DEBUG_MEM_ s_tick_counter2;
#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 bitmap */
extern const s_u8_t _CONST_MEM_ s_task_map_mask[8];
extern const s_u8_t _CONST_MEM_ s_task_map_pick[SYSCFG_TASKPICKBITMAP * 128];
#if SYSCFG_TASKPRIORITY > 64
extern s_u8_t _SYS_MEM_ s_task_table_index;
extern s_u8_t _SYS_MEM_ s_task_bytes_index[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)];
extern s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)][8];
#elif SYSCFG_TASKPRIORITY > 8
extern s_u8_t _SYS_MEM_ s_task_bytes_index;
extern s_u8_t _SYS_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 8 + !!(SYSCFG_TASKPRIORITY % 8)];
#else
extern s_u8_t _SYS_MEM_ s_task_ready_table;
#endif
extern s_tasknode_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
extern s_tqcount_t _QUE_MEM_ s_task_queue_count;
#if SYSCFG_SAMEPRISCHEDULE
extern s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY];
#endif
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
#endif
-607
View File
File diff suppressed because it is too large Load Diff
-41
View File
@@ -1,41 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_com.h
* @brief 系统内核专用API
* @author 迟凯峰
* @version V1.0.3
* @date 2025.03.17
******************************************************************************/
#ifndef __SV_COM_H
#define __SV_COM_H
#include "os_redef.h"
void sv_insert_task_queue(s_tasknode_tsp htask);
void sv_remove_task_queue(s_tasknode_tsp htask);
void sv_task_add_ready (s_tasknode_tsp htask);
void sv_task_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_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_block_list(s_tasknode_tsp htask);
void sv_insert_block_list(s_tasknode_tsp *h2task);
void sv_delete_block_list(s_tasknode_tsp *h2task);
void sv_insert_timer_list(void);
void sv_give_binary (s_binary_tsp hbin);
void sv_give_semaphore (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_queue_tsp hque, void *msg);
void *sv_recv_msg_static (ss_queue_tsp hque);
void *sv_recv_msg_dynamic (sd_queue_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
-281
View File
@@ -1,281 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_create.h
* @brief 创建服务
* @details 用于创建 CosyOS 内核对象。
* @author 迟凯峰
* @version V1.0.1
* @date 2025.03.17
******************************************************************************/
#ifndef __SV_CREATE_H
#define __SV_CREATE_H
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 创建服务
\brief 用于创建 CosyOS 内核对象。
@{
*/
/*
* 声明任务
*/
/** 声明静态任务 */
#define sCSV_ExternTask(name) \
void name(void); \
extern s_tasknode_ts u_taskhand_##name; \
extern s_tasknode_tsp u_taskhandle_##name
/** 声明动态任务 */
#define dCSV_ExternTask(name) \
void name(void); \
extern s_taskhand_ts u_taskhand_##name; \
extern s_tasknode_tsp u_taskhandle_##name
/*
* 创建任务
*/
#if SYSCFG_DEBUGGING == __ENABLED__
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 静态创建,启用 DEBUGGING,启用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, #name, srt, u_taskstack_##name, 0}; \
void name(void)
#else /** 静态创建,启用 DEBUGGING,禁用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, #name, u_taskstack_##name, 0}; \
void name(void)
#endif
#else
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 静态创建,禁用 DEBUGGING,启用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, srt, u_taskstack_##name, 0}; \
void name(void)
#else /** 静态创建,禁用 DEBUGGING,禁用 安全运行时 */
#define sCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_ts u_taskhand_##name; \
s_tasknode_tsp u_taskhandle_##name = &u_taskhand_##name; \
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
s_tasknode_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, u_taskstack_##name, 0}; \
void name(void)
#endif
#endif
#if SYSCFG_DEBUGGING == __ENABLED__
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 动态创建,启用 DEBUGGING,启用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, #name, srt}; \
void name(void)
#else /** 动态创建,启用 DEBUGGING,禁用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, #name}; \
void name(void)
#endif
#else
#if SYSCFG_SAFERUNTIME == __ENABLED__
/** 动态创建,禁用 DEBUGGING,启用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name, srt}; \
void name(void)
#else /** 动态创建,禁用 DEBUGGING,禁用 安全运行时 */
#define dCSV_CreateTask(name, pri, tss, srt, res) \
void name(void); \
s_tasknode_tsp u_taskhandle_##name = OS_NULL; \
s_taskhand_ts u_taskhand_##name = {0, pri, tss, &u_taskhandle_##name, name}; \
void name(void)
#endif
#endif
/** 静态创建定时中断任务 */
#define sCSV_CreateTask_TimInt(tmid, arl, name, pri, tss, srt, res) \
s_tasknode_ts u_taskhand_##name; \
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 1, &u_taskhand_##name}; \
sCSV_CreateTask(name, pri, tss, srt, res)
/** 动态创建定时中断任务 */
#define dCSV_CreateTask_TimInt(tmid, arl, name, pri, tss, srt, res) \
s_taskhand_ts u_taskhand_##name; \
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 1, &u_taskhand_##name}; \
dCSV_CreateTask(name, pri, tss, srt, res)
/** 静态创建定时查询任务 */
#define sCSV_CreateTask_TimQry(tmid, event, arl, name, pri, tss, srt, res) \
bool u_timqryevent_##tmid(void) MCUCFG_C51USING {return (event ? true : false);} \
s_tasknode_ts u_taskhand_##name; \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, &u_taskhand_##name, u_timqryevent_##tmid}; \
sCSV_CreateTask(name, pri, tss, srt, res)
/** 动态创建定时查询任务 */
#define dCSV_CreateTask_TimQry(tmid, event, arl, name, pri, tss, srt, res) \
bool u_timqryevent_##tmid(void) MCUCFG_C51USING {return (event ? true : false);} \
s_taskhand_ts u_taskhand_##name; \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, &u_taskhand_##name, u_timqryevent_##tmid}; \
dCSV_CreateTask(name, pri, tss, srt, res)
/*
* 创建钩子
*/
/** 创建定时中断钩子 */
#define sCSV_CreateHook_TimInt(tmid, arl, name) \
void name(void); \
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 0, name}; \
void name(void) MCUCFG_C51USING
/** 创建定时查询钩子 */
#define sCSV_CreateHook_TimQry(tmid, event, arl, name) \
void name(void); \
bool u_timqryevent_##tmid(void) MCUCFG_C51USING {return (event ? true : false);} \
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 0, name, u_timqryevent_##tmid}; \
void name(void) MCUCFG_C51USING
/*
* 互斥信号量
*/
/** 声明互斥信号量 */
#define sCSV_ExternMut(name) \
extern s_mutex_ts name
/** 创建互斥信号量 */
#define sCSV_CreateMut(name) \
s_mutex_ts name = {OS_NULL, OS_NULL, 0, 0}
/*
* 二值信号量
*/
/** 声明二值信号量 */
#define sCSV_ExternBin(name) \
extern s_binary_ts name
/** 创建二值信号量 */
#define sCSV_CreateBin(name, init) \
s_binary_ts name = {OS_NULL, init}
/*
* 计数信号量
*/
/** 声明计数信号量 */
#define sCSV_ExternSem(name) \
extern s_semaph_ts name
/** 创建计数信号量 */
#define sCSV_CreateSem(name, init, max) \
s_semaph_ts name = {OS_NULL, init, max}
/*
* 飞信
*/
/** 声明信箱 */
#define sCSV_ExternTionbox(name) \
extern s_tionbox_ts name
/** 创建信箱 */
#define sCSV_CreateTionbox(name) \
s_tionbox_ts name = {OS_NULL, 0}
/*
* 邮箱
*/
/** 声明邮箱 */
#define sCSV_ExternMailbox(name) \
extern s_mailbox_ts name
/** 创建邮箱 */
#define sCSV_CreateMailbox(name) \
s_mailbox_ts name = {OS_NULL, false, OS_NULL}
/*
* 消息队列
*/
/** 声明静态队列 */
#define sCSV_ExternQueue_Static(name) \
extern ss_queue_ts name
/** 声明动态队列 */
#define sCSV_ExternQueue_Dynamic(name) \
extern sd_queue_ts name
/** 创建静态队列 */
#define sCSV_CreateQueue_Static(name, mode, len) \
void *u_queue_##name[len]; \
ss_queue_ts name = {OS_NULL, true, 0, __STATIC__, mode, len, u_queue_##name, u_queue_##name + len - 1, u_queue_##name}
/** 创建动态队列 */
#define sCSV_CreateQueue_Dynamic(name, mode, len) \
sd_queue_ts name = {OS_NULL, true, 0, __DYNAMIC__, mode, len, OS_NULL, OS_NULL}
/*
* 事件标志组(必须声明)
*/
/** 声明标志组 */
#define sCSV_ExternFlagGroup(name, bits) \
typedef struct{bits}u_##name##_ts; \
extern volatile u_##name##_ts name
/** 创建标志组 */
#define sCSV_CreateFlagGroup(name) \
volatile u_##name##_ts name
/*
* 线程内存
*/
/** 创建线程内存池 */
#define sCSV_CreateMempool \
static s_thrmem_ts u_thrmem = {OS_NULL, OS_NULL, 0}
/** @} */
/** @} */
#endif
-149
View File
@@ -1,149 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_loc.c
* @brief 中断本地服务
* @details 仅在用户中断中调用,并在本地执行。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#include "os_var.h"
#include "sv_com.h"
#if SYSCFG_MCUCORE == 8051
#pragma NOAREGS /* 相对寄存器访问 for C51 */
#endif
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 中断本地服务
\brief 仅在用户中断中调用,并在本地执行。
@{
*/
#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__
#if SYSCFG_MCUCORE == 8051
/**
\brief 获取队列互斥量
\details 获取队列访问权限 for C51 接收消息。
\param[in] hque 队列句柄
\return 结果 [true:成功,false:失败]
*/
bool si_take_quemut(s_queue_tsp hque)
{
if(!hque->mutex) return false;
hque->mutex = false;
if(hque->type == __DYNAMIC__){
#if SYSCFG_DEBUGGING == __ENABLED__
s_fault.error_recvmsg_int = true;
#endif
}
else if(!hque->counter);
else return true;
hque->mutex = 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_queue_tsp hque)
{
void *msg = sv_recv_msg_static((ss_queue_tsp)hque);
return _back_ret_((bool *)&hque->mutex, msg);
}
#else
/**
\brief 非51 接收消息
\param[in] hque 队列句柄
\return 消息指针 [NULL:失败]
*/
void *si_recv_msg_n51(s_queue_tsp hque)
{
void *msg = OS_NULL;
if(!hque->mutex) return OS_NULL;
hque->mutex = false;
if(hque->type == __DYNAMIC__){
#if SYSCFG_DEBUGGING == __ENABLED__
s_fault.error_recvmsg_int = true;
#endif
}
else if(hque->counter){
msg = sv_recv_msg_static((ss_queue_tsp)hque);
}
hque->mutex = true;
return msg;
}
#endif
#endif
/** @} */
/** @} */
-49
View File
@@ -1,49 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_loc.h
* @brief 中断本地服务
* @details 仅在用户中断中调用,并在本地执行。
* @author 迟凯峰
* @version V1.0.1
* @date 2025.02.18
******************************************************************************/
#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_queue_tsp hque);
void *si_recv_msg_c51(s_queue_tsp hque);
void *si_recv_msg_n51(s_queue_tsp hque);
void *si_recv_mail (s_mailbox_tsp hmbox);
m_fetion_t si_recv_fetion(s_tionbox_tsp htbox);
/**
@addtogroup 中断本地服务
@{
*/
#define sISV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
#define sISV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
#define sISV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
#define sISV_GetTime(t) s_memcpy(t, iWhichGVar_Read ? &s_rtc : &s_rtc_copy, sizeof(s_rtc_ts)) /*!< 获取时间 */
#if SYSCFG_MCUCORE == 8051
#define sISV_RecvMsg(que) (si_take_quemut((s_queue_tsp)&que) ? si_recv_msg_c51((s_queue_tsp)&que) : OS_NULL) /*!< C51 接收消息 */
#else
#define sISV_RecvMsg(que) si_recv_msg_n51((s_queue_tsp)&que) /*!< 非51 接收消息 */
#endif
/** 查询标志组 */
#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
-384
View File
@@ -1,384 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_pend_fifo.c
* @brief 中断挂起服务_FIFO - 执行函数
* @details 仅在 PendSV 中由系统调用并执行。
* @author 迟凯峰
* @version V1.0.1
* @date 2025.02.24
******************************************************************************/
#include "os_var.h"
#if MCUCFG_PENDSVFIFO_DEPTH
#include "os_api.h"
#include "sv_com.h"
#include "sv_int_pend_flag.h"
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 中断挂起服务_FIFO
\brief 在中断中调用的服务,不在本地执行,而是把服务的内容写入局部的结构体中,
再把结构体指针入 PendSV_FIFO,再触发 PendSV,而后在 PendSV 中执行。
@{
*/
/**
\page 手动裁剪说明:
\li 本页中的各个执行函数,任何编译器都无法自动移除未使用,原因是<br>
它们是通过函数指针间接调用的。
\li 如果您希望做到极致的裁剪,可逐一查看这些函数,确定不使用的,<br>
可通过 手动开关 进行手动移除。
*/
/**
\brief 清除就绪延时
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iClearDelay。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _clear_delay_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
if(sv == OS_NULL) return; /* 该句无实际用途,只为屏蔽可能的编译器警告 */
sv_clear_delay();
}
#else
#define _clear_delay_ OS_NULL
#endif
/**
\brief 恢复任务
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iResumeTask(task)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _resume_task_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
sp_resume_task(htask);
}
#else
#define _resume_task_ OS_NULL
#endif
/**
\brief 挂起任务
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iSuspendTask(task)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _suspend_task_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
sp_suspend_task(htask);
}
#else
#define _suspend_task_ OS_NULL
#endif
/**
\brief 删除任务
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iDeleteTask(task)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _delete_task_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
sp_delete_task(htask);
}
#else
#define _delete_task_ OS_NULL
#endif
/**
\brief 清除阻塞(状态)
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iClearBlock(task)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _clear_block_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_tasknode_tsp htask = ((sp_task_tsp)sv)->htask;
sp_clear_block(htask);
}
#else
#define _clear_block_ OS_NULL
#endif
/**
\brief 设置阻塞(时间)
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iSetBlock_tc(task, tc)、iSetBlock_ms(task, ms)、
iSetBlock_s(task, s)、iSetBlock_m(task, m)、iSetBlock_h(task, h)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _set_block_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_tasknode_tsp htask = ((sp_blocktime_tsp)sv)->htask;
s_delay_t tick = ((sp_blocktime_tsp)sv)->tick;
sp_set_block(htask, tick);
}
#else
#define _set_block_ OS_NULL
#endif
/**
\brief 设置任务优先级
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iSetTaskPri(task, pri)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _set_taskpri_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_tasknode_tsp htask = ((sp_taskpri_tsp)sv)->htask;
s_u8_t npri = ((sp_taskpri_tsp)sv)->npri;
sp_set_taskpri(htask, npri);
}
#else
#define _set_taskpri_ OS_NULL
#endif
/**
\brief 定时中断
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iTimInt_tc(tmid, tc)、iTimInt_ms(tmid, ms)、iTimInt_s(tmid, s)、
iTimInt_m(tmid, m)、iTimInt_h(tmid, h)、iTimInt_Cancel(tmid)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& OS_TIMINTTOTAL
static void _timint_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_u8_t tmid = ((sp_timint_tsp)sv)->tmid;
s_timint_t tick = ((sp_timint_tsp)sv)->tick;
sv_timint(tmid, tick);
}
#else
#define _timint_ OS_NULL
#endif
/**
\brief 定时查询
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iTimQry_tc(tmid, tc)、iTimQry_ms(tmid, ms)、iTimQry_s(tmid, s)、
iTimQry_m(tmid, m)、iTimQry_h(tmid, h)、iTimQry_Cancel(tmid)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& OS_TIMQRYTOTAL
static void _timqry_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_u8_t tmid = ((sp_timqry_tsp)sv)->tmid;
s_timqry_t tick = ((sp_timqry_tsp)sv)->tick;
sv_timqry(tmid, tick);
}
#else
#define _timqry_ OS_NULL
#endif
/**
\brief 写二值信号量
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iLockBin(bin)、iGiveBin(bin)、iBackBin(bin)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& SYSCFG_BINARY == __ENABLED__
static void _binary_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_binary_tsp hbin = ((sp_binary_tsp)sv)->hbin;
bool value = ((sp_binary_tsp)sv)->value;
sp_write_binary(hbin, value);
}
#else
#define _binary_ OS_NULL
#endif
/**
\brief 给予计数信号量
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iGiveSem(sem)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& SYSCFG_SEMAPHORE == __ENABLED__
static void _give_sem_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_semaph_tsp hsem = ((sp_semaph_tsp)sv)->hsem;
sv_give_semaphore(hsem);
}
#else
#define _give_sem_ OS_NULL
#endif
/**
\brief 发送飞信
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iSendFetion(tbox, tion)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& SYSCFG_FETION == __ENABLED__
static void _send_fetion_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_tionbox_tsp htbox = ((sp_tionbox_tsp)sv)->htbox;
m_fetion_t tion = ((sp_tionbox_tsp)sv)->tion;
sv_send_fetion(htbox, tion);
}
#else
#define _send_fetion_ OS_NULL
#endif
/**
\brief 发送邮件
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iSendMail(mbox, mail)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& SYSCFG_MAILBOX == __ENABLED__
static void _send_mail_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_mailbox_tsp hmbox = ((sp_mailbox_tsp)sv)->hmbox;
void *mail = ((sp_mailbox_tsp)sv)->mail;
sv_send_mail(hmbox, mail);
}
#else
#define _send_mail_ OS_NULL
#endif
/**
\brief 发送消息
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iSendMsg(que, msg)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& SYSCFG_MSGQUEUE == __ENABLED__
static void _send_msg_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
s_queue_tsp hque = ((sp_msg_tsp)sv)->hque;
void *msg = ((sp_msg_tsp)sv)->msg;
sv_send_msg(hque, msg);
}
#else
#define _send_msg_ OS_NULL
#endif
/**
\brief 写标志组
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iClearFlagGroup(group)、
iSetFlagBit(group, bit)、iSetFlagBits(group, nbit) ...)、
iClearFlagBit(group, bit)、iClearFlagBits(group, nbit) ...)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/ \
&& SYSCFG_FLAGGROUP == __ENABLED__
static void _group_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
switch((s_u8_t)(((sp_group_tsp)sv)->size)){
case 0x01: *(s_u8_t *)((sp_group_tsp)sv)->hgrp |= ((sp_group_tsp)sv)->value; break;
case 0x02: *(s_u16_t *)((sp_group_tsp)sv)->hgrp |= ((sp_group_tsp)sv)->value; break;
case 0x04: *(s_u32_t *)((sp_group_tsp)sv)->hgrp |= ((sp_group_tsp)sv)->value; break;
case 0xFF: *(s_u8_t *)((sp_group_tsp)sv)->hgrp &=~((sp_group_tsp)sv)->value; break;
case 0xFE: *(s_u16_t *)((sp_group_tsp)sv)->hgrp &=~((sp_group_tsp)sv)->value; break;
case 0xFC: *(s_u32_t *)((sp_group_tsp)sv)->hgrp &=~((sp_group_tsp)sv)->value; break;
}
}
#else
#define _group_ OS_NULL
#endif
/**
\brief 全局变量写访问
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iWriteGVar(gv, lv)、iWriteGAry(gp, lp, size)、iWriteGStr(gs, ls)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _gvar_write_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
#include <string.h>
((sp_gvar_tsp)sv)->size
? s_memcpy(((sp_gvar_tsp)sv)->gp, ((sp_gvar_tsp)sv)->lp, ((sp_gvar_tsp)sv)->size)
: s_strcpy((char *)((sp_gvar_tsp)sv)->gp, (char *)((sp_gvar_tsp)sv)->lp);
}
#else
#define _gvar_write_ OS_NULL
#endif
/**
\brief 挂起服务调用
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iPendSVC(fp)。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _pendsvc_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
(*((sp_pendsvc_tsp)sv)->fp)();
}
#else
#define _pendsvc_ OS_NULL
#endif
/**
\brief 发送信号
\param[in] sv 服务的结构体指针
\return 无
\note 关联服务:iSendSign(sign)
iSetTime(t) [系统配置中,当 中断中获取RTC 选项为启用,
即 SYSCFG_GETRTC_INT == 1 时,调用该服务]。
*/
#if 1 /* 手动开关 *//* 如果用户不会调用关联服务,可手动移除该函数(1 改为 0)*/
static void _send_sign_(void _STATIC_MEM_ *sv) MCUCFG_C51USING
{
*((sp_sign_tsp)sv)->sign = true;
}
#else
#define _send_sign_ OS_NULL
#endif
/**
\brief 中断挂起服务_FIFO - 执行总函数(函数指针数组)
\param[in] [SVID] 服务ID
\param[in] sv 服务的结构体指针
\return 无
*/
void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv) =
{
_clear_delay_,
_resume_task_,
_suspend_task_,
_delete_task_,
_clear_block_,
_set_block_,
_set_taskpri_,
_timint_,
_timqry_,
_binary_,
_give_sem_,
_send_fetion_,
_send_mail_,
_send_msg_,
_group_,
_gvar_write_,
_pendsvc_,
_send_sign_
};
/** @} */
/** @} */
#endif
-184
View File
@@ -1,184 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_pend_fifo.h
* @brief 中断挂起服务_FIFO - 调用宏
* @details 仅在用户中断中调用,而后挂起到 PendSV 中执行。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#ifndef __SV_INT_PEND_FIFO_H
#define __SV_INT_PEND_FIFO_H
/**
@addtogroup 中断挂起服务_FIFO
@{
*/
/** 清除就绪延时 */
#define sPSV_ClearDelay \
do{ \
static sp_svid_ts u_psv = {OS_SVID_CLEARDELAY}; \
mPendSV_FIFOLoad; \
}while(false)
/** 恢复任务 */
#define sPSV_ResumeTask(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_RESUMETASK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad; \
}while(false)
/** 挂起任务 */
#define sPSV_SuspendTask(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_SUSPENDTASK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad; \
}while(false)
/** 删除任务 */
#define sPSV_DeleteTask(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_DELETETASK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad; \
}while(false)
/** 清除阻塞(状态)*/
#define sPSV_ClearBlock(_htask) \
do{ \
static sp_task_ts u_psv = {OS_SVID_CLEARBLOCK, OS_NULL}; \
u_psv.htask = _htask; \
mPendSV_FIFOLoad; \
}while(false)
/** 设置阻塞(时间)*/
#define sPSV_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 sPSV_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 sPSV_TimInt(_tmid, _tick) \
do{ \
static sp_timint_ts u_psv = {OS_SVID_TIMINT, _tmid, 0}; \
u_psv.tick = _tick; \
mPendSV_FIFOLoad; \
}while(false)
/** 定时查询 */
#define sPSV_TimQry(_tmid, _tick) \
do{ \
static sp_timqry_ts u_psv = {OS_SVID_TIMQRY, _tmid, 0}; \
u_psv.tick = _tick; \
mPendSV_FIFOLoad; \
}while(false)
/** 写二值信号量 */
#define sPSV_WriteBin(_bin, _value) \
do{ \
static sp_binary_ts u_psv = {OS_SVID_BINARY, &_bin, _value}; \
mPendSV_FIFOLoad; \
}while(false)
/** 给予计数信号量 */
#define sPSV_GiveSem(_sem) \
do{ \
static sp_semaph_ts u_psv = {OS_SVID_GIVESEM, &_sem}; \
mPendSV_FIFOLoad; \
}while(false)
/** 发送飞信 */
#define sPSV_SendFetion(_tbox, _tion) \
do{ \
static sp_tionbox_ts u_psv = {OS_SVID_SENDFETION, &_tbox, 0}; \
u_psv.tion = _tion; \
mPendSV_FIFOLoad; \
}while(false)
/** 发送邮件 */
#define sPSV_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 sPSV_SendMsg(_que, _msg) \
do{ \
static sp_msg_ts u_psv = {OS_SVID_SENDMSG, (s_queue_tsp)&_que, OS_NULL}; \
u_psv.msg = _msg; \
mPendSV_FIFOLoad; \
}while(false)
/** 清除标志组 */
#define sPSV_ClearFlagGroup(_group) \
do{ \
static sp_group_ts u_psv = {OS_SVID_GROUP, (void *)&_group, -sizeof(_group), ~0}; \
mPendSV_FIFOLoad; \
}while(false)
/** 写多标志位 */
#define sPSV_WriteFlagBits(_group, _sign, _nbit) \
do{ \
static sp_group_ts u_psv = {OS_SVID_GROUP, (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 sPSV_WriteGVar(_gp, _lp, _size) \
do{ \
static sp_gvar_ts u_psv = {OS_SVID_GVARWRITE, _gp, _lp, _size}; \
mPendSV_FIFOLoad; \
}while(false)
/** 挂起服务调用 */
#define sPSV_PendSVC(_fp) \
do{ \
static sp_pendsvc_ts u_psv = {OS_SVID_PENDSVC, _fp}; \
mPendSV_FIFOLoad; \
}while(false)
/** 发送信号 */
#define sPSV_SendSign(_sign) \
do{ \
static sp_sign_ts u_psv = {OS_SVID_SENDSIGN, (s_bool_t *)&_sign}; \
mPendSV_FIFOLoad; \
}while(false)
/** 设置时间 */
#if SYSCFG_GETRTC_INT == __ENABLED__
#define sPSV_SetTime(_t) \
do{ \
iWriteGAry(&s_rtc, _t, sizeof(s_rtc_ts)); \
s_sign_every.set = true; \
iSendSign(s_sign_rtc); \
}while(false)
#else
#define sPSV_SetTime(_t) \
do{ \
iWriteGAry(&s_rtc, _t, sizeof(s_rtc_ts)); \
s_sign_every.set = true; \
}while(false)
#endif
/** @} */
#endif
-131
View File
@@ -1,131 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_pend_flag.c
* @brief 中断挂起服务_FLAG
* @details 仅在 pendsv_hook 中调用并执行。
* @author 迟凯峰
* @version V1.0.2
* @date 2025.03.17
******************************************************************************/
#include "os_var.h"
#if MCUCFG_PENDSVFIFO_DEPTH \
|| SYSCFG_PENDSVHOOK == __ENABLED__
#include "sv_com.h"
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 中断挂起服务_FLAG
\brief 当需要在中断中完成特定的服务功能时,可先设置一个标志位,再触发 PendSV;
而后在 pendsv_hook 中查询该标志位,为真就清除标志位,而后调用服务。
@{
*/
/**
\brief 恢复任务
\param[in] htask 任务句柄
\return 无
*/
void sp_resume_task(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL) return;
if(htask->status & OS_STATUS_SUSPENDED){
sv_resume_task(htask);
}
}
/**
\brief 挂起任务
\param[in] htask 任务句柄
\return 无
*/
void sp_suspend_task(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL) return;
if(htask->status < OS_STATUS_SUSPENDED){
sv_suspend_task(htask);
}
}
/**
\brief 删除任务
\param[in] htask 任务句柄
\return 无
*/
void sp_delete_task(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL) return;
if(htask->status < OS_STATUS_DELETED){
sv_delete_task(htask);
}
}
/**
\brief 清除阻塞(状态)
\param[in] htask 任务句柄
\return 无
*/
void sp_clear_block(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL) return;
if(htask->status == OS_STATUS_BLOCKED){
sv_clear_block(htask);
}
}
/**
\brief 设置阻塞(时间)
\param[in] htask 任务句柄
\param[in] tick 滴答周期(阻塞时间)<br>
+0:清除阻塞<br>
~0:无限阻塞
\return 无
*/
void sp_set_block(s_tasknode_tsp htask, s_delay_t tick) MCUCFG_C51USING
{
if(htask == OS_NULL) return;
if(htask->status == OS_STATUS_BLOCKED){
sv_set_block(htask, tick);
}
}
/**
\brief 设置任务优先级
\param[in] htask 任务句柄
\param[in] npri 新优先级
\return 无
*/
void sp_set_taskpri(s_tasknode_tsp htask, s_u8_t npri) MCUCFG_C51USING
{
if(htask == OS_NULL) return;
if(htask->status < OS_STATUS_STOPPED){
if(htask->pri != npri){
sv_set_taskpri(htask, npri);
}
}
}
#if SYSCFG_BINARY == __ENABLED__
/**
\brief 写二值信号量
\param[in] hbin 二值信号量句柄
\param[in] value <br>
0:上锁<br>
1:给予
\return 无
*/
void sp_write_binary(s_binary_tsp hbin, bool value) MCUCFG_C51USING
{
hbin->binary = value;
if(!value) return;
if(hbin->htask != OS_NULL){
sv_delete_block_list(&hbin->htask);
}
}
#endif
/** @} */
/** @} */
#endif
-40
View File
@@ -1,40 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_int_pend_flag.h
* @brief 中断挂起服务_FLAG
* @details 仅在 pendsv_hook 中调用并执行。
* @author 迟凯峰
* @version V1.0.1
* @date 2025.02.18
******************************************************************************/
#ifndef __SV_INT_PEND_FLAG_H
#define __SV_INT_PEND_FLAG_H
#include "os_redef.h"
void sp_resume_task (s_tasknode_tsp htask);
void sp_suspend_task(s_tasknode_tsp htask);
void sp_delete_task (s_tasknode_tsp htask);
void sp_clear_block (s_tasknode_tsp htask);
void sp_set_block (s_tasknode_tsp htask, s_delay_t tick);
void sp_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
void sp_write_binary(s_binary_tsp hbin, bool value);
/**
@addtogroup 中断挂起服务_FLAG
@{
*/
#define sPS2_ResumeTask(htask) sp_resume_task(htask) /*!< 恢复任务 */
#define sPS2_SuspendTask(htask) sp_suspend_task(htask) /*!< 挂起任务 */
#define sPS2_DeleteTask(htask) sp_delete_task(htask) /*!< 删除任务 */
#define sPS2_ClearBlock(htask) sp_clear_block(htask) /*!< 清除阻塞(状态)*/
#define sPS2_SetBlock(htask, tick) sp_set_block(htask, tick) /*!< 设置阻塞(时间)*/
#define sPS2_SetTaskPri(htask, npri) sp_set_taskpri(htask, npri) /*!< 设置任务优先级 */
#define sPS2_WriteBin(bin, value) sp_write_binary(&bin, value)/*!< 写二值信号量 */
#define sPS2_ClearDelay sv_clear_delay() /*!< 清除就绪延时 */
/** @} */
#endif
-982
View File
File diff suppressed because it is too large Load Diff
-415
View File
@@ -1,415 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_task.h
* @brief 任务服务
* @details 仅在任务中调用并执行。
* @author 迟凯峰
* @version V1.0.4
* @date 2025.03.13
******************************************************************************/
#ifndef __SV_TASK_H
#define __SV_TASK_H
#include "os_var.h"
#if MCUCFG_ISA == __ARM__
/** 调度上锁(进入嵌套任务临界区)*/
__STATIC_FORCEINLINE void su_schedule_locks(void)
{
s_sign_schedule.every[0] = true;
s_schedulelock_counter++;
}
/** 内核上锁(进入嵌套服务层临界区)*/
__STATIC_FORCEINLINE void su_kernel_locks(void)
{
mSysIRQ_Disable;
#if SYSCFG_KERNELLOCKNESTING == __ENABLED__
s_kernellock_counter++;
#endif
}
/** 内核上锁(进入非嵌套服务层临界区)*/
__STATIC_FORCEINLINE void su_kernel_lock0(void)
{
mSysIRQ_Disable;
}
#else
void su_schedule_locks (void);
void su_kernel_locks (void);
void su_kernel_lock0 (void);
#endif
void su_schedule_unlocks (void);
void su_kernel_unlocks (void);
void *su_kernel_unlocks_ret(void *p);
void su_kernel_unlock0_psv(void);
s_ecode_t su_startup_task (s_taskhand_tsp hhand, s_u8_t status);
s_ecode_t su_resume_task (s_tasknode_tsp htask);
s_ecode_t su_resume_suspend (s_tasknode_tsp htask);
s_ecode_t su_suspend_task (s_tasknode_tsp htask);
s_ecode_t su_delete_task (s_tasknode_tsp htask);
s_ecode_t su_clear_block (s_tasknode_tsp htask);
s_ecode_t su_set_block (s_tasknode_tsp htask, s_delay_t tick);
s_ecode_t su_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
void su_yield_tasking (void);
void su_delay (s_delay_t tick);
bool su_take_mutex (s_mutex_tsp hmut, s_delay_t tick);
void su_back_mutex (s_mutex_tsp hmut);
bool su_wait_binary (s_binary_tsp hbin, s_delay_t tick);
bool su_take_binary (s_binary_tsp hbin, s_delay_t tick);
bool su_take_semaphore (s_semaph_tsp hsem, s_delay_t tick);
m_fetion_t su_recv_fetion (s_tionbox_tsp htbox, s_delay_t tick);
void *su_recv_mail (s_mailbox_tsp hmbox, s_delay_t tick);
void *su_recv_msg (s_queue_tsp hque, s_delay_t tick);
s_ecode_t su_send_msg (s_queue_tsp hque, void *msg);
bool su_query_group (void _STATIC_MEM_ *hgrp, s_u8_t size);
bool su_wait_group_1 (s_u8_t _STATIC_MEM_ *hgrp, s_delay_t tick);
bool su_wait_group_2 (s_u16_t _STATIC_MEM_ *hgrp, s_delay_t tick);
bool su_wait_group_4 (s_u32_t _STATIC_MEM_ *hgrp, s_delay_t tick);
bool su_init_mempool (s_thrmem_tsp hmem, size_t size);
void _MALLOC_MEM_ *su_talloc (s_thrmem_tsp hmem, size_t size);
void _MALLOC_MEM_ *su_xalloc (void _MALLOC_MEM_ *p);
/**
@addtogroup 任务服务
@{
*/
/*
* 操作任务
*/
/** 启动任务 */
#define sUSV_StartTask(hhand, status) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task((s_taskhand_tsp)hhand, !status ? OS_STATUS_READY : OS_STATUS_SUSPENDED) : OS_ECODE_NOERROR \
)
/** 挂起任务 */
#define sUSV_SuspendTask(htask) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_suspend_task(htask) : OS_ECODE_NOERROR \
)
/** 恢复任务 */
#define sUSV_ResumeTask(htask) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_resume_task(htask) : OS_ECODE_NOERROR \
)
/** 恢复指定任务并挂起自身任务 */
#define sUSV_ResumeSuspend(htask) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_resume_suspend(htask) : OS_ECODE_NOERROR \
)
/** 删除任务 */
#define sUSV_DeleteTask(htask) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_delete_task(htask) : OS_ECODE_NOERROR \
)
/** 设置任务优先级 */
#define sUSV_SetTaskPri(htask, npri) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_set_taskpri(htask, npri) : OS_ECODE_NOERROR \
)
/** 设置阻塞(时间)*/
#define sUSV_SetBlock(htask, tick) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_set_block(htask, tick) : OS_ECODE_NOERROR \
)
/** 清除阻塞(状态)*/
#define sUSV_ClearBlock(htask) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_clear_block(htask) : OS_ECODE_NOERROR \
)
/** 自身任务延时 */
#define sUSV_Delay(tick) \
do{ \
mSysIRQ_Disable; \
su_delay(tick); \
}while(false)
/*
* 定时
*/
/** 定时中断 */
#define sUSV_TimInt(tmid, tick) \
do{ \
su_kernel_locks(); \
sv_timint(tmid, tick); \
su_kernel_unlocks(); \
}while(false)
/** 定时查询 */
#define sUSV_TimQry(tmid, tick) \
do{ \
su_kernel_locks(); \
sv_timqry(tmid, tick); \
su_kernel_unlocks(); \
}while(false)
/*
* 互斥信号量
*/
/** 获取互斥信号量 */
#define sUSV_TakeMut(mut, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_take_mutex(&mut, tick) : false \
)
/** 归还互斥信号量 */
#define sUSV_BackMut(mut) \
do{ \
su_kernel_locks(); \
su_back_mutex(&mut); \
}while(false)
/*
* 二值信号量
*/
/** 等待二值信号量 */
#define sUSV_WaitBin(bin, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_wait_binary(&bin, tick) : false \
)
/** 获取二值信号量 */
#define sUSV_TakeBin(bin, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_take_binary(&bin, tick) : false \
)
/** 给予二值信号量 */
#define sUSV_GiveBin(bin) \
do{ \
su_kernel_locks(); \
sv_give_binary(&bin); \
su_kernel_unlocks(); \
}while(false)
/*
* 计数信号量
*/
/** 获取计数信号量 */
#define sUSV_TakeSem(sem, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_take_semaphore(&sem, tick) : false \
)
/** 给予计数信号量 */
#define sUSV_GiveSem(sem) \
do{ \
su_kernel_locks(); \
sv_give_semaphore(&sem); \
su_kernel_unlocks(); \
}while(false)
/*
* 飞信
*/
/** 接收飞信 */
#define sUSV_RecvFetion(tbox, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_recv_fetion(&tbox, tick) : false \
)
/** 发送飞信 */
#define sUSV_SendFetion(tbox, tion) \
do{ \
su_kernel_locks(); \
sv_send_fetion(&tbox, tion); \
su_kernel_unlocks(); \
}while(false)
/*
* 邮箱
*/
/** 接收邮件 */
#define sUSV_RecvMail(mbox, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_recv_mail(&mbox, tick) : OS_NULL \
)
/** 发送邮件 */
#define sUSV_SendMail(mbox, mail) \
do{ \
su_kernel_locks(); \
sv_send_mail(&mbox, mail); \
su_kernel_unlocks(); \
}while(false)
/*
* 消息队列
*/
/** 接收消息 */
#define sUSV_RecvMsg(que, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_recv_msg((s_queue_tsp)&que, tick) : OS_NULL \
)
/** 发送消息 */
#define sUSV_SendMsg(que, msg) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_send_msg((s_queue_tsp)&que, msg) : OS_ECODE_NOERROR \
)
/*
* 事件标志组
*/
/** 查询标志组 */
#define sUSV_QueryFlagGroup(group) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_query_group((void *)&group, sizeof(group)) : false \
)
/** 等待标志组 */
#define sUSV_WaitFlagGroup(group, tick) \
( \
(m_boolvoid_tf(su_kernel_lock0))() || true ? ( \
sizeof(group) == 1 ? su_wait_group_1((s_u8_t *)&group, tick) \
: sizeof(group) == 2 ? su_wait_group_2((s_u16_t *)&group, tick) \
: sizeof(group) == 4 ? su_wait_group_4((s_u32_t *)&group, tick) \
: false \
) : false \
)
/** 清除标志组 */
#define sUSV_ClearFlagGroup(group) \
do{ \
su_kernel_locks(); \
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; \
su_kernel_unlocks(); \
}while(false)
/** 写多标志位 */
#define sUSV_WriteFlagBits(group, value, nbit) \
suWriteFlagBits_##nbit(group, value,
/*
* 软件RTC
*/
/** 获取时间 */
#define sUSV_GetTime(t) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_ret(s_memcpy(t, &s_rtc, sizeof(s_rtc_ts))) : OS_NULL \
)
/** 设置时间 */
#if SYSCFG_GETRTC_INT == __ENABLED__
#define sUSV_SetTime(t) \
do{ \
su_kernel_locks(); \
s_memcpy(&s_rtc, t, sizeof(s_rtc_ts)); \
s_sign_every.set = true; \
sv_update_rtccopy(); \
su_kernel_unlocks(); \
}while(false)
#else
#define sUSV_SetTime(t) \
do{ \
su_kernel_locks(); \
s_memcpy(&s_rtc, t, sizeof(s_rtc_ts)); \
s_sign_every.set = true; \
su_kernel_unlocks(); \
}while(false)
#endif
/*
* 进程内存
*/
/** malloc */
#define sUSV_Malloc(size) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_xalloc((void _MALLOC_MEM_ *)s_malloc(size)) : OS_NULL \
)
/** calloc */
#define sUSV_Calloc(nmemb, size) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_xalloc((void _MALLOC_MEM_ *)s_calloc(nmemb, size)) : OS_NULL \
)
/** realloc */
#define sUSV_Realloc(p, size) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_xalloc((void _MALLOC_MEM_ *)s_realloc(p, size)) : OS_NULL \
)
/** free */
#define sUSV_Free(p) \
do{ \
su_kernel_locks(); \
s_free(p); \
su_kernel_unlocks(); \
}while(false)
/*
* 线程内存
*/
/** 初始化线程内存池 */
#define sUSV_InitMempool(size) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_init_mempool(&u_thrmem, size) : false \
)
/** 线程内存分配 */
#define sUSV_Talloc(size) \
( \
(m_boolvoid_tf(su_kernel_locks))() || true ? su_xalloc(su_talloc(&u_thrmem, size)) : OS_NULL \
)
/** 释放线程内存池 */
#define sUSV_FreeMempool \
do{ \
sUSV_Free(u_thrmem.head); \
u_thrmem.head = u_thrmem.move = OS_NULL; \
}while(false)
/** @} */
#endif
-216
View File
@@ -1,216 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_tick.c
* @brief 滴答服务
* @details 仅在 SysTick 中调用并执行,包括在滴答钩子、定时中断钩子、
定时查询钩子、定时查询事件等处调用。
* @author 迟凯峰
* @version V1.0.1
* @date 2025.02.15
******************************************************************************/
#include "os_var.h"
#include "sv_com.h"
/**
@addtogroup CosyOS_内核服务
@{
*//**
\defgroup 滴答服务
\brief 仅在 SysTick 中调用并执行,包括在滴答钩子、定时中断钩子、
定时查询钩子、定时查询事件等处调用。
@{
*/
/**
\brief 恢复任务
\param[in] htask 任务句柄
\return 错误码
*/
s_ecode_t st_resume_task(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL){
return OS_ECODE_TASKNOTSTARTED;
}
if(htask->status & OS_STATUS_SUSPENDED){
sv_resume_task(htask);
return OS_ECODE_NOERROR;
}
if(htask->status < OS_STATUS_STOPPED){
return OS_ECODE_TASKNOTSUSPENDED;
}
if(htask->status == OS_STATUS_STOPPED){
return OS_ECODE_TASKSTOPPED;
}
if(htask->status == OS_STATUS_DELETED){
return OS_ECODE_TASKNOTSTARTED;
}
else{
return OS_ECODE_DONOTKNOW;
}
}
/**
\brief 挂起任务
\param[in] htask 任务句柄
\return 错误码
*/
s_ecode_t st_suspend_task(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL){
return OS_ECODE_TASKNOTSTARTED;
}
if(htask->status < OS_STATUS_SUSPENDED){
sv_suspend_task(htask);
return OS_ECODE_NOERROR;
}
if(htask->status & OS_STATUS_SUSPENDED){
return OS_ECODE_TASKSUSPENDED;
}
if(htask->status == OS_STATUS_STOPPED){
return OS_ECODE_TASKSTOPPED;
}
if(htask->status == OS_STATUS_DELETED){
return OS_ECODE_TASKNOTSTARTED;
}
else{
return OS_ECODE_DONOTKNOW;
}
}
/**
\brief 删除任务
\param[in] htask 任务句柄
\return 错误码
*/
s_ecode_t st_delete_task(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL){
return OS_ECODE_TASKNOTSTARTED;
}
if(htask->status < OS_STATUS_DELETED){
sv_delete_task(htask);
return OS_ECODE_NOERROR;
}
if(htask->status == OS_STATUS_DELETED){
return OS_ECODE_TASKNOTSTARTED;
}
else{
return OS_ECODE_DONOTKNOW;
}
}
/**
\brief 清除阻塞(状态)
\param[in] htask 任务句柄
\return 错误码
*/
s_ecode_t st_clear_block(s_tasknode_tsp htask) MCUCFG_C51USING
{
if(htask == OS_NULL){
return OS_ECODE_TASKNOTSTARTED;
}
if(htask->status == OS_STATUS_BLOCKED){
sv_clear_block(htask);
return OS_ECODE_NOERROR;
}
return OS_ECODE_TASKNOTBLOCKED;
}
/**
\brief 设置阻塞(时间)
\param[in] htask 任务句柄
\param[in] tick 滴答周期(阻塞时间)<br>
+0:清除阻塞<br>
~0:无限阻塞
\return 错误码
*/
s_ecode_t st_set_block(s_tasknode_tsp htask, s_delay_t tick) MCUCFG_C51USING
{
if(htask == OS_NULL){
return OS_ECODE_TASKNOTSTARTED;
}
if(htask->status == OS_STATUS_BLOCKED){
sv_set_block(htask, tick);
return OS_ECODE_NOERROR;
}
return OS_ECODE_TASKNOTBLOCKED;
}
/**
\brief 设置任务优先级
\param[in] htask 任务句柄
\param[in] npri 新优先级
\return 错误码
*/
s_ecode_t st_set_taskpri(s_tasknode_tsp htask, s_u8_t npri) MCUCFG_C51USING
{
if(htask == OS_NULL){
return OS_ECODE_TASKNOTSTARTED;
}
if(htask->status < OS_STATUS_STOPPED){
if(htask->pri != npri){
sv_set_taskpri(htask, npri);
return OS_ECODE_NOERROR;
}
else{
return OS_ECODE_TASKPRIUNCHANGED;
}
}
if(htask->status == OS_STATUS_STOPPED){
return OS_ECODE_TASKSTOPPED;
}
if(htask->status == OS_STATUS_DELETED){
return OS_ECODE_TASKNOTSTARTED;
}
else{
return OS_ECODE_DONOTKNOW;
}
}
#if SYSCFG_SEMAPHORE == __ENABLED__
/**
\brief 获取计数信号量
\param[in] hsem 计数信号量句柄
\return 结果
\retval false 失败
\retval true 成功
*/
bool st_take_semaphore(s_semaph_tsp hsem) MCUCFG_C51USING
{
if(hsem->counter){
(hsem->counter)--;
return true;
}
return false;
}
#endif
#if SYSCFG_MSGQUEUE == __ENABLED__
/**
\brief 接收消息
\param[in] hque 队列句柄
\return 消息指针
\retval NULL 无消息
*/
void *st_recv_msg(s_queue_tsp hque) MCUCFG_C51USING
{
void *msg = OS_NULL;
hque->mutex = false;
if(hque->counter){
if(hque->type == __DYNAMIC__){
msg = sv_recv_msg_dynamic((sd_queue_tsp)hque);
}
else{
msg = sv_recv_msg_static((ss_queue_tsp)hque);
}
}
hque->mutex = true;
return msg;
}
#endif
/** @} */
/** @} */
-93
View File
@@ -1,93 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file sv_tick.h
* @brief 滴答服务
* @details 仅在 SysTick 中调用并执行,包括在滴答钩子、定时中断钩子、
定时查询钩子、定时查询事件等处调用。
* @author 迟凯峰
* @version V1.0.1
* @date 2025.02.18
******************************************************************************/
#ifndef __SV_TICK_H
#define __SV_TICK_H
#include "os_redef.h"
s_ecode_t st_resume_task (s_tasknode_tsp htask);
s_ecode_t st_suspend_task (s_tasknode_tsp htask);
s_ecode_t st_delete_task (s_tasknode_tsp htask);
s_ecode_t st_clear_block (s_tasknode_tsp htask);
s_ecode_t st_set_block (s_tasknode_tsp htask, s_delay_t tick);
s_ecode_t st_set_taskpri (s_tasknode_tsp htask, s_u8_t npri);
bool st_take_semaphore (s_semaph_tsp hsem);
void *st_recv_msg (s_queue_tsp hque);
/**
@addtogroup 滴答服务
@{
*/
#define sTSV_ResumeTask(htask) st_resume_task(htask) /*!< 恢复任务 */
#define sTSV_SuspendTask(htask) st_suspend_task(htask) /*!< 挂起任务 */
#define sTSV_DeleteTask(htask) st_delete_task(htask) /*!< 删除任务 */
#define sTSV_ClearBlock(htask) st_clear_block(htask) /*!< 清除阻塞 */
#define sTSV_SetBlock(htask, tick) st_set_block(htask, tick) /*!< 设置阻塞 */
#define sTSV_SetTaskPri(htask, npri) st_set_taskpri(htask, npri) /*!< 设置任务优先级 */
#define sTSV_TakeSem(sem) st_take_semaphore(&sem) /*!< 获取计数信号量 */
#define sTSV_RecvMsg(que) st_recv_msg((s_queue_tsp)&que) /*!< 接收消息 */
#define sTSV_ClearDelay sv_clear_delay() /*!< 清除就绪延时 */
#define sTSV_GiveBin(bin) sv_give_binary(&bin) /*!< 给予二值信号量 */
#define sTSV_GiveSem(sem) sv_give_semaphore(&sem) /*!< 给予计数信号量 */
#define sTSV_SendFetion(tbox, tion) sv_send_fetion(&tbox, tion) /*!< 发送飞信 */
#define sTSV_SendMail(mbox, mail) sv_send_mail(&mbox, mail) /*!< 发送邮件 */
#define sTSV_SendMsg(que, msg) sv_send_msg((s_queue_tsp)&que, msg) /*!< 发送消息 */
#define sTSV_TimInt(tmid, tick) sv_timint(tmid, tick) /*!< 定时中断 */
#define sTSV_TimQry(tmid, tick) sv_timqry(tmid, tick) /*!< 定时查询 */
#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)) /*!< 获取时间 */
/** 设置时间 */
#if SYSCFG_GETRTC_INT == __ENABLED__
#define sTSV_SetTime(t) \
do{ \
s_memcpy(&s_rtc, t, sizeof(s_rtc)); \
s_sign_every.set = true; \
sv_update_rtccopy(); \
}while(false)
#else
#define sTSV_SetTime(t) \
do{ \
s_memcpy(&s_rtc, t, sizeof(s_rtc)); \
s_sign_every.set = true; \
}while(false)
#endif
/** 查询标志组 */
#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
-1746
View File
File diff suppressed because it is too large Load Diff
-213
View File
@@ -1,213 +0,0 @@
/**************************************************************************//**
* @item CosyOS-III Kernel
* @file ur_eapi.h
* @brief 用户API扩展
* @details 用户API的补充扩展定义,仅是定义无注释说明,所有内核服务的API说明
均在 ur_api.h 中,并支持 doxygen。
* @author 迟凯峰
* @version V1.0.0
* @date 2025.02.08
******************************************************************************/
#ifndef __UR_EAPI_H
#define __UR_EAPI_H
/* 清除就绪延时 */
#define iClearDelay sPSV_ClearDelay
#define pClearDelay sPS2_ClearDelay
/* 恢复任务 */
#define tResumeTask(task) sTSV_ResumeTask(u_taskhandle_##task)
#define iResumeTask(task) sPSV_ResumeTask(u_taskhandle_##task)
#define pResumeTask(task) sPS2_ResumeTask(u_taskhandle_##task)
/* 挂起任务 */
#define tSuspendTask(task) sTSV_SuspendTask(u_taskhandle_##task)
#define iSuspendTask(task) sPSV_SuspendTask(u_taskhandle_##task)
#define pSuspendTask(task) sPS2_SuspendTask(u_taskhandle_##task)
/* 删除任务 */
#define tDeleteTask(task) sTSV_DeleteTask(u_taskhandle_##task)
#define iDeleteTask(task) sPSV_DeleteTask(u_taskhandle_##task)
#define pDeleteTask(task) sPS2_DeleteTask(u_taskhandle_##task)
/* 设置任务优先级 */
#define tSetTaskPri(task, npri) sTSV_SetTaskPri(u_taskhandle_##task, npri)
#define iSetTaskPri(task, npri) sPSV_SetTaskPri(u_taskhandle_##task, npri)
#define pSetTaskPri(task, npri) sPS2_SetTaskPri(u_taskhandle_##task, npri)
/* 清除阻塞(状态)*/
#define tClearBlock(task) sTSV_ClearBlock(u_taskhandle_##task)
#define iClearBlock(task) sPSV_ClearBlock(u_taskhandle_##task)
#define pClearBlock(task) sPS2_ClearBlock(u_taskhandle_##task)
/* 设置阻塞-滴答周期 */
#define tSetBlock_tc(task, tc) sTSV_SetBlock(u_taskhandle_##task, tc)
#define iSetBlock_tc(task, tc) sPSV_SetBlock(u_taskhandle_##task, tc)
#define pSetBlock_tc(task, tc) sPS2_SetBlock(u_taskhandle_##task, tc)
/* 设置阻塞-毫秒 */
#define tSetBlock_ms(task, ms) tSetBlock_tc(task, (1000UL * (ms)) / SYSCFG_SYSTICKCYCLE)
#define iSetBlock_ms(task, ms) iSetBlock_tc(task, (1000UL * (ms)) / SYSCFG_SYSTICKCYCLE)
#define pSetBlock_ms(task, ms) pSetBlock_tc(task, (1000UL * (ms)) / SYSCFG_SYSTICKCYCLE)
/* 设置阻塞-秒钟 */
#define tSetBlock_s(task, s) tSetBlock_ms(task, 1000UL * (s))
#define iSetBlock_s(task, s) iSetBlock_ms(task, 1000UL * (s))
#define pSetBlock_s(task, s) pSetBlock_ms(task, 1000UL * (s))
/* 设置阻塞-分钟 */
#define tSetBlock_m(task, m) tSetBlock_s(task, 60UL * (m))
#define iSetBlock_m(task, m) iSetBlock_s(task, 60UL * (m))
#define pSetBlock_m(task, m) pSetBlock_s(task, 60UL * (m))
/* 设置阻塞-小时 */
#define tSetBlock_h(task, h) tSetBlock_m(task, 60UL * (h))
#define iSetBlock_h(task, h) iSetBlock_m(task, 60UL * (h))
#define pSetBlock_h(task, h) pSetBlock_m(task, 60UL * (h))
/* 定时中断-滴答周期 */
#define tTimInt_tc(tmid, tc) sTSV_TimInt(tmid, tc)
#define iTimInt_tc(tmid, tc) sPSV_TimInt(tmid, tc)
/* 定时中断-毫秒 */
#define tTimInt_ms(tmid, ms) tTimInt_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICKCYCLE)
#define iTimInt_ms(tmid, ms) iTimInt_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICKCYCLE)
/* 定时中断-秒钟 */
#define tTimInt_s(tmid, s) tTimInt_ms(tmid, 1000UL * (s))
#define iTimInt_s(tmid, s) iTimInt_ms(tmid, 1000UL * (s))
/* 定时中断-分钟 */
#define tTimInt_m(tmid, m) tTimInt_s(tmid, 60UL * (m))
#define iTimInt_m(tmid, m) iTimInt_s(tmid, 60UL * (m))
/* 定时中断-小时 */
#define tTimInt_h(tmid, h) tTimInt_m(tmid, 60UL * (h))
#define iTimInt_h(tmid, h) iTimInt_m(tmid, 60UL * (h))
/* 终止定时中断 */
#define tTimInt_Cancel(tmid) tTimInt_tc(tmid, 0)
#define iTimInt_Cancel(tmid) iTimInt_tc(tmid, 0)
/* 定时查询-滴答周期 */
#define tTimQry_tc(tmid, tc) sTSV_TimQry(tmid, tc)
#define iTimQry_tc(tmid, tc) sPSV_TimQry(tmid, tc)
/* 定时查询-毫秒 */
#define tTimQry_ms(tmid, ms) tTimQry_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICKCYCLE)
#define iTimQry_ms(tmid, ms) iTimQry_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICKCYCLE)
/* 定时查询-秒钟 */
#define tTimQry_s(tmid, s) tTimQry_ms(tmid, 1000UL * (s))
#define iTimQry_s(tmid, s) iTimQry_ms(tmid, 1000UL * (s))
/* 定时查询-分钟 */
#define tTimQry_m(tmid, m) tTimQry_s(tmid, 60UL * (m))
#define iTimQry_m(tmid, m) iTimQry_s(tmid, 60UL * (m))
/* 定时查询-小时 */
#define tTimQry_h(tmid, h) tTimQry_m(tmid, 60UL * (h))
#define iTimQry_h(tmid, h) iTimQry_m(tmid, 60UL * (h))
/* 终止定时查询 */
#define tTimQry_Cancel(tmid) tTimQry_tc(tmid, ~0)
#define iTimQry_Cancel(tmid) iTimQry_tc(tmid, ~0)
/* 上锁二值信号量 */
#define tLockBin(bin) bin.binary = false
#define iLockBin(bin) sPSV_WriteBin(bin, false)
#define pLockBin(bin) sPS2_WriteBin(bin, false)
/* 给予二值信号量 */
#define tGiveBin(bin) sTSV_GiveBin(bin)
#define iGiveBin(bin) sPSV_WriteBin(bin, true)
#define pGiveBin(bin) sPS2_WriteBin(bin, true)
/* 获取二值信号量 */
#define tTakeBin(bin) sTSV_TakeBin(bin)
#define iTakeBin(bin) sISV_TakeBin(bin)
/* 归还二值信号量 */
#define tBackBin(bin) bin.binary = true
#define iBackBin(bin) bin.binary = true
/* 给予计数信号量 */
#define tGiveSem(sem) sTSV_GiveSem(sem)
#define iGiveSem(sem) sPSV_GiveSem(sem)
/* 获取计数信号量 */
#define tTakeSem(sem) sTSV_TakeSem(sem)
/* 归还计数信号量 */
#define tBackSem(sem) tGiveSem(sem)
/* 接收飞信 */
#define tRecvFetion(tbox) sTSV_RecvFetion(tbox)
#define iRecvFetion(tbox) sISV_RecvFetion(tbox)
/* 发送飞信 */
#define tSendFetion(tbox, tion) sTSV_SendFetion(tbox, tion)
#define iSendFetion(tbox, tion) sPSV_SendFetion(tbox, tion)
/* 接收邮件 */
#define tRecvMail(mbox) sTSV_RecvMail(mbox)
#define iRecvMail(mbox) sISV_RecvMail(mbox)
/* 发送邮件 */
#define tSendMail(mbox, mail) sTSV_SendMail(mbox, mail)
#define iSendMail(mbox, mail) sPSV_SendMail(mbox, mail)
/* 接收消息 */
#define tRecvMsg(que) sTSV_RecvMsg(que)
#define iRecvMsg(que) sISV_RecvMsg(que)
/* 发送消息 */
#define tSendMsg(que, msg) sTSV_SendMsg(que, msg)
#define iSendMsg(que, msg) sPSV_SendMsg(que, msg)
/* 查询标志组 */
#define tQueryFlagGroup(group) sTSV_QueryFlagGroup(group)
#define iQueryFlagGroup(group) sISV_QueryFlagGroup(group)
/* 清除标志组 */
#define tClearFlagGroup(group) sTSV_ClearFlagGroup(group)
#define iClearFlagGroup(group) sPSV_ClearFlagGroup(group)
/* 设置标志位 */
#define tSetFlagBit(group, bit) tSetFlagBits(group, 1) bit)
#define iSetFlagBit(group, bit) iSetFlagBits(group, 1) bit)
/* 清除标志位 */
#define tClearFlagBit(group, bit) tClearFlagBits(group, 1) bit)
#define iClearFlagBit(group, bit) iClearFlagBits(group, 1) bit)
/* 设置多标志位 */
#define tSetFlagBits(group, nbit) sTSV_WriteFlagBits(group, true, nbit)
#define iSetFlagBits(group, nbit) sPSV_WriteFlagBits(group, +, nbit)
/* 清除多标志位 */
#define tClearFlagBits(group, nbit) sTSV_WriteFlagBits(group, false, nbit)
#define iClearFlagBits(group, nbit) sPSV_WriteFlagBits(group, -, nbit)
/* 获取时间 */
#define tGetTime(t) sTSV_GetTime(t)
#define iGetTime(t) sISV_GetTime(t)
/* 设置时间 */
#define tSetTime(t) sTSV_SetTime(t)
#define iSetTime(t) sPSV_SetTime(t)
/* 别名定义(API简化)*/
#define uRecvFet uRecvFetion
#define tRecvFet tRecvFetion
#define iRecvFet iRecvFetion
#define uSendFet uSendFetion
#define tSendFet tSendFetion
#define iSendFet iSendFetion
#endif