mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-09-22 21:33:43 +08:00
+202
@@ -0,0 +1,202 @@
|
||||
/**************************************************************************//**
|
||||
* @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
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+128
@@ -0,0 +1,128 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file os_var.c
|
||||
* @brief 系统全局变量定义
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.3
|
||||
* @date 2025.02.26
|
||||
******************************************************************************/
|
||||
|
||||
#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 m_bit_t /*_SYS_MEM_*/ s_sign_schedule/**/sZeroInstall; /*!< 调度信号 */
|
||||
volatile m_bit_t /*_SYS_MEM_*/ s_sign_schedule_forbid/**/sZeroInstall;/*!< 禁止调度信号 */
|
||||
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]/**/sZeroInstall_Group; /*!< 字节索引 */
|
||||
s_u8_t _SYS_MEM_ s_task_ready_table[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]/**/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
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,415 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_task.h
|
||||
* @brief 任务服务
|
||||
* @details 仅在任务中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V1.0.2
|
||||
* @date 2025.02.26
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __SV_TASK_H
|
||||
#define __SV_TASK_H
|
||||
|
||||
#include "os_redef.h"
|
||||
|
||||
#if MCUCFG_ISA == __ARM__
|
||||
/** 调度上锁(进入嵌套任务临界区)*/
|
||||
__STATIC_FORCEINLINE void su_schedule_locks(void)
|
||||
{
|
||||
s_sign_schedule_forbid = 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
|
||||
+1746
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user