mirror of
https://gitee.com/cosyos/cosyos.git
synced 2026-02-06 03:41:41 +08:00
684 lines
20 KiB
C
684 lines
20 KiB
C
/**************************************************************************//**
|
||
* @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
|