mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-08-17 08:42:13 +08:00
+107
@@ -0,0 +1,107 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_var.h
|
||||
* @brief 系统全局变量声明
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __OS_VAR_H
|
||||
#define __OS_VAR_H
|
||||
#include "os_redef.h"
|
||||
|
||||
/* The Soft-RTC */
|
||||
#if (SYSCFG_SOFTRTC == __ENABLED__)
|
||||
extern s_u8_t const _CONST_MEM_ s_month0day[13];
|
||||
extern s_u8_t _RTC_MEM_ s_month2day;
|
||||
extern s_every_ts _SYS_MEM_ s_sign_every;
|
||||
extern m_rtccount_t _SYS_MEM_ s_rtc_counter;
|
||||
extern s_rtc_ts _RTC_MEM_ s_rtc;
|
||||
#endif
|
||||
/* The Task */
|
||||
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_startup;
|
||||
extern s_schesign_tu volatile _SYS_MEM_ s_sign_schedule;
|
||||
extern m_bit_t volatile/*_SYS_MEM_*/ s_sign_delay;
|
||||
extern s_u8_t _SYS_MEM_ s_schedulelock_counter;
|
||||
extern s_taskstart_ts _SYS_MEM_ s_task_starter;
|
||||
extern s_taskctrl_tsp _SYS_MEM_ s_task_current;
|
||||
extern s_taskctrl_tsp s_timer_list[OS_TIMESLOTNUM];
|
||||
extern s_u8_t _SYS_MEM_ s_timer_pointer;
|
||||
#if (SYSCFG_SAMEPRISCHEDULE == __TIMESHARING__ && SYSCFG_TIMESHARINGMODE == 2)
|
||||
extern s_sharing_t const _CONST_MEM_ s_time_sharing[SYSCFG_TASKPRIORITY];
|
||||
#endif
|
||||
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
||||
extern s_u8_t _SYS_MEM_ s_kernellock_counter;
|
||||
#endif
|
||||
/* The Safe runtime */
|
||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_timeout_sign;
|
||||
extern s_taskctrl_tsp _STATIC_MEM_ s_timeout_list;
|
||||
#endif
|
||||
/* The Timing Interrupt */
|
||||
#if (OS_TIMINTTOTAL > 0)
|
||||
extern s_timinthand_tsp s_timint_handle[OS_TIMINTTOTAL];
|
||||
#endif
|
||||
/* The Timing Query */
|
||||
#if (OS_TIMQRYTOTAL > 0)
|
||||
extern s_timqryhand_tsp s_timqry_handle[OS_TIMQRYTOTAL];
|
||||
#endif
|
||||
/* The Task Message */
|
||||
#if (SYSCFG_TASKMSG == __ENABLED__)
|
||||
extern s_u8_t volatile _SYS_MEM_ s_taskmsg_sign;
|
||||
#endif
|
||||
/* The Debug Interface */
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_debug_sendsign;
|
||||
extern s_u8_t _SYS_MEM_ s_debug_sendtype;
|
||||
extern s_u8_t _SYS_MEM_ s_debug_recvlen;
|
||||
extern char * _XDATA_MEM_ s_debug_recvptr;/*
|
||||
extern char _XDATA_MEM_ s_cmdline_sendbuff[OS_CMDLINESENDBUFFSIZE];
|
||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||
extern s_u16_t _XDATA_MEM_ s_cmdline_sendlen;
|
||||
#endif*/
|
||||
extern m_bit_t /*_SYS_MEM_*/ s_taskmgr_sign;
|
||||
extern char _XDATA_MEM_ s_taskmgr_sendbuff[OS_TASKMGRSENDBUFFSIZE];
|
||||
#if (SYSCFG_DEBUG_SENDLEN == __ENABLED__)
|
||||
extern s_u16_t _XDATA_MEM_ s_taskmgr_sendlen;
|
||||
#endif
|
||||
extern s_u32_t _DEBUG_MEM_ s_taskmgr_upspeed;
|
||||
extern s_alarm_ts _DEBUG_MEM_ s_alarm;
|
||||
extern s_fault_ts _DEBUG_MEM_ s_fault;
|
||||
#if (SYSCFG_SYSTICKTIME_COUNT == __ENABLED__)
|
||||
extern s_u32_t _DEBUG_MEM_ s_tick_count1;
|
||||
extern s_u32_t _DEBUG_MEM_ s_tick_count2;
|
||||
#endif
|
||||
#if (SYSCFG_TASKPC_MONITOR == __ENABLED__)
|
||||
extern m_pc_t _SYS_MEM_ s_pc;
|
||||
#endif
|
||||
#if (SYSCFG_RUNTIME_COUNT == __ENABLED__)
|
||||
extern s_runtime_ts _DEBUG_MEM_ s_runtime;
|
||||
#endif
|
||||
#endif
|
||||
/* The Task */
|
||||
extern s_u8_t const _CONST_MEM_ s_task_pickmap[SYSCFG_TASKPICKBITMAP * 128];
|
||||
extern s_taskctrl_tsp _QUE_MEM_ s_task_queue[SYSCFG_TASKPRIORITY];
|
||||
extern m_tqcount_t _QUE_MEM_ s_task_queue_count;
|
||||
#if (SYSCFG_TASKPRIORITY > 64)
|
||||
extern s_u8_t _QUE_MEM_ s_task_table_index;
|
||||
extern s_u8_t _QUE_MEM_ s_task_bytes_index[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)];
|
||||
extern s_u8_t _QUE_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 64 + !!(SYSCFG_TASKPRIORITY % 64)][8];
|
||||
#elif (SYSCFG_TASKPRIORITY > 8)
|
||||
extern s_u8_t _QUE_MEM_ s_task_bytes_index;
|
||||
extern s_u8_t _QUE_MEM_ s_task_ready_table[SYSCFG_TASKPRIORITY / 8 + !!(SYSCFG_TASKPRIORITY % 8)];
|
||||
#else
|
||||
extern s_u8_t _QUE_MEM_ s_task_ready_table;
|
||||
#endif
|
||||
#if (SYSCFG_SAMEPRISCHEDULE)
|
||||
extern s_u8_t _QUE_MEM_ s_task_ready_count[SYSCFG_TASKPRIORITY];
|
||||
#elif (SYSCFG_MUTEX == __ENABLED__)
|
||||
extern s_u8_t _SYS_MEM_ s_taskpri_ceiling;
|
||||
#endif
|
||||
#if (SYSCFG_PENDSVFIFO_DEPTH > 0 && SYSCFG_PENDSVFIFO_ERRORCALLBACK == __ENABLED__)
|
||||
extern s_ecode_t _SYS_MEM_ s_psvfifo_ecode;
|
||||
#endif
|
||||
extern void (_CODE_MEM_ * const _CONST_MEM_ sPendSV_FIFOHandler[OS_SVID_END])(void _STATIC_MEM_ *sv);
|
||||
|
||||
#endif
|
||||
+952
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,54 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_com.h
|
||||
* @brief 内核公共服务
|
||||
* @details 在服务层临界区中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_COM_H
|
||||
#define __SV_COM_H
|
||||
|
||||
#include "os_redef.h"
|
||||
void sa_add_ready (s_taskctrl_tsp htask);
|
||||
void sa_remove_ready (s_taskctrl_tsp htask);
|
||||
void sa_insert_taskque (s_taskctrl_tsp htask);
|
||||
void sa_remove_taskque (s_taskctrl_tsp htask);
|
||||
void sa_insert_blocklist (s_taskctrl_tsp *h2task);
|
||||
void sa_remove_blocklist (s_taskctrl_tsp htask);
|
||||
void sa_insert_timerlist (s_taskctrl_tsp htask, s_delay_t tick);
|
||||
void sa_remove_timerlist (s_taskctrl_tsp htask);
|
||||
void sa_block_to_float (s_taskctrl_tsp htask);
|
||||
void sa_float_to_block (s_taskctrl_tsp htask);
|
||||
void sa_block_to_ready (s_taskctrl_tsp htask);
|
||||
void sa_resume_task (s_taskctrl_tsp htask);
|
||||
void sa_suspend_task (s_taskctrl_tsp htask);
|
||||
void sa_stop_task (s_taskctrl_tsp htask);
|
||||
void sa_free_task (s_taskctrl_tsp htask);
|
||||
void sa_delete_task (s_taskctrl_tsp htask);
|
||||
void sa_reset_task (s_taskctrl_tsp htask, s_u8_t status);
|
||||
void sa_clear_block (s_taskctrl_tsp htask);
|
||||
void sa_set_block (s_taskctrl_tsp htask, s_delay_t tick);
|
||||
void sa_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
|
||||
|
||||
void sc_clear_delay (void);
|
||||
s_ecode_t sc_resume_task (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_suspend_task (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_delete_task (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_reset_task (s_taskctrl_tsp htask, s_u8_t status);
|
||||
s_ecode_t sc_clear_block (s_taskctrl_tsp htask);
|
||||
s_ecode_t sc_set_block (s_taskctrl_tsp htask, s_delay_t tick);
|
||||
s_ecode_t sc_set_taskpri (s_taskctrl_tsp htask, s_u8_t npri);
|
||||
void sc_write_binary (s_binary_tsp hbin, bool value);
|
||||
void sc_give_semaph (s_semaph_tsp hsem);
|
||||
void sc_send_fetion (s_tionbox_tsp htbox, m_fetion_t tion);
|
||||
void sc_send_mail (s_mailbox_tsp hmbox, void *mail);
|
||||
s_ecode_t sc_send_msg (s_msgque_tsp hque, void *msg);
|
||||
void *sc_recv_msg_staque (s_staque_tsp hque);
|
||||
void *sc_recv_msg_dynque (s_dynque_tsp hque);
|
||||
void sc_timint (s_u8_t tmid, s_timint_t tick);
|
||||
void sc_timqry (s_u8_t tmid, s_timqry_t tick);
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,308 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_create.h
|
||||
* @brief 创建服务
|
||||
* @details 用于创建 CosyOS 内核对象。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_CREATE_H
|
||||
#define __SV_CREATE_H
|
||||
|
||||
/**
|
||||
@addtogroup CosyOS_内核服务
|
||||
@{
|
||||
*//**
|
||||
\defgroup 创建服务
|
||||
\brief 用于创建 CosyOS 内核对象。
|
||||
@{
|
||||
*/
|
||||
|
||||
/*
|
||||
* 声明任务
|
||||
*/
|
||||
|
||||
/** 简化声明静态任务 */
|
||||
#define sCSV_ExtTask(name) \
|
||||
extern s_taskctrl_ts u_taskload_##name; \
|
||||
void u_task_##name
|
||||
|
||||
/** 简化声明动态任务 */
|
||||
#define dCSV_ExtTask(name) \
|
||||
extern s_taskload_ts u_taskload_##name; \
|
||||
void u_task_##name
|
||||
|
||||
/** 完整声明静态任务 */
|
||||
#define sCSV_ExternTask(name) \
|
||||
extern s_taskctrl_tsp name; \
|
||||
sCSV_ExtTask(name)
|
||||
|
||||
/** 完整声明动态任务 */
|
||||
#define dCSV_ExternTask(name) \
|
||||
extern s_taskctrl_tsp name; \
|
||||
dCSV_ExtTask(name)
|
||||
|
||||
|
||||
/*
|
||||
* 创建任务
|
||||
*/
|
||||
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||
/** 静态创建,启用 DEBUGGING,启用 安全运行时 */
|
||||
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskctrl_ts u_taskload_##name = {0, pri, tss, &name, ety, res, srt, u_taskstack_##name, 0, OS_STATUS_DELETED}
|
||||
#else /** 静态创建,启用 DEBUGGING,禁用 安全运行时 */
|
||||
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskctrl_ts u_taskload_##name = {0, pri, tss, &name, ety, res, u_taskstack_##name, 0, OS_STATUS_DELETED}
|
||||
#endif
|
||||
#else
|
||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||
/** 静态创建,禁用 DEBUGGING,启用 安全运行时 */
|
||||
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskctrl_ts u_taskload_##name = {0, pri, tss, &name, ety, srt, u_taskstack_##name, 0, OS_STATUS_DELETED}
|
||||
#else /** 静态创建,禁用 DEBUGGING,禁用 安全运行时 */
|
||||
#define sCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskctrl_ts u_taskload_##name = {0, pri, tss, &name, ety, u_taskstack_##name, 0, OS_STATUS_DELETED}
|
||||
#endif
|
||||
#endif
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||
/** 动态创建,启用 DEBUGGING,启用 安全运行时 */
|
||||
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskload_ts u_taskload_##name = {0, pri, tss, &name, ety, res, srt}
|
||||
#else /** 动态创建,启用 DEBUGGING,禁用 安全运行时 */
|
||||
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskload_ts u_taskload_##name = {0, pri, tss, &name, ety, res}
|
||||
#endif
|
||||
#else
|
||||
#if (SYSCFG_SAFERUNTIME == __ENABLED__)
|
||||
/** 动态创建,禁用 DEBUGGING,启用 安全运行时 */
|
||||
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskload_ts u_taskload_##name = {0, pri, tss, &name, ety, srt}
|
||||
#else /** 动态创建,禁用 DEBUGGING,禁用 安全运行时 */
|
||||
#define dCSV_CreateTask_0(name, pri, tss, srt, res, ety) \
|
||||
s_taskload_ts u_taskload_##name = {0, pri, tss, &name, ety}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** 静态创建一般任务 */
|
||||
#define sCSV_CreateTask(name, pri, tss, srt, res) \
|
||||
void u_task_##name(void); \
|
||||
s_taskctrl_ts u_taskload_##name; \
|
||||
s_taskctrl_tsp name = &u_taskload_##name; \
|
||||
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
|
||||
sCSV_CreateTask_0(name, pri, tss, srt, res, u_task_##name); \
|
||||
void u_task_##name(void) MCUCFG_TASK_ATTRIBUTE
|
||||
|
||||
/** 动态创建一般任务 */
|
||||
#define dCSV_CreateTask(name, pri, tss, srt, res) \
|
||||
void u_task_##name(void); \
|
||||
s_taskctrl_tsp name = OS_NULL; \
|
||||
dCSV_CreateTask_0(name, pri, tss, srt, res, u_task_##name); \
|
||||
void u_task_##name(void) MCUCFG_TASK_ATTRIBUTE
|
||||
|
||||
/** 静态创建私信任务 */
|
||||
#define sCSV_CreateTaskmsg(name, pri, tss, srt, res, ntm) \
|
||||
s_taskctrl_ts u_taskload_##name; \
|
||||
s_taskctrl_tsp name = &u_taskload_##name; \
|
||||
MCUCFG_STACK_ALIGN static s_u8_t u_taskstack_##name[tss]; \
|
||||
sCSV_CreateTask_0(name, pri, tss, srt, res, OS_NULL); \
|
||||
void u_task_##name sCreateTaskMsg_##ntm
|
||||
|
||||
/** 动态创建私信任务 */
|
||||
#define dCSV_CreateTaskmsg(name, pri, tss, srt, res, ntm) \
|
||||
s_taskctrl_tsp name = OS_NULL; \
|
||||
dCSV_CreateTask_0(name, pri, tss, srt, res, OS_NULL); \
|
||||
void u_task_##name sCreateTaskMsg_##ntm
|
||||
|
||||
/** for 定时任务 */
|
||||
#if defined ( __GNUC__ )
|
||||
#define s_hookorload_load(p) .load=(s_taskload_tsp)p
|
||||
#define s_hookorload_hook(p) .hook=p
|
||||
#else
|
||||
#define s_hookorload_load(p) (s_voidvoid_tfp)p
|
||||
#define s_hookorload_hook(p) p
|
||||
#endif
|
||||
#define OS_TIMQRYINIT (s_timqry_t)(SYSCFG_USERTIMQRYINIT - 1) /*!< 定时查询初始值 */
|
||||
|
||||
/** 静态创建定时中断任务 */
|
||||
#define sCSV_CreateTask_TimInt(tmid, arl, name, pri, tss, srt, res) \
|
||||
s_taskctrl_ts u_taskload_##name; \
|
||||
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 1, {s_hookorload_load(&u_taskload_##name)}}; \
|
||||
sCSV_CreateTask(name, pri, tss, srt, res)
|
||||
|
||||
/** 动态创建定时中断任务 */
|
||||
#define dCSV_CreateTask_TimInt(tmid, arl, name, pri, tss, srt, res) \
|
||||
s_taskload_ts u_taskload_##name; \
|
||||
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 1, {s_hookorload_load(&u_taskload_##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_OSIT_ATTRIBUTE {return (event ? true : false);} \
|
||||
s_taskctrl_ts u_taskload_##name; \
|
||||
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, {s_hookorload_load(&u_taskload_##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_OSIT_ATTRIBUTE {return (event ? true : false);} \
|
||||
s_taskload_ts u_taskload_##name; \
|
||||
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 1, {s_hookorload_load(&u_taskload_##name)}, u_timqryevent_##tmid}; \
|
||||
dCSV_CreateTask(name, pri, tss, srt, res)
|
||||
|
||||
|
||||
/*
|
||||
* 创建钩子
|
||||
*/
|
||||
|
||||
/** 创建定时中断钩子 */
|
||||
#define sCSV_CreateHook_TimInt(tmid, arl) \
|
||||
void u_timint_##tmid(void); \
|
||||
s_timinthand_ts _STATIC_MEM_ u_timinthand_##tmid = {0, 0, arl, 0, {s_hookorload_hook(u_timint_##tmid)}}; \
|
||||
void u_timint_##tmid(void) MCUCFG_OSIT_ATTRIBUTE
|
||||
|
||||
/** 创建定时查询钩子 */
|
||||
#define sCSV_CreateHook_TimQry(tmid, event, arl) \
|
||||
void u_timqry_##tmid(void); \
|
||||
bool u_timqryevent_##tmid(void) MCUCFG_OSIT_ATTRIBUTE {return (event ? true : false);} \
|
||||
s_timqryhand_ts _STATIC_MEM_ u_timqryhand_##tmid = {OS_TIMQRYINIT, OS_TIMQRYINIT, arl, 0, {s_hookorload_hook(u_timqry_##tmid)}, u_timqryevent_##tmid}; \
|
||||
void u_timqry_##tmid(void) MCUCFG_OSIT_ATTRIBUTE
|
||||
|
||||
|
||||
/*
|
||||
* 互斥信号量
|
||||
*/
|
||||
|
||||
/** 声明互斥信号量 */
|
||||
#define sCSV_ExternMut(name) \
|
||||
extern s_mutex_ts name
|
||||
|
||||
/** 创建互斥信号量并初始化 */
|
||||
#define sCSV_CreateMut(name) \
|
||||
s_mutex_ts name = {0}
|
||||
|
||||
/** 创建互斥信号量不初始化 */
|
||||
#define sCSV_CreateMut_NotInit(name) \
|
||||
s_mutex_ts name
|
||||
|
||||
|
||||
/*
|
||||
* 二值信号量
|
||||
*/
|
||||
|
||||
/** 声明二值信号量 */
|
||||
#define sCSV_ExternBin(name) \
|
||||
extern s_binary_ts name
|
||||
|
||||
/** 创建二值信号量并初始化 */
|
||||
#define sCSV_CreateBin(name, init) \
|
||||
s_binary_ts name = {OS_NULL, init}
|
||||
|
||||
/** 创建二值信号量不初始化 */
|
||||
#define sCSV_CreateBin_NotInit(name) \
|
||||
s_binary_ts name
|
||||
|
||||
|
||||
/*
|
||||
* 计数信号量
|
||||
*/
|
||||
|
||||
/** 声明计数信号量 */
|
||||
#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_CreateSem_NotInit(name) \
|
||||
s_semaph_ts name
|
||||
|
||||
|
||||
/*
|
||||
* 飞信
|
||||
*/
|
||||
|
||||
/** 声明信箱 */
|
||||
#define sCSV_ExternTionbox(name) \
|
||||
extern s_tionbox_ts name
|
||||
|
||||
/** 创建信箱并初始化 */
|
||||
#define sCSV_CreateTionbox(name) \
|
||||
s_tionbox_ts name = {0}
|
||||
|
||||
/** 创建信箱不初始化 */
|
||||
#define sCSV_CreateTionbox_NotInit(name) \
|
||||
s_tionbox_ts name
|
||||
|
||||
|
||||
/*
|
||||
* 邮箱
|
||||
*/
|
||||
|
||||
/** 声明邮箱 */
|
||||
#define sCSV_ExternMailbox(name) \
|
||||
extern s_mailbox_ts name
|
||||
|
||||
/** 创建邮箱并初始化 */
|
||||
#define sCSV_CreateMailbox(name) \
|
||||
s_mailbox_ts name = {0}
|
||||
|
||||
/** 创建邮箱不初始化 */
|
||||
#define sCSV_CreateMailbox_NotInit(name) \
|
||||
s_mailbox_ts name
|
||||
|
||||
|
||||
/*
|
||||
* 消息队列
|
||||
*/
|
||||
|
||||
/** 声明静态队列 */
|
||||
#define sCSV_ExternQueue_Static(name) \
|
||||
extern s_staque_ts name
|
||||
|
||||
/** 声明动态队列 */
|
||||
#define sCSV_ExternQueue_Dynamic(name) \
|
||||
extern s_dynque_ts name
|
||||
|
||||
/** 创建静态队列 */
|
||||
#define sCSV_CreateQueue_Static(name, mode, len) \
|
||||
void *u_queue_##name[len]; \
|
||||
s_staque_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) \
|
||||
s_dynque_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 u_##name##_ts volatile name
|
||||
|
||||
/** 创建标志组 */
|
||||
#define sCSV_CreateFlagGroup(name) \
|
||||
u_##name##_ts volatile name
|
||||
|
||||
|
||||
/*
|
||||
* 线程内存
|
||||
*/
|
||||
|
||||
/** 创建线程内存池 */
|
||||
#define sCSV_CreateMempool() \
|
||||
static s_thrmem_ts u_thrmem = {0}
|
||||
|
||||
/** @} */
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,189 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_int_fifo.h
|
||||
* @brief 中断FIFO服务-调用宏
|
||||
* @details 仅在用户中断中调用,而后挂起到 PendSV中断 中执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_INT_FIFO_H
|
||||
#define __SV_INT_FIFO_H
|
||||
|
||||
/**
|
||||
@addtogroup CosyOS_内核服务
|
||||
@{
|
||||
*//**
|
||||
\defgroup 中断FIFO服务
|
||||
\brief 在用户中断中调用但不在本地执行,而是把服务的相关内容写入到局部的结构体中,
|
||||
再把结构体指针入 PendSV_FIFO,再触发 PendSV,而后在 PendSV中断 中执行服务。
|
||||
@{
|
||||
*//**
|
||||
\ingroup 中断FIFO服务
|
||||
\defgroup 中断FIFO服务-调用宏
|
||||
@{
|
||||
*/
|
||||
|
||||
/** 清除就绪延时 */
|
||||
#define sIPS_ClearDelay() \
|
||||
do{ \
|
||||
static sp_svid_ts u_psv = {OS_SVID_CLEARDELAY}; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 恢复任务 */
|
||||
#define sIPS_ResumeTask(_htask) \
|
||||
do{ \
|
||||
static sp_task_ts u_psv = {OS_SVID_RESUMETASK, OS_NULL}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 挂起任务 */
|
||||
#define sIPS_SuspendTask(_htask) \
|
||||
do{ \
|
||||
static sp_task_ts u_psv = {OS_SVID_SUSPENDTASK, OS_NULL}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 删除任务 */
|
||||
#define sIPS_DeleteTask(_htask) \
|
||||
do{ \
|
||||
static sp_task_ts u_psv = {OS_SVID_DELETETASK, OS_NULL}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 重置任务 */
|
||||
#define sIPS_ResetTask(_htask, _status) \
|
||||
do{ \
|
||||
static sp_taskrst_ts u_psv = {OS_SVID_RESETTASK, OS_NULL, _status}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 清除阻塞(状态)*/
|
||||
#define sIPS_ClearBlock(_htask) \
|
||||
do{ \
|
||||
static sp_task_ts u_psv = {OS_SVID_CLEARBLOCK, OS_NULL}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 设置阻塞(时间)*/
|
||||
#define sIPS_SetBlock(_htask, _tick) \
|
||||
do{ \
|
||||
static sp_blocktime_ts u_psv = {OS_SVID_SETBLOCK, OS_NULL, _tick}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 设置任务优先级 */
|
||||
#define sIPS_SetTaskPri(_htask, _npri) \
|
||||
do{ \
|
||||
static sp_taskpri_ts u_psv = {OS_SVID_SETTASKPRI, OS_NULL, _npri}; \
|
||||
u_psv.htask = _htask; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 写二值信号量 */
|
||||
#define sIPS_WriteBin(_bin, _value) \
|
||||
do{ \
|
||||
static sp_binary_ts u_psv = {OS_SVID_WRITEBINARY, &_bin, _value}; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 给予计数信号量 */
|
||||
#define sIPS_GiveSem(_sem) \
|
||||
do{ \
|
||||
static sp_semaph_ts u_psv = {OS_SVID_GIVESEMAPH, &_sem}; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 发送飞信 */
|
||||
#define sIPS_SendFetion(_tbox, _tion) \
|
||||
do{ \
|
||||
static sp_tionbox_ts u_psv = {OS_SVID_SENDFETION, &_tbox, 0}; \
|
||||
u_psv.tion = _tion; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 发送邮件 */
|
||||
#define sIPS_SendMail(_mbox, _mail) \
|
||||
do{ \
|
||||
static sp_mailbox_ts u_psv = {OS_SVID_SENDMAIL, &_mbox, OS_NULL}; \
|
||||
u_psv.mail = _mail; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 发送消息 */
|
||||
#define sIPS_SendMsg(_que, _msg) \
|
||||
do{ \
|
||||
static sp_msgque_ts u_psv = {OS_SVID_SENDMSG, (s_msgque_tsp)&_que, OS_NULL}; \
|
||||
u_psv.msg = _msg; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 定时中断 */
|
||||
#define sIPS_TimInt(_tmid, _tick) \
|
||||
do{ \
|
||||
static sp_timint_ts u_psv = {OS_SVID_TIMINT, _tmid, 0}; \
|
||||
u_psv.tick = _tick; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 定时查询 */
|
||||
#define sIPS_TimQry(_tmid, _tick) \
|
||||
do{ \
|
||||
static sp_timqry_ts u_psv = {OS_SVID_TIMQRY, _tmid, 0}; \
|
||||
u_psv.tick = _tick; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 清除标志组 */
|
||||
#define sIPS_ClearFlagGroup(_group) \
|
||||
do{ \
|
||||
static sp_group_ts u_psv = {OS_SVID_WRITEGROUP, (void *)&_group, -sizeof(_group), ~0}; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 写多标志位 */
|
||||
#define sIPS_WriteFlagBits(_group, _sign, _nbit) \
|
||||
do{ \
|
||||
static sp_group_ts u_psv = {OS_SVID_WRITEGROUP, (void *)&_group, _sign##sizeof(_group), 0}; \
|
||||
u_##_group##_ts u_grp; \
|
||||
miWriteFlagBits(); \
|
||||
sizeof(u_grp) == 1 ? *(s_u8_t *)&u_grp = false : MCUCFG_TERNARY_MASK \
|
||||
sizeof(u_grp) == 2 ? *(s_u16_t *)&u_grp = false : MCUCFG_TERNARY_MASK \
|
||||
sizeof(u_grp) == 4 ? *(s_u32_t *)&u_grp = false : false; \
|
||||
siWriteFlagBits_##_nbit(
|
||||
|
||||
/** 全局变量写访问 */
|
||||
#define sIPS_WriteGVar(_gp, _lp, _size) \
|
||||
do{ \
|
||||
static sp_gvar_ts u_psv = {OS_SVID_WRITEGVAR, _gp, _lp, _size}; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 挂起服务调用 */
|
||||
#define sIPS_PendSVC(_fp) \
|
||||
do{ \
|
||||
static sp_pendsvc_ts u_psv = {OS_SVID_PENDSVC, _fp}; \
|
||||
mPendSV_FIFOLoad(); \
|
||||
}while(false)
|
||||
|
||||
/** 设置时间 */
|
||||
#define sIPS_SetTime(_t) \
|
||||
do{ \
|
||||
static m_rtccount_t const _c = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
|
||||
iWriteGAry(&s_rtc, _t, sizeof(s_rtc)); \
|
||||
iWriteGVar(s_rtc_counter, _c); \
|
||||
}while(false)
|
||||
|
||||
/** @} */
|
||||
/** @} */
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,149 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_int_loc.c
|
||||
* @brief 中断本地服务
|
||||
* @details 在用户中断中调用并直接在本地执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#include "sv_com.h"
|
||||
|
||||
/* 相对寄存器访问 for C51 */
|
||||
#if defined ( __C51__ )
|
||||
#pragma NOAREGS
|
||||
#endif
|
||||
|
||||
/**
|
||||
@addtogroup 中断本地服务
|
||||
@{
|
||||
*/
|
||||
|
||||
#if (SYSCFG_BINARY == __ENABLED__)
|
||||
/**
|
||||
\brief 获取二值信号量
|
||||
\param[in] hbin 二值信号量句柄
|
||||
\return 结果 [true:成功,false:失败]
|
||||
*/
|
||||
bool si_take_binary(s_binary_tsp hbin)
|
||||
{
|
||||
if(hbin->binary){
|
||||
hbin->binary = false;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (SYSCFG_FETION == __ENABLED__)
|
||||
/**
|
||||
\brief 接收飞信
|
||||
\param[in] htbox 信箱句柄
|
||||
\return 飞信数据 [false:失败]
|
||||
*/
|
||||
m_fetion_t si_recv_fetion(s_tionbox_tsp htbox)
|
||||
{
|
||||
m_fetion_t tion = htbox->tion;
|
||||
htbox->tion = false;
|
||||
return tion;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (SYSCFG_MAILBOX == __ENABLED__)
|
||||
/**
|
||||
\brief 接收邮件
|
||||
\param[in] hmbox 邮箱句柄
|
||||
\return 邮件指针 [NULL:失败]
|
||||
*/
|
||||
void *si_recv_mail(s_mailbox_tsp hmbox)
|
||||
{
|
||||
if(hmbox->flag){
|
||||
hmbox->flag = false;
|
||||
return hmbox->mail;
|
||||
}
|
||||
return OS_NULL;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (SYSCFG_MSGQUEUE == __ENABLED__) && (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||
#if defined ( __C51__ )
|
||||
/**
|
||||
\brief 获取队列互斥量
|
||||
\details 获取队列访问权限 for C51接收消息。
|
||||
\param[in] hque 队列句柄
|
||||
\return 结果 [true:成功,false:失败]
|
||||
*/
|
||||
bool si_take_quemut(s_msgque_tsp hque)
|
||||
{
|
||||
if(!hque->lock) return false;
|
||||
hque->lock = false;
|
||||
__mx_MMB();
|
||||
|
||||
if(hque->type == __DYNAMIC__){
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
s_fault.error_recvmsg_int = true;
|
||||
#endif
|
||||
}
|
||||
else if(!hque->counter);
|
||||
else return true;
|
||||
|
||||
__mx_MMB();
|
||||
hque->lock = true;
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
\brief 归还并返回
|
||||
\details 归还队列互斥量并返回消息指针 for C51接收消息。
|
||||
\param[out] mut 队列互斥量指针
|
||||
\param[in] msg 消息指针
|
||||
\return 消息指针 [NULL:失败]
|
||||
*/
|
||||
static void *_back_ret_(bool _STATIC_MEM_ *mut, void *msg)
|
||||
{
|
||||
*mut = true;
|
||||
return msg;
|
||||
}
|
||||
|
||||
/**
|
||||
\brief C51接收消息
|
||||
\param[in] hque 队列句柄
|
||||
\return 消息指针 [NULL:失败]
|
||||
*/
|
||||
void *si_recv_msg_c51(s_msgque_tsp hque)
|
||||
{
|
||||
void *msg = sc_recv_msg_staque((s_staque_tsp)hque);
|
||||
return _back_ret_((bool *)&hque->lock, msg);
|
||||
}
|
||||
#else
|
||||
/**
|
||||
\brief 非51接收消息
|
||||
\param[in] hque 队列句柄
|
||||
\return 消息指针 [NULL:失败]
|
||||
*/
|
||||
void *si_recv_msg_n51(s_msgque_tsp hque)
|
||||
{
|
||||
void *msg = OS_NULL;
|
||||
if(!hque->lock) return OS_NULL;
|
||||
hque->lock = false;
|
||||
__mx_MMB();
|
||||
|
||||
if(hque->type == __DYNAMIC__){
|
||||
#if (SYSCFG_DEBUGGING == __ENABLED__)
|
||||
s_fault.error_recvmsg_int = true;
|
||||
#endif
|
||||
}
|
||||
else if(hque->counter){
|
||||
msg = sc_recv_msg_staque((s_staque_tsp)hque);
|
||||
}
|
||||
|
||||
__mx_MMB();
|
||||
hque->lock = true;
|
||||
return msg;
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,60 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_int_loc.h
|
||||
* @brief 中断本地服务
|
||||
* @details 在用户中断中调用并直接在本地执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_INT_LOC_H
|
||||
#define __SV_INT_LOC_H
|
||||
|
||||
#include "os_redef.h"
|
||||
bool si_take_binary (s_binary_tsp hbin);
|
||||
bool si_take_quemut (s_msgque_tsp hque);
|
||||
void *si_recv_msg_c51(s_msgque_tsp hque);
|
||||
void *si_recv_msg_n51(s_msgque_tsp hque);
|
||||
void *si_recv_mail (s_mailbox_tsp hmbox);
|
||||
m_fetion_t si_recv_fetion (s_tionbox_tsp htbox);
|
||||
|
||||
/**
|
||||
@addtogroup CosyOS_内核服务
|
||||
@{
|
||||
*//**
|
||||
\defgroup 中断本地服务
|
||||
\brief 在用户中断中调用并直接在本地执行的服务。
|
||||
@{
|
||||
*/
|
||||
|
||||
#define sISV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
|
||||
#define sISV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
||||
#define sISV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
||||
|
||||
#if defined ( __C51__ )
|
||||
#define sISV_RecvMsg(que) (si_take_quemut((s_msgque_tsp)&que) ? si_recv_msg_c51((s_msgque_tsp)&que) : OS_NULL) /*!< C51接收消息 */
|
||||
#else
|
||||
#define sISV_RecvMsg(que) si_recv_msg_n51((s_msgque_tsp)&que) /*!< 非51接收消息 */
|
||||
#endif
|
||||
|
||||
/** 归还二值信号量 */
|
||||
#define sISV_BackBin(bin) \
|
||||
do{ \
|
||||
__mx_MMB(); \
|
||||
bin.binary = true; \
|
||||
}while(false)
|
||||
|
||||
/** 查询标志组 */
|
||||
#define sISV_QueryFlagGroup(group) \
|
||||
( \
|
||||
sizeof(group) == 1 ? *(s_u8_t *)&group ? true : false \
|
||||
: sizeof(group) == 2 ? *(s_u16_t *)&group ? true : false \
|
||||
: sizeof(group) == 4 ? *(s_u32_t *)&group ? true : false \
|
||||
: false \
|
||||
)
|
||||
|
||||
/** @} */
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,39 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_pend.h
|
||||
* @brief PSV服务
|
||||
* @details 仅在 PendSV中断 中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_PEND_H
|
||||
#define __SV_PEND_H
|
||||
|
||||
/**
|
||||
@addtogroup CosyOS_内核服务
|
||||
@{
|
||||
*//**
|
||||
\defgroup PSV服务
|
||||
\brief 仅在 PendSV中断 中调用并执行的服务。
|
||||
包括通过挂起服务调用(iPendSVC)间接调用,在挂起服务钩子(pendsv_hook)中调用。
|
||||
如果通过挂起服务调用(iPendSVC)间接调用,就是 FIFO服务;
|
||||
如果通过挂起服务钩子(pendsv_hook) 调用,就是 FIAG服务。
|
||||
@{
|
||||
*/
|
||||
|
||||
#define sPSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||
#define sPSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||
#define sPSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||
#define sPSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||
#define sPSV_ResetTask(htask, status) sc_reset_task(htask, status)/*!< 重置任务 */
|
||||
#define sPSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞(状态)*/
|
||||
#define sPSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞(时间)*/
|
||||
#define sPSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||
#define sPSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||
|
||||
/** @} */
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,456 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_task.h
|
||||
* @brief 任务服务
|
||||
* @details 仅在任务中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_TASK_H
|
||||
#define __SV_TASK_H
|
||||
|
||||
#include "os_var.h"
|
||||
|
||||
#if defined ( __C51__ ) || defined ( __C251__ )
|
||||
void su_schedule_locks (void);
|
||||
void su_kernel_lock0 (void);
|
||||
void su_kernel_unlock0 (void);
|
||||
s_ecode_t su_kernel_unlocks_rec(s_ecode_t e);
|
||||
void *su_kernel_unlocks_rvp(void *p);
|
||||
#endif
|
||||
|
||||
#if (SYSCFG_KERNELLOCKNESTING == __DISABLED__)
|
||||
#define su_kernel_locks su_kernel_lock0
|
||||
#elif defined ( __C51__ ) || defined ( __C251__ )
|
||||
void su_kernel_locks (void);
|
||||
#endif
|
||||
|
||||
void su_schedule_unlocks (void);
|
||||
void su_kernel_unlocks (void);
|
||||
void su_kernel_unlock0_psv(void);
|
||||
|
||||
s_ecode_t su_startup_task_0 (s_taskload_tsp hload, s_u8_t status);
|
||||
s_ecode_t su_startup_task_1 (s_taskload_tsp hload, s_u8_t status, s_voidvoid_tfp entry);
|
||||
s_ecode_t su_resume_suspend (s_taskctrl_tsp htask);
|
||||
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_semaph (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_msgque_tsp hque, s_delay_t tick);
|
||||
bool su_recv_taskmsg (s_u8_t volatile _STATIC_MEM_ *tmrf, s_delay_t tick);
|
||||
bool su_wait_group_1 (s_u8_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_wait_group_2 (s_u16_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_wait_group_4 (s_u32_t volatile _STATIC_MEM_ *hgrp, s_delay_t tick);
|
||||
bool su_query_group (void volatile _STATIC_MEM_ *hgrp, s_u8_t size);
|
||||
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 CosyOS_内核服务
|
||||
@{
|
||||
*//**
|
||||
\defgroup 任务服务
|
||||
\brief 仅在任务中调用并执行的服务。
|
||||
@{
|
||||
*/
|
||||
|
||||
#if !defined ( __C51__ ) && !defined ( __C251__ )
|
||||
/** 调度上锁(进入嵌套任务临界区)*/
|
||||
__STATIC_FORCEINLINE void su_schedule_locks(void)
|
||||
{
|
||||
s_sign_schedule.every[0] = true;
|
||||
__mx_MMB();
|
||||
s_schedulelock_counter++;
|
||||
}
|
||||
|
||||
/** 内核上锁(进入非嵌套服务层临界区)*/
|
||||
__STATIC_FORCEINLINE bool su_kernel_lock0(void)
|
||||
{
|
||||
mSysIRQ_Disable();
|
||||
return true;
|
||||
}
|
||||
|
||||
/** 内核解锁(退出非嵌套服务层临界区)*//*
|
||||
__STATIC_FORCEINLINE bool su_kernel_unlock0(void)
|
||||
{
|
||||
mSysIRQ_Enable();
|
||||
return true;
|
||||
}*/
|
||||
|
||||
/** 内核上锁(进入嵌套服务层临界区)*/
|
||||
#if (SYSCFG_KERNELLOCKNESTING == __ENABLED__)
|
||||
__STATIC_FORCEINLINE bool su_kernel_locks(void)
|
||||
{
|
||||
mSysIRQ_Disable();
|
||||
s_kernellock_counter++;
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
/** 内核解锁(退出嵌套服务层临界区)并返回(s_ecode_t) */
|
||||
__STATIC_FORCEINLINE s_ecode_t su_kernel_unlocks_rec(s_ecode_t e)
|
||||
{
|
||||
su_kernel_unlocks();
|
||||
return e;
|
||||
}
|
||||
|
||||
/** 内核解锁(退出嵌套服务层临界区)并返回(void *) */
|
||||
__STATIC_FORCEINLINE void *su_kernel_unlocks_rvp(void *p)
|
||||
{
|
||||
su_kernel_unlocks();
|
||||
return p;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* 操作任务
|
||||
*/
|
||||
|
||||
/** 启动任务 */
|
||||
#define sUSV_StartTask_0(hload, status) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_0((s_taskload_tsp)hload, status) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 启动任务 */
|
||||
#define sUSV_StartTask_1(hload, status, entry) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_startup_task_1((s_taskload_tsp)hload, status, (s_voidvoid_tfp)entry) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 恢复指定任务并挂起自身任务 */
|
||||
#define sUSV_ResumeSuspend(htask) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(su_resume_suspend(htask)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 恢复任务 */
|
||||
#define sUSV_ResumeTask(htask) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_resume_task(htask)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 挂起任务 */
|
||||
#define sUSV_SuspendTask(htask) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_suspend_task(htask)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 删除任务 */
|
||||
#define sUSV_DeleteTask(htask) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_delete_task(htask)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 重置任务 */
|
||||
#define sUSV_ResetTask(htask, status) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_reset_task(htask, status)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 清除阻塞(状态)*/
|
||||
#define sUSV_ClearBlock(htask) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_clear_block(htask)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 设置阻塞(时间)*/
|
||||
#define sUSV_SetBlock(htask, tick) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_set_block(htask, tick)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 设置任务优先级 */
|
||||
#define sUSV_SetTaskPri(htask, npri) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_set_taskpri(htask, npri)) : OS_ECODE_NOERROR \
|
||||
)
|
||||
|
||||
/** 自身任务延时 */
|
||||
#define sUSV_Delay(tick) \
|
||||
do{ \
|
||||
mSysIRQ_Disable(); \
|
||||
su_delay(tick); \
|
||||
}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(); \
|
||||
sc_write_binary(&bin, true); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
|
||||
/*
|
||||
* 计数信号量
|
||||
*/
|
||||
|
||||
/** 获取计数信号量 */
|
||||
#define sUSV_TakeSem(sem, tick) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_take_semaph(&sem, tick) : false \
|
||||
)
|
||||
|
||||
/** 给予计数信号量 */
|
||||
#define sUSV_GiveSem(sem) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
sc_give_semaph(&sem); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
|
||||
/*
|
||||
* 私信
|
||||
*/
|
||||
|
||||
/** 接收私信 */
|
||||
#define sUSV_RecvTaskmsg(tick) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_lock0))() || true ? su_recv_taskmsg(&u_tmrf, tick) : false \
|
||||
)
|
||||
|
||||
/** 发送私信 */
|
||||
#define sUSV_SendTaskmsg(task) \
|
||||
su_kernel_locks(); \
|
||||
s_taskmsg_sign = 2; \
|
||||
sa_block_to_ready(task); \
|
||||
u_task_##task
|
||||
|
||||
|
||||
/*
|
||||
* 飞信
|
||||
*/
|
||||
|
||||
/** 接收飞信 */
|
||||
#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(); \
|
||||
sc_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(); \
|
||||
sc_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_msgque_tsp)&que, tick) : OS_NULL \
|
||||
)
|
||||
|
||||
/** 发送消息 */
|
||||
#define sUSV_SendMsg(que, msg) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rec(sc_send_msg((s_msgque_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_TERNARY_MASK \
|
||||
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARY_MASK \
|
||||
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
/** 写多标志位 */
|
||||
#define sUSV_WriteFlagBits(group, value, nbit) \
|
||||
suWriteFlagBits_##nbit(group, value,
|
||||
|
||||
|
||||
/*
|
||||
* 定时
|
||||
*/
|
||||
|
||||
/** 定时中断 */
|
||||
#define sUSV_TimInt(tmid, tick) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
sc_timint(tmid, tick); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
/** 定时查询 */
|
||||
#define sUSV_TimQry(tmid, tick) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
sc_timqry(tmid, tick); \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
|
||||
/*
|
||||
* 软件RTC
|
||||
*/
|
||||
|
||||
/** 获取时间 */
|
||||
#define sUSV_GetTime(t) \
|
||||
( \
|
||||
(m_boolvoid_tf(su_kernel_locks))() || true ? su_kernel_unlocks_rvp(s_memcpy(t, &s_rtc, sizeof(s_rtc))) : OS_NULL \
|
||||
)
|
||||
|
||||
/** 设置时间 */
|
||||
#define sUSV_SetTime(t) \
|
||||
do{ \
|
||||
su_kernel_locks(); \
|
||||
s_memcpy(&s_rtc, t, sizeof(s_rtc)); \
|
||||
s_rtc_counter = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
|
||||
su_kernel_unlocks(); \
|
||||
}while(false)
|
||||
|
||||
|
||||
/*
|
||||
* 进程内存
|
||||
*/
|
||||
|
||||
/** 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
|
||||
@@ -0,0 +1,70 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_tick.c
|
||||
* @brief 滴答服务
|
||||
* @details 仅在 SysTick中断 中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#include "os_var.h"
|
||||
#include "sv_com.h"
|
||||
|
||||
/**
|
||||
@addtogroup 滴答服务
|
||||
@{
|
||||
*/
|
||||
|
||||
#if (SYSCFG_SEMAPHORE == __ENABLED__)
|
||||
/**
|
||||
\brief 获取计数信号量
|
||||
\param[in] hsem 计数信号量句柄
|
||||
\return 结果
|
||||
\retval false 失败
|
||||
\retval true 成功
|
||||
*/
|
||||
bool st_take_semaph(s_semaph_tsp hsem) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
s_semaph_t counter = hsem->counter;
|
||||
if(counter){
|
||||
hsem->counter = counter - 1;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
|
||||
#if (SYSCFG_MSGQUEUE == __ENABLED__)
|
||||
/**
|
||||
\brief 接收消息
|
||||
\param[in] hque 队列句柄
|
||||
\return 消息指针
|
||||
\retval NULL 无消息
|
||||
*/
|
||||
void *st_recv_msg(s_msgque_tsp hque) MCUCFG_OSIT_ATTRIBUTE
|
||||
{
|
||||
void *msg = OS_NULL;
|
||||
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||
hque->lock = false;
|
||||
__mx_MMB();
|
||||
#endif
|
||||
|
||||
if(hque->counter){
|
||||
if(hque->type == __DYNAMIC__){
|
||||
msg = sc_recv_msg_dynque((s_dynque_tsp)hque);
|
||||
}
|
||||
else{
|
||||
msg = sc_recv_msg_staque((s_staque_tsp)hque);
|
||||
}
|
||||
}
|
||||
|
||||
#if (SYSCFG_MSGQUEUE_INTRECV == __ENABLED__)
|
||||
__mx_MMB();
|
||||
hque->lock = true;
|
||||
#endif
|
||||
return msg;
|
||||
}
|
||||
#endif
|
||||
|
||||
/** @} */
|
||||
@@ -0,0 +1,98 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_tick.h
|
||||
* @brief 滴答服务
|
||||
* @details 仅在 SysTick中断 中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_TICK_H
|
||||
#define __SV_TICK_H
|
||||
|
||||
#include "os_redef.h"
|
||||
bool st_take_semaph (s_semaph_tsp hsem);
|
||||
void *st_recv_msg (s_msgque_tsp hque);
|
||||
|
||||
/**
|
||||
@addtogroup CosyOS_内核服务
|
||||
@{
|
||||
*//**
|
||||
\defgroup 滴答服务
|
||||
\brief 仅在 SysTick中断 中调用并执行的服务。
|
||||
包括直接在 SysTick中断 中调用,在滴答钩子(tick_hook)、定时中断钩子(u_timint_##tmid)、
|
||||
定时查询钩子(u_timqry_##tmid)、定时查询事件(u_timqryevent_##tmid)中调用。
|
||||
@{
|
||||
*/
|
||||
|
||||
#define sTSV_ClearDelay() sc_clear_delay() /*!< 清除就绪延时 */
|
||||
#define sTSV_ResumeTask(htask) sc_resume_task(htask) /*!< 恢复任务 */
|
||||
#define sTSV_SuspendTask(htask) sc_suspend_task(htask) /*!< 挂起任务 */
|
||||
#define sTSV_DeleteTask(htask) sc_delete_task(htask) /*!< 删除任务 */
|
||||
#define sTSV_ResetTask(htask, status) sc_reset_task(htask, status) /*!< 重置任务 */
|
||||
#define sTSV_ClearBlock(htask) sc_clear_block(htask) /*!< 清除阻塞 */
|
||||
#define sTSV_SetBlock(htask, tick) sc_set_block(htask, tick) /*!< 设置阻塞 */
|
||||
#define sTSV_SetTaskPri(htask, npri) sc_set_taskpri(htask, npri) /*!< 设置任务优先级 */
|
||||
#define sTSV_GiveBin(bin) sc_write_binary(&bin, true) /*!< 给予二值信号量 */
|
||||
#define sTSV_GiveSem(sem) sc_give_semaph(&sem) /*!< 给予计数信号量 */
|
||||
#define sTSV_SendFetion(tbox, tion) sc_send_fetion(&tbox, tion) /*!< 发送飞信 */
|
||||
#define sTSV_SendMail(mbox, mail) sc_send_mail(&mbox, mail) /*!< 发送邮件 */
|
||||
#define sTSV_SendMsg(que, msg) sc_send_msg((s_msgque_tsp)&que, msg)/*!< 发送消息 */
|
||||
#define sTSV_TimInt(tmid, tick) sc_timint(tmid, tick) /*!< 定时中断 */
|
||||
#define sTSV_TimQry(tmid, tick) sc_timqry(tmid, tick) /*!< 定时查询 */
|
||||
|
||||
#define sTSV_TakeSem(sem) st_take_semaph(&sem) /*!< 获取计数信号量 */
|
||||
#define sTSV_RecvMsg(que) st_recv_msg((s_msgque_tsp)&que) /*!< 接收消息 */
|
||||
|
||||
#define sTSV_TakeBin(bin) si_take_binary(&bin) /*!< 获取二值信号量 */
|
||||
#define sTSV_RecvFetion(tbox) si_recv_fetion(&tbox) /*!< 接收飞信 */
|
||||
#define sTSV_RecvMail(mbox) si_recv_mail(&mbox) /*!< 接收邮件 */
|
||||
|
||||
#define sTSV_GetTime(t) s_memcpy(t, &s_rtc, sizeof(s_rtc)) /*!< 获取时间 */
|
||||
|
||||
/** 归还二值信号量 */
|
||||
#define sTSV_BackBin(bin) \
|
||||
do{ \
|
||||
__mx_MMB(); \
|
||||
bin.binary = true; \
|
||||
}while(false)
|
||||
|
||||
/** 发送私信 */
|
||||
#define sTSV_SendTaskmsg(task) \
|
||||
s_taskmsg_sign = 1; \
|
||||
sa_block_to_ready(task); \
|
||||
u_task_##task
|
||||
|
||||
/** 设置时间 */
|
||||
#define sTSV_SetTime(t) \
|
||||
do{ \
|
||||
s_memcpy(&s_rtc, t, sizeof(s_rtc)); \
|
||||
s_rtc_counter = 1000000UL / SYSCFG_SYSTICK_CYCLE / 2 + 1; \
|
||||
}while(false)
|
||||
|
||||
/** 查询标志组 */
|
||||
#define sTSV_QueryFlagGroup(group) \
|
||||
( \
|
||||
sizeof(group) == 1 ? *(s_u8_t *)&group ? true : false \
|
||||
: sizeof(group) == 2 ? *(s_u16_t *)&group ? true : false \
|
||||
: sizeof(group) == 4 ? *(s_u32_t *)&group ? true : false \
|
||||
: false \
|
||||
)
|
||||
|
||||
/** 清除标志组 */
|
||||
#define sTSV_ClearFlagGroup(group) \
|
||||
do{ \
|
||||
sizeof(group) == 1 ? *(s_u8_t *)&group = false : MCUCFG_TERNARY_MASK \
|
||||
sizeof(group) == 2 ? *(s_u16_t *)&group = false : MCUCFG_TERNARY_MASK \
|
||||
sizeof(group) == 4 ? *(s_u32_t *)&group = false : false; \
|
||||
}while(false)
|
||||
|
||||
/** 写多标志位 */
|
||||
#define sTSV_WriteFlagBits(group, value, nbit) \
|
||||
stWriteFlagBits_##nbit(group, value,
|
||||
|
||||
/** @} */
|
||||
/** @} */
|
||||
|
||||
#endif
|
||||
+2103
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,297 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file ur_eapi.h
|
||||
* @brief 用户API扩展
|
||||
* @details 用户API的补充扩展定义,仅是定义无注释说明,所有内核服务的API说明
|
||||
均在 ur_api.h 中,并支持 doxygen。
|
||||
* @author 迟凯峰
|
||||
* @version v3.0.0
|
||||
* @date 2026.07.21
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __UR_EAPI_H
|
||||
#define __UR_EAPI_H
|
||||
|
||||
|
||||
/*
|
||||
* tpi(s)
|
||||
*/
|
||||
|
||||
/* 清除就绪延时 */
|
||||
//#define tClearDelay() sTSV_ClearDelay()
|
||||
#define pClearDelay() sPSV_ClearDelay()
|
||||
#define iClearDelay() sIPS_ClearDelay()
|
||||
|
||||
|
||||
/*
|
||||
* utpi(s)
|
||||
*/
|
||||
|
||||
/* 恢复任务 */
|
||||
//#define uResumeTask(task) sUSV_ResumeTask(task)
|
||||
#define tResumeTask(task) sTSV_ResumeTask(task)
|
||||
#define pResumeTask(task) sPSV_ResumeTask(task)
|
||||
#define iResumeTask(task) sIPS_ResumeTask(task)
|
||||
|
||||
/* 挂起任务 */
|
||||
//#define uSuspendTask(task) sUSV_SuspendTask(task)
|
||||
#define tSuspendTask(task) sTSV_SuspendTask(task)
|
||||
#define pSuspendTask(task) sPSV_SuspendTask(task)
|
||||
#define iSuspendTask(task) sIPS_SuspendTask(task)
|
||||
|
||||
/* 删除任务 */
|
||||
//#define uDeleteTask(task) sUSV_DeleteTask(task)
|
||||
#define tDeleteTask(task) sTSV_DeleteTask(task)
|
||||
#define pDeleteTask(task) sPSV_DeleteTask(task)
|
||||
#define iDeleteTask(task) sIPS_DeleteTask(task)
|
||||
|
||||
/* 重置任务 */
|
||||
//#define uResetTask(task, status) sUSV_ResetTask(task, status)
|
||||
#define tResetTask(task, status) sTSV_ResetTask(task, status)
|
||||
#define pResetTask(task, status) sPSV_ResetTask(task, status)
|
||||
#define iResetTask(task, status) sIPS_ResetTask(task, status)
|
||||
|
||||
/* 设置任务优先级 */
|
||||
//#define uSetTaskPri(task, npri) sUSV_SetTaskPri(task, npri)
|
||||
#define tSetTaskPri(task, npri) sTSV_SetTaskPri(task, npri)
|
||||
#define pSetTaskPri(task, npri) sPSV_SetTaskPri(task, npri)
|
||||
#define iSetTaskPri(task, npri) sIPS_SetTaskPri(task, npri)
|
||||
|
||||
/* 清除阻塞(状态)*/
|
||||
//#define uClearBlock(task) sUSV_ClearBlock(task)
|
||||
#define tClearBlock(task) sTSV_ClearBlock(task)
|
||||
#define pClearBlock(task) sPSV_ClearBlock(task)
|
||||
#define iClearBlock(task) sIPS_ClearBlock(task)
|
||||
|
||||
/* 设置阻塞-滴答周期 */
|
||||
//#define uSetBlock_tc(task, tc) sUSV_SetBlock(task, tc)
|
||||
#define tSetBlock_tc(task, tc) sTSV_SetBlock(task, tc)
|
||||
#define pSetBlock_tc(task, tc) sPSV_SetBlock(task, tc)
|
||||
#define iSetBlock_tc(task, tc) sIPS_SetBlock(task, tc)
|
||||
|
||||
/* 设置阻塞-毫秒 */
|
||||
//#define uSetBlock_ms(task, ms) uSetBlock_tc(task, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
#define tSetBlock_ms(task, ms) tSetBlock_tc(task, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
#define pSetBlock_ms(task, ms) pSetBlock_tc(task, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
#define iSetBlock_ms(task, ms) iSetBlock_tc(task, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
|
||||
/* 设置阻塞-秒钟 */
|
||||
//#define uSetBlock_s(task, s) uSetBlock_ms(task, 1000UL * (s))
|
||||
#define tSetBlock_s(task, s) tSetBlock_ms(task, 1000UL * (s))
|
||||
#define pSetBlock_s(task, s) pSetBlock_ms(task, 1000UL * (s))
|
||||
#define iSetBlock_s(task, s) iSetBlock_ms(task, 1000UL * (s))
|
||||
|
||||
/* 设置阻塞-分钟 */
|
||||
//#define uSetBlock_m(task, m) uSetBlock_s(task, 60UL * (m))
|
||||
#define tSetBlock_m(task, m) tSetBlock_s(task, 60UL * (m))
|
||||
#define pSetBlock_m(task, m) pSetBlock_s(task, 60UL * (m))
|
||||
#define iSetBlock_m(task, m) iSetBlock_s(task, 60UL * (m))
|
||||
|
||||
/* 设置阻塞-小时 */
|
||||
//#define uSetBlock_h(task, h) uSetBlock_m(task, 60UL * (h))
|
||||
#define tSetBlock_h(task, h) tSetBlock_m(task, 60UL * (h))
|
||||
#define pSetBlock_h(task, h) pSetBlock_m(task, 60UL * (h))
|
||||
#define iSetBlock_h(task, h) iSetBlock_m(task, 60UL * (h))
|
||||
|
||||
/* 给予二值信号量 */
|
||||
//#define uGiveBin(bin) sUSV_GiveBin(bin)
|
||||
#define tGiveBin(bin) sTSV_GiveBin(bin)
|
||||
#define pGiveBin(bin) sPSV_GiveBin(bin)
|
||||
#define iGiveBin(bin) sIPS_WriteBin(bin, true)
|
||||
|
||||
/* 上锁二值信号量 */
|
||||
//#define uLockBin(bin) bin.binary = false
|
||||
#define tLockBin(bin) bin.binary = false
|
||||
#define pLockBin(bin) bin.binary = false
|
||||
#define iLockBin(bin) sIPS_WriteBin(bin, false)
|
||||
|
||||
|
||||
/*
|
||||
* uti(s)
|
||||
*/
|
||||
|
||||
/* 给予计数信号量 */
|
||||
//#define uGiveSem(sem) sUSV_GiveSem(sem)
|
||||
#define tGiveSem(sem) sTSV_GiveSem(sem)
|
||||
#define iGiveSem(sem) sIPS_GiveSem(sem)
|
||||
|
||||
/* 发送飞信 */
|
||||
//#define uSendFetion(tbox, tion) sUSV_SendFetion(tbox, tion)
|
||||
#define tSendFetion(tbox, tion) sTSV_SendFetion(tbox, tion)
|
||||
#define iSendFetion(tbox, tion) sIPS_SendFetion(tbox, tion)
|
||||
|
||||
/* 发送邮件 */
|
||||
//#define uSendMail(mbox, mail) sUSV_SendMail(mbox, mail)
|
||||
#define tSendMail(mbox, mail) sTSV_SendMail(mbox, mail)
|
||||
#define iSendMail(mbox, mail) sIPS_SendMail(mbox, mail)
|
||||
|
||||
/* 发送消息 */
|
||||
//#define uSendMsg(que, msg) sUSV_SendMsg(que, msg)
|
||||
#define tSendMsg(que, msg) sTSV_SendMsg(que, msg)
|
||||
#define iSendMsg(que, msg) sIPS_SendMsg(que, msg)
|
||||
|
||||
/* 清除标志组 */
|
||||
//#define uClearFlagGroup(group) sUSV_ClearFlagGroup(group)
|
||||
#define tClearFlagGroup(group) sTSV_ClearFlagGroup(group)
|
||||
#define iClearFlagGroup(group) sIPS_ClearFlagGroup(group)
|
||||
|
||||
/* 设置标志位 */
|
||||
//#define uSetFlagBit(group, bit) uSetFlagBits(group, 1) bit)
|
||||
#define tSetFlagBit(group, bit) tSetFlagBits(group, 1) bit)
|
||||
#define iSetFlagBit(group, bit) iSetFlagBits(group, 1) bit)
|
||||
|
||||
/* 清除标志位 */
|
||||
//#define uClearFlagBit(group, bit) uClearFlagBits(group, 1) bit)
|
||||
#define tClearFlagBit(group, bit) tClearFlagBits(group, 1) bit)
|
||||
#define iClearFlagBit(group, bit) iClearFlagBits(group, 1) bit)
|
||||
|
||||
/* 设置多标志位 */
|
||||
//#define uSetFlagBits(group, nbit) sUSV_WriteFlagBits(group, true, nbit)
|
||||
#define tSetFlagBits(group, nbit) sTSV_WriteFlagBits(group, true, nbit)
|
||||
#define iSetFlagBits(group, nbit) sIPS_WriteFlagBits(group, +, nbit)
|
||||
|
||||
/* 清除多标志位 */
|
||||
//#define uClearFlagBits(group, nbit) sUSV_WriteFlagBits(group, false, nbit)
|
||||
#define tClearFlagBits(group, nbit) sTSV_WriteFlagBits(group, false, nbit)
|
||||
#define iClearFlagBits(group, nbit) sIPS_WriteFlagBits(group, -, nbit)
|
||||
|
||||
/* 定时中断-滴答周期 */
|
||||
//#define uTimInt_tc(tmid, tc) sUSV_TimInt(tmid, tc)
|
||||
#define tTimInt_tc(tmid, tc) sTSV_TimInt(tmid, tc)
|
||||
#define iTimInt_tc(tmid, tc) sIPS_TimInt(tmid, tc)
|
||||
|
||||
/* 定时中断-毫秒 */
|
||||
//#define uTimInt_ms(tmid, ms) uTimInt_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
#define tTimInt_ms(tmid, ms) tTimInt_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
#define iTimInt_ms(tmid, ms) iTimInt_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
|
||||
/* 定时中断-秒钟 */
|
||||
//#define uTimInt_s(tmid, s) uTimInt_ms(tmid, 1000UL * (s))
|
||||
#define tTimInt_s(tmid, s) tTimInt_ms(tmid, 1000UL * (s))
|
||||
#define iTimInt_s(tmid, s) iTimInt_ms(tmid, 1000UL * (s))
|
||||
|
||||
/* 定时中断-分钟 */
|
||||
//#define uTimInt_m(tmid, m) uTimInt_s(tmid, 60UL * (m))
|
||||
#define tTimInt_m(tmid, m) tTimInt_s(tmid, 60UL * (m))
|
||||
#define iTimInt_m(tmid, m) iTimInt_s(tmid, 60UL * (m))
|
||||
|
||||
/* 定时中断-小时 */
|
||||
//#define uTimInt_h(tmid, h) uTimInt_m(tmid, 60UL * (h))
|
||||
#define tTimInt_h(tmid, h) tTimInt_m(tmid, 60UL * (h))
|
||||
#define iTimInt_h(tmid, h) iTimInt_m(tmid, 60UL * (h))
|
||||
|
||||
/* 终止定时中断 */
|
||||
//#define uTimInt_Cancel(tmid) uTimInt_tc(tmid, 0)
|
||||
#define tTimInt_Cancel(tmid) tTimInt_tc(tmid, 0)
|
||||
#define iTimInt_Cancel(tmid) iTimInt_tc(tmid, 0)
|
||||
|
||||
/* 定时查询-滴答周期 */
|
||||
//#define uTimQry_tc(tmid, tc) sUSV_TimQry(tmid, tc)
|
||||
#define tTimQry_tc(tmid, tc) sTSV_TimQry(tmid, tc)
|
||||
#define iTimQry_tc(tmid, tc) sIPS_TimQry(tmid, tc)
|
||||
|
||||
/* 定时查询-毫秒 */
|
||||
//#define uTimQry_ms(tmid, ms) uTimQry_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
#define tTimQry_ms(tmid, ms) tTimQry_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
#define iTimQry_ms(tmid, ms) iTimQry_tc(tmid, (1000UL * (ms)) / SYSCFG_SYSTICK_CYCLE)
|
||||
|
||||
/* 定时查询-秒钟 */
|
||||
//#define uTimQry_s(tmid, s) uTimQry_ms(tmid, 1000UL * (s))
|
||||
#define tTimQry_s(tmid, s) tTimQry_ms(tmid, 1000UL * (s))
|
||||
#define iTimQry_s(tmid, s) iTimQry_ms(tmid, 1000UL * (s))
|
||||
|
||||
/* 定时查询-分钟 */
|
||||
//#define uTimQry_m(tmid, m) uTimQry_s(tmid, 60UL * (m))
|
||||
#define tTimQry_m(tmid, m) tTimQry_s(tmid, 60UL * (m))
|
||||
#define iTimQry_m(tmid, m) iTimQry_s(tmid, 60UL * (m))
|
||||
|
||||
/* 定时查询-小时 */
|
||||
//#define uTimQry_h(tmid, h) uTimQry_m(tmid, 60UL * (h))
|
||||
#define tTimQry_h(tmid, h) tTimQry_m(tmid, 60UL * (h))
|
||||
#define iTimQry_h(tmid, h) iTimQry_m(tmid, 60UL * (h))
|
||||
|
||||
/* 终止定时查询 */
|
||||
//#define uTimQry_Cancel(tmid) uTimQry_tc(tmid, ~0)
|
||||
#define tTimQry_Cancel(tmid) tTimQry_tc(tmid, ~0)
|
||||
#define iTimQry_Cancel(tmid) iTimQry_tc(tmid, ~0)
|
||||
|
||||
/* 设置时间 */
|
||||
//#define uSetTime(t) sUSV_SetTime(t)
|
||||
#define tSetTime(t) sTSV_SetTime(t)
|
||||
#define iSetTime(t) sIPS_SetTime(t)
|
||||
|
||||
|
||||
/*
|
||||
* uti(l)
|
||||
*/
|
||||
|
||||
/* 归还二值信号量 */
|
||||
//#define uBackBin(bin) uGiveBin(bin)
|
||||
#define tBackBin(bin) sTSV_BackBin(bin)
|
||||
#define iBackBin(bin) sISV_BackBin(bin)
|
||||
|
||||
/* 获取二值信号量 */
|
||||
//#define uTakeBin(bin, tc) sUSV_TakeBin(bin, tc)
|
||||
#define tTakeBin(bin) sTSV_TakeBin(bin)
|
||||
#define iTakeBin(bin) sISV_TakeBin(bin)
|
||||
|
||||
/* 接收飞信 */
|
||||
//#define uRecvFetion(tbox, tc) sUSV_RecvFetion(tbox, tc)
|
||||
#define tRecvFetion(tbox) sTSV_RecvFetion(tbox)
|
||||
#define iRecvFetion(tbox) sISV_RecvFetion(tbox)
|
||||
|
||||
/* 接收邮件 */
|
||||
//#define uRecvMail(mbox, tc) sUSV_RecvMail(mbox, tc)
|
||||
#define tRecvMail(mbox) sTSV_RecvMail(mbox)
|
||||
#define iRecvMail(mbox) sISV_RecvMail(mbox)
|
||||
|
||||
/* 接收消息 */
|
||||
//#define uRecvMsg(que, tc) sUSV_RecvMsg(que, tc)
|
||||
#define tRecvMsg(que) sTSV_RecvMsg(que)
|
||||
#define iRecvMsg(que) sISV_RecvMsg(que)
|
||||
|
||||
/* 查询标志组 */
|
||||
//#define uQueryFlagGroup(group) sUSV_QueryFlagGroup(group)
|
||||
#define tQueryFlagGroup(group) sTSV_QueryFlagGroup(group)
|
||||
#define iQueryFlagGroup(group) sISV_QueryFlagGroup(group)
|
||||
|
||||
|
||||
/*
|
||||
* ut
|
||||
*/
|
||||
|
||||
/* 获取时间 */
|
||||
//#define uGetTime(t) sUSV_GetTime(t)
|
||||
#define tGetTime(t) sTSV_GetTime(t)
|
||||
|
||||
/* 获取计数信号量 */
|
||||
//#define uTakeSem(sem, tc) sUSV_TakeSem(sem, tc)
|
||||
#define tTakeSem(sem) sTSV_TakeSem(sem)
|
||||
|
||||
/* 归还计数信号量 */
|
||||
//#define uBackSem(sem) uGiveSem(sem)
|
||||
#define tBackSem(sem) tGiveSem(sem)
|
||||
|
||||
/* 发送私信 */
|
||||
//#define uSendTaskmsg(task) sUSV_SendTaskmsg(task)
|
||||
#define tSendTaskmsg(task) sTSV_SendTaskmsg(task)
|
||||
|
||||
|
||||
/*
|
||||
* 别名定义(API简化)
|
||||
*/
|
||||
|
||||
#define uRecvTM uRecvTaskmsg
|
||||
#define uSendTM uSendTaskmsg
|
||||
#define tSendTM tSendTaskmsg
|
||||
#define uEndTM uEndTaskmsg
|
||||
|
||||
#define uRecvFet uRecvFetion
|
||||
#define tRecvFet tRecvFetion
|
||||
#define iRecvFet iRecvFetion
|
||||
#define uSendFet uSendFetion
|
||||
#define tSendFet tSendFetion
|
||||
#define iSendFet iSendFetion
|
||||
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user