mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-10-06 04:59:34 +08:00
@@ -0,0 +1,28 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file CosyOS.H
|
||||
* @brief 系统链接头文件
|
||||
* @details 用户的各个c文件中应包含此文件。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef __COSYOS_H
|
||||
#define __COSYOS_H
|
||||
|
||||
#include "os_var.h"
|
||||
#include "os_api.h"
|
||||
#include "sv_com.h"
|
||||
#include "sv_create.h"
|
||||
#include "sv_int_fifo.h"
|
||||
#include "sv_int_loc.h"
|
||||
#include "sv_pend.h"
|
||||
#include "sv_task.h"
|
||||
#include "sv_tick.h"
|
||||
#include "ur_api.h"
|
||||
#include "ur_eapi.h"
|
||||
|
||||
|
||||
|
||||
#endif
|
||||
+313
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,181 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_int_fifo.h
|
||||
* @brief 中断FIFO服务-调用宏
|
||||
* @details 仅在用户中断中调用,而后挂起到 PendSV中断 中执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
******************************************************************************/
|
||||
|
||||
#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_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_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 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 const m_rtccount_t _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,38 @@
|
||||
/**************************************************************************//**
|
||||
* @item CosyOS-III Kernel
|
||||
* @file sv_pend.h
|
||||
* @brief PSV服务
|
||||
* @details 仅在 PendSV中断 中调用并执行。
|
||||
* @author 迟凯峰
|
||||
* @version V2.3.1
|
||||
* @date 2026.03.01
|
||||
******************************************************************************/
|
||||
|
||||
#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_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
|
||||
+1973
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user