Files
cosyos/System/ur_api.h
零中断延迟的RTOS bd63295826 update CosyOS内核文件.
Signed-off-by: 零中断延迟的RTOS <cosyos@139.com>
2024-01-24 18:17:11 +00:00

684 lines
20 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**************************************************************************//**
* @item CosyOS-II Kernel
* @file ur_api.h
* @brief 用户API创建API、任务API、滴答API、中断API、公共API
* @author 迟凯峰
* @version V1.3.1
* @date 2024.01.25
******************************************************************************/
#ifndef __UR_API_H
#define __UR_API_H
/*
* 声明任务
*/
/* 无私信 */
#define uExternTask(task) \
sCSV_ExternTask(task)
/* 有私信 */
#define uExternTask_Msg(task) \
sCSV_ExternTask_Msg(task) /**< \taskmsg\params ...) >*/
/*
* 创建任务
*/
/* 创建一般任务 */
#define uCreateTask(task, pri, tss, srt, ntm) \
sCSV_CreateTask(task, pri, tss, srt, ntm) /**[ \taskmsg\params (...) ]*//**< \taskcode {...} >*/
/* 创建定时中断任务 */
#define uCreateTask_TimInt(tmid, arl, task, pri, tss, srt, ntm) \
sCSV_CreateTask_TimInt(tmid, arl, task, pri, tss, srt, ntm) /**[ \taskmsg\params (...) ]*//**< \taskcode {...} >*/
/* 创建定时查询任务 */
#define uCreateTask_TimQry(tmid, event, arl, task, pri, tss, srt, ntm) \
sCSV_CreateTask_TimQry(tmid, event, arl, task, pri, tss, srt, ntm) /**[ \taskmsg\params (...) ]*//**< \taskcode {...} >*/
/*
* 创建钩子
*/
/* 创建定时中断钩子 */
#define uCreateHook_TimInt(tmid, arl, hook) \
sCSV_CreateHook_TimInt(tmid, arl, hook) /**< \hookcode {...} >*/
/* 创建定时查询钩子 */
#define uCreateHook_TimQry(tmid, event, arl, hook) \
sCSV_CreateHook_TimQry(tmid, event, arl, hook) /**< \hookcode {...} >*/
/*
* 启动任务
*/
/* 启动任务 */
#define uStartTask(task, status) sUSV_StartTask(&u_taskhand_##task, status) /** \return ecode */
/* 启动任务并就绪 */
#define uStartTask_Ready(task) sUSV_StartTask(&u_taskhand_##task, OS_STATUS_READY) /** \return ecode */
/* 启动任务并挂起 */
#define uStartTask_Suspend(task) sUSV_StartTask(&u_taskhand_##task, OS_STATUS_SUSPENDED) /** \return ecode */
/*
* 操作任务
*/
/* 恢复任务 */
#define uResumeTask(task) sUSV_ResumeTask(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define tResumeTask(task) sTSV_ResumeTask(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define iResumeTask(task) sPSV_ResumeTask(sTaskNode(&u_taskhand_##task))
/* 挂起任务 */
#define uSuspendTask(task) sUSV_SuspendTask(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define tSuspendTask(task) sTSV_SuspendTask(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define iSuspendTask(task) sPSV_SuspendTask(sTaskNode(&u_taskhand_##task))
/* 删除任务 */
#define uDeleteTask(task) sUSV_DeleteTask(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define tDeleteTask(task) sTSV_DeleteTask(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define iDeleteTask(task) sPSV_DeleteTask(sTaskNode(&u_taskhand_##task))
/* 设置任务优先级 */
#define uSetTaskPri(task, pri) sUSV_SetTaskPri(sTaskNode(&u_taskhand_##task), pri) /** \return ecode */
#define tSetTaskPri(task, pri) sTSV_SetTaskPri(sTaskNode(&u_taskhand_##task), pri) /** \return ecode */
#define iSetTaskPri(task, pri) sPSV_SetTaskPri(sTaskNode(&u_taskhand_##task), pri)
/*
* 操作自身任务
*/
/* 设置自身任务优先级 */
#define uSetTaskingPri(pri) sUSV_SetTaskPri(s_task_current, pri) /** \return ecode */
/* 挂起自身任务 */
#define uSuspendTasking sUSV_SuspendTask(s_task_current) /** \return ecode */
/* 删除自身任务 */
#define uDeleteTasking sUSV_DeleteTask(s_task_current) /** \return ecode */
/* 恢复指定任务并挂起自身任务 */
#define uResumeSuspend(task) sUSV_ResumeSuspend(sTaskNode(&u_taskhand_##task)) /** \return ecode */
/* 结束自身任务 */
#define uEndTasking }while(true)
/*
* 设置阻塞(时间)
*/
/* 滴答周期 */
#define uSetBlock_tc(task, tc) sUSV_SetBlock(sTaskNode(&u_taskhand_##task), tc) /** \return ecode */
#define tSetBlock_tc(task, tc) sTSV_SetBlock(sTaskNode(&u_taskhand_##task), tc) /** \return ecode */
#define iSetBlock_tc(task, tc) sPSV_SetBlock(sTaskNode(&u_taskhand_##task), tc)
/* 毫秒 */
#define uSetBlock_ms(task, ms) uSetBlock_tc(task, (1000UL * ms) / SYSCFG_SYSTICKCYCLE) /** \return ecode */
#define tSetBlock_ms(task, ms) tSetBlock_tc(task, (1000UL * ms) / SYSCFG_SYSTICKCYCLE) /** \return ecode */
#define iSetBlock_ms(task, ms) iSetBlock_tc(task, (1000UL * ms) / SYSCFG_SYSTICKCYCLE)
/* 秒钟 */
#define uSetBlock_s(task, s) uSetBlock_ms(task, 1000UL * s) /** \return ecode */
#define tSetBlock_s(task, s) tSetBlock_ms(task, 1000UL * s) /** \return ecode */
#define iSetBlock_s(task, s) iSetBlock_ms(task, 1000UL * s)
/* 分钟 */
#define uSetBlock_m(task, m) uSetBlock_s(task, 60UL * m) /** \return ecode */
#define tSetBlock_m(task, m) tSetBlock_s(task, 60UL * m) /** \return ecode */
#define iSetBlock_m(task, m) iSetBlock_s(task, 60UL * m)
/* 小时 */
#define uSetBlock_h(task, h) uSetBlock_m(task, 60UL * h) /** \return ecode */
#define tSetBlock_h(task, h) tSetBlock_m(task, 60UL * h) /** \return ecode */
#define iSetBlock_h(task, h) iSetBlock_m(task, 60UL * h)
/*
* 清除阻塞(状态)
*/
#define uClearBlock(task) sUSV_ClearBlock(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define tClearBlock(task) sTSV_ClearBlock(sTaskNode(&u_taskhand_##task)) /** \return ecode */
#define iClearBlock(task) sPSV_ClearBlock(sTaskNode(&u_taskhand_##task))
/*
* 自身任务延时
*/
/* 延时滴答周期 */
#define uDelay_tc(tc) sUSV_Delay(tc)
/* 延时毫秒 */
#define uDelay_ms(ms) uDelay_tc((1000UL * ms) / SYSCFG_SYSTICKCYCLE)
/* 延时秒钟 */
#define uDelay_s(s) uDelay_ms(1000UL * s)
/* 延时分钟 */
#define uDelay_m(m) uDelay_s(60UL * m)
/* 延时小时 */
#define uDelay_h(h) uDelay_m(60UL * h)
/*
* 定时中断
*/
/* 定时中断滴答周期 */
#define uTimInt_tc(tmid, tc) sUSV_TimInt(tmid, tc)
#define tTimInt_tc(tmid, tc) sTSV_TimInt(tmid, tc)
#define iTimInt_tc(tmid, tc) sPSV_TimInt(tmid, tc)
/* 定时中断毫秒 */
#define uTimInt_ms(tmid, ms) uTimInt_tc(tmid, (1000UL * ms) / SYSCFG_SYSTICKCYCLE)
#define tTimInt_ms(tmid, ms) tTimInt_tc(tmid, (1000UL * ms) / SYSCFG_SYSTICKCYCLE)
#define iTimInt_ms(tmid, ms) iTimInt_tc(tmid, (1000UL * ms) / SYSCFG_SYSTICKCYCLE)
/* 定时中断秒钟 */
#define 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 xTimInt_AutoReload(tmid, arl) s_timint_autoreload[tmid] = arl
/*
* 定时查询
*/
/* 定时查询滴答周期 */
#define uTimQry_tc(tmid, tc) sUSV_TimQry(tmid, tc)
#define tTimQry_tc(tmid, tc) sTSV_TimQry(tmid, tc)
#define iTimQry_tc(tmid, tc) sPSV_TimQry(tmid, tc)
/* 定时查询毫秒 */
#define uTimQry_ms(tmid, ms) uTimQry_tc(tmid, (1000UL * ms) / SYSCFG_SYSTICKCYCLE)
#define tTimQry_ms(tmid, ms) tTimQry_tc(tmid, (1000UL * ms) / SYSCFG_SYSTICKCYCLE)
#define iTimQry_ms(tmid, ms) iTimQry_tc(tmid, (1000UL * ms) / SYSCFG_SYSTICKCYCLE)
/* 定时查询秒钟 */
#define 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 xTimQry_AutoReload(tmid, arl) s_timqry_autoreload[tmid] = arl
/*
* 互斥信号量
*/
/* 声明 */
#define uExternMut(mut) \
sCSV_ExternMut(mut)
/* 创建 */
#define uCreateMut(mut) \
sCSV_CreateMut(mut)
/* 获取 */
#define uTakeMut(mut, tc) sUSV_TakeMut(mut, tc) /** \return result */
/* 归还 */
#define uBackMut(mut) sUSV_BackMut(mut)
/*
* 二值信号量
*/
/* 声明 */
#define uExternBin(bin) \
sCSV_ExternBin(bin)
/* 创建 */
#define uCreateBin(bin, init) \
sCSV_CreateBin(bin, init)
/* 上锁 */
#define uLockBin(bin) bin.binary = false
#define tLockBin(bin) bin.binary = false
#define iLockBin(bin) sPSV_WriteBin(bin, false)
/* 等待 */
#define uWaitBin(bin, tc) sUSV_WaitBin(bin, tc) /** \return result */
/* 给予 */
#define uGiveBin(bin) sUSV_GiveBin(bin)
#define tGiveBin(bin) bin.binary = true
#define iGiveBin(bin) sPSV_WriteBin(bin, true)
/* 获取 */
#define uTakeBin(bin, tc) sUSV_TakeBin(bin, tc) /** \return result */
#define tTakeBin(bin) sTSV_TakeBin(bin) /** \return result */
#define iTakeBin(bin) sISV_TakeBin(bin) /** \return result */
/* 归还 */
#define uBackBin(bin) sUSV_BackBin(bin)
#define tBackBin(bin) bin.binary = true
#define iBackBin(bin) sISV_BackBin(bin)
/*
* 计数信号量
*/
/* 声明 */
#define uExternSem(sem) \
sCSV_ExternSem(sem)
/* 创建 */
#define uCreateSem(sem, init, max) \
sCSV_CreateSem(sem, init, max)
/* 给予 */
#define uGiveSem(sem) sUSV_GiveSem(sem)
#define tGiveSem(sem) sTSV_GiveSem(sem)
#define iGiveSem(sem) sPSV_GiveSem(sem)
/* 获取 */
#define uTakeSem(sem, tc) sUSV_TakeSem(sem, tc) /** \return result */
#define tTakeSem(sem) sTSV_TakeSem(sem) /** \return result */
/* 归还 */
#define uBackSem(sem) sUSV_BackSem(sem)
#define tBackSem(sem) sTSV_BackSem(sem)
/*
* 私信
*/
/* 接收私信 */
#define uRecvTaskMsg(tc) sUSV_RecvTaskMsg(tc) /** \return result */
/* 发送私信 */
#define uSendTaskMsg(task) sUSV_SendTaskMsg(task) /**< \taskmsg\params ...) >*/
#define tSendTaskMsg(task) sTSV_SendTaskMsg(task) /**< \taskmsg\params ...) >*/
/* API简化 */
#define uRecvTM uRecvTaskMsg
#define uSendTM uSendTaskMsg
#define tSendTM tSendTaskMsg
/*
* 飞信
*/
/* 声明信箱 */
#define uExternFetion(tbox) \
sCSV_ExternFetion(tbox)
/* 创建信箱 */
#define uCreateFetion(tbox) \
sCSV_CreateFetion(tbox)
/* 接收飞信 */
#define uRecvFetion(tbox, tc) sUSV_RecvFetion(tbox, tc) /** \return fetion */
#define tRecvFetion(tbox) sTSV_RecvFetion(tbox) /** \return fetion */
#define iRecvFetion(tbox) sISV_RecvFetion(tbox) /** \return fetion */
/* 发送飞信 */
#define uSendFetion(tbox, tion) sUSV_SendFetion(tbox, tion)
#define tSendFetion(tbox, tion) tbox.fetion = tion
#define iSendFetion(tbox, tion) sPSV_SendFetion(tbox, tion)
/* API简化 */
#define uRecvFet uRecvFetion
#define tRecvFet tRecvFetion
#define iRecvFet iRecvFetion
#define uSendFet uSendFetion
#define tSendFet tSendFetion
#define iSendFet iSendFetion
/*
* 消息邮箱
*/
/* 声明邮箱 */
#define uExternMailbox(mbox, type) \
sCSV_ExternMailbox(mbox, type)
/* 创建邮箱 */
#define uCreateMailbox(mbox) \
sCSV_CreateMailbox(mbox)
/* 接收邮件 */
#define uRecvMail(mail, mbox, tc) sUSV_RecvMail(mail, mbox, tc) /** \return result */
#define tRecvMail(mail, mbox) sTSV_RecvMail(mail, mbox) /** \return result */
#define iRecvMail(mail, mbox) sISV_RecvMail(mail, mbox) /** \return result */
/* 发送邮件 */
#define uSendMail(mbox, mail) sUSV_SendMail(mbox, mail)
#define tSendMail(mbox, mail) sTSV_SendMail(mbox, mail)
#define iSendMail(mbox, mail) sPSV_SendMail(mbox, mail)
/*
* 消息队列
*/
/* 声明静态消息队列 */
#define uExternMsgQueue_Static(que) \
sCSV_ExternMsgQueue_Static(que)
/* 声明动态消息队列 */
#define uExternMsgQueue_Dynamic(que) \
sCSV_ExternMsgQueue_Dynamic(que)
/* 创建静态消息队列 */
#define uCreateMsgQueue_Static(que, mode, len) \
sCSV_CreateMsgQueue_Static(que, mode, len)
/* 创建动态消息队列 */
#define uCreateMsgQueue_Dynamic(que, mode, len) \
sCSV_CreateMsgQueue_Dynamic(que, mode, len)
/* 接收消息 */
#define uRecvMsg(que, tc) sUSV_RecvMsg((s_msgqueue_tsp)&que, tc) /** \return ptr */
#define tRecvMsg(que) sTSV_RecvMsg((s_msgqueue_tsp)&que) /** \return ptr */
#define iRecvMsg(que) sISV_RecvMsg((s_msgqueue_tsp)&que) /** \return ptr */
/* 发送消息 */
#define uSendMsg(que, msg) sUSV_SendMsg((s_msgqueue_tsp)&que, msg) /** \return ecode */
#define tSendMsg(que, msg) sTSV_SendMsg((s_msgqueue_tsp)&que, msg) /** \return ecode */
#define iSendMsg(que, msg) sPSV_SendMsg((s_msgqueue_tsp)&que, msg)
/*
* 事件标志组
*/
/* 声明标志组 */
#define uExternFlagGroup(group, bits) \
sCSV_ExternFlagGroup(group, bits)
/* 定义标志位 */
#define uDefFlagBit(bit) sDefBitField(bit)
/* 定义空位 */
#define uDefVoidBits(nvb) sDefVoidBits(nvb)
/* 创建标志组 */
#define uCreateFlagGroup(group) \
sCSV_CreateFlagGroup(group) /**[ \init = {...} ]*/
/* 等待标志组 */
#define uWaitFlagGroup(group, tc) sUSV_WaitFlagGroup(group, tc) /** \return result */
/* 查询标志组 */
#define uQueryFlagGroup(group) sUSV_QueryFlagGroup(group) /** \return result */
#define tQueryFlagGroup(group) sTSV_QueryFlagGroup(group) /** \return result */
#define iQueryFlagGroup(group) sISV_QueryFlagGroup(group) /** \return result */
/* 清除标志组 */
#define uClearFlagGroup(group) sUSV_ClearFlagGroup(group)
#define tClearFlagGroup(group) sTSV_ClearFlagGroup(group)
#define iClearFlagGroup(group) sPSV_ClearFlagGroup(group)
/* 查询标志位(任务、滴答、中断中,均直接查询)*/
/* 设置标志位(滴答中直接设置,任务中也可在任务临界区中设置)*/
#define uSetFlagBit(group, bit) sUSV_WriteFlagBit(group, bit, true)
#define iSetFlagBit(group, bit) iSetFlagBits(group, 1) bit)
/* 清除标志位(滴答中直接清除,任务中也可在任务临界区中清除)*/
#define uClearFlagBit(group, bit) sUSV_WriteFlagBit(group, bit, false)
#define iClearFlagBit(group, bit) iClearFlagBits(group, 1) bit)
/* 设置多标志位(滴答中直接设置,任务中在任务临界区中设置)*/
#define iSetFlagBits(group, nbit) sPSV_WriteFlagBits(group, +, nbit) /**< \bits ...) >*/
/* 清除多标志位(滴答中直接清除,任务中在任务临界区中清除)*/
#define iClearFlagBits(group, nbit) sPSV_WriteFlagBits(group, -, nbit) /**< \bits ...) >*/
/*
* 全局变量访问
*/
/* 更新全局变量副本 */
#define uUpdateCopy(code) sUpdateCopy(code)
#define tUpdateCopy(code) sUpdateCopy(code)
/* 读哪一个全局变量返回0读正本返回1读副本*/
#define iWhichGVarToRead !s_sign_updatecopy /** \return bool */
/* 写全局变量 */
#define iWriteGVar(gv, lv) sPSV_WriteGVar((void *)&gv, (void *)&lv, sizeof(gv))
/* 写全局数组 */
#define iWriteGAry(gp, lp, size) sPSV_WriteGVar(gp, lp, size)
/* 写全局字符串 */
#define iWriteGStr(gs, ls) sPSV_WriteGVar(gs, ls, 0)
/* 挂起服务调用 */
#define iPendSVC(fp) sPSV_PendSVC(fp)
/* 发送信号 */
#define iSendSign(sign) sPSV_SendSign(sign)
/*
* 软件RTC
*/
/* 获取时间 */
#define uGetTime(t) sUSV_GetTime(t) /** \return t */
#define tGetTime(t) sTSV_GetTime(t) /** \return t */
#define iGetTime(t) sISV_GetTime(t) /** \return t */
/* 设置时间 */
#define uSetTime(t) sUSV_SetTime(t)
#define tSetTime(t) sTSV_SetTime(t)
#define iSetTime(t) sPSV_SetTime(t)
/*
* 进程内存
*/
/* malloc */
#define uMalloc(size) sUSV_Malloc(size) /** \return ptr */
/* calloc */
#define uCalloc(nmemb, size) sUSV_Calloc(nmemb, size) /** \return ptr */
/* realloc */
#define uRealloc(p, size) sUSV_Realloc(p, size) /** \return ptr */
/* free */
#define uFree(p) sUSV_Free(p)
/*
* 线程内存
*/
/* 创建线程内存池 */
#define uCreateMempool sCSV_CreateMempool
/* 初始化线程内存池 */
#define uInitMempool(size) sUSV_InitMempool(size) /** \return result */
/* 线程内存分配 */
#define uTalloc(size) sUSV_Talloc(size) /** \return ptr */
/* 释放线程内存池 */
#define uFreeMempool sUSV_FreeMempool
/*
* DEBUG
*/
#define iDebugSend iTimQry_ms(OS_TMID_DEBUGHOOK, 30)
#define iDebugRecv iTimInt_ms(OS_TMID_DEBUGGER, 15)
#if false
/* 应用示例 - 8051/80251 UART1 */
void UART1_Isr(void) interrupt 4
{
if(TI){
TI = 0;
if(*s_debug_sendptr){
SBUF = *s_debug_sendptr++;
}
else{
iDebugSend;
}
}
if(RI){
RI = 0;
if(s_debug_recvptr - s_debug_recvbuff < OS_DEBUGRECVBUFFSIZE - 1){
*s_debug_recvptr++ = SBUF;
}
iDebugRecv;
}
}
/* 应用示例 - STM32 USART1 */
void USART1_IRQHandler(void)
{
if(USART_GetITStatus(USART1, USART_IT_TXE) != RESET){
if(*s_debug_sendptr){
USART_SendData(USART1, *s_debug_sendptr++);
}
else{
USART_ITConfig(USART1, USART_IT_TXE, DISABLE);
iDebugSend;
}
}
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET){
if(s_debug_recvptr - s_debug_recvbuff < OS_DEBUGRECVBUFFSIZE - 1){
*s_debug_recvptr++ = USART_ReceiveData(USART1);
}
iDebugRecv;
}
}
#endif
/*
* 任务调度
* 由用户手动触发的临时性的任务调度
*/
/* 无条件任务调度 */
#define uTaskScheduling su_task_scheduling()
#define iTaskScheduling si_task_scheduling()
/* 任务优先级调度 */
#define uTaskPriScheduling(task) sUSV_TaskPriScheduling(sTaskNode(&u_taskhand_##task))
#define iTaskPriScheduling(task) sISV_TaskPriScheduling(sTaskNode(&u_taskhand_##task))
/*
* 任务临界区
* 任务级的临界区保护仅关闭SysTick、PendSV仅支持在任务中调用。
*/
/* 进入临界区 */
#define uEnterCritical su_enter_critical()
/* 退出临界区 */
#define uExitCritical su_exit_critical()
/*
* 全局临界区
* 系统级的临界区保护,通常会关闭总中断,支持在任意处调用。
* CosyOS内核中从来不会进入全局临界区提供此项服务只是为了便于用户对全局公共资源和程序过程的保护。
*/
/* [ARM] */#if MCUCFG_ISA == __ARM__
/* 方法一操作PRIMASK */
#define xDisableIRQ mxDisableIRQ /* 进入全局临界区 *//** \return oldirq */
#define xResumeIRQ(oldirq) mxResumeIRQ(oldirq) /* 退出全局临界区 */
/* 方法二操作FAULTMASK */
#define xDisableFIQ mxDisableFIQ /* 进入全局临界区 *//** \return oldfiq */
#define xResumeFIQ(oldfiq) mxResumeFIQ(oldfiq) /* 退出全局临界区 */
/* 方法三操作BASEPRI */
#define xMaskingPRI(newpri) mxMaskingPRI(newpri) /* 进入全局临界区 *//** \return oldpri */
#define xResumePRI(oldpri) mxResumePRI(oldpri) /* 退出全局临界区 */
/* [!ARM] */#else
/* 操作EA */
#define xDisableIRQ mxDisableIRQ /* 进入全局临界区 */
#define xResumeIRQ mxResumeIRQ /* 退出全局临界区 */
#endif
#endif