📄 zy_if.c
字号:
case UFI:
SHCSR = SHCSR | (1 << 18);
break;
default:
break;
}
}
changeToUSRMode();
zyIrqEnable();
return ZY_OK;
}
/*********************************************************************************************************
** Function name: zyHeapMalloc
** Descriptions: 堆分配内存
** input parameters: ulSize: 内存大小
** output parameters: none
** Returned value: 内存地址,NULL为不成功
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
void *zyHeapMalloc (INT32U ulSize)
{
void *pvRt = NULL; /* 返回值 */
zyIrqDisable();
pvRt = malloc((size_t)ulSize);
zyIrqEnable();
return pvRt;
}
/*********************************************************************************************************
** Function name: zyHeapFree
** Descriptions: 堆释放内存
** input parameters: pvPrt: 要释放的内存
** output parameters: none
** Returned value: zy_OK: 成功
** 负数: 错误,绝对值参考zy_if.h
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyHeapFree (void *pvPrt)
{
zyIrqDisable();
free(pvPrt);
zyIrqEnable();
return ZY_OK;
}
/*********************************************************************************************************
** Function name: zyThreadCreate
** Descriptions: 建立线程
** input parameters: pvThreedMain: 线程主程序
** pvArg: 给线程的参数
** uiPrio: 线程优先级
** ulSize: 堆栈大小
** output parameters: none
** Returned value: 线程ID,0为不成功
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
unsigned long zyThreadCreate (void *pvThreedMain, void *pvArg, unsigned int uiPrio, INT32U ulSize)
{
OS_STK *pstpTmp1;
OS_TCB **pptcpTmp2;
unsigned long ulRt;
pstpTmp1 = (OS_STK *)zyHeapMalloc(ulSize * sizeof(OS_STK));
if (pstpTmp1 == NULL) {
return 0;
}
OSSchedLock();
if (OSTaskCreate((void (*) (void *))pvThreedMain,
pvArg,
#if OS_STK_GROWTH == 1
pstpTmp1 + ulSize - 1,
#else
pstpTmp1,
#endif /* OS_STK_GROWTH */
(INT8U)uiPrio) != OS_NO_ERR) {
OSSchedUnlock();
return 0;
}
pptcpTmp2 = OSTCBPrioTbl;
ulRt = (unsigned long)pptcpTmp2[uiPrio];
OSSchedUnlock();
return ulRt;
}
/*********************************************************************************************************
** Function name: zyThreadDel
** Descriptions: 删除线程
** input parameters: ulThreadId: 线程ID
** output parameters: none
** Returned value: zy_OK: 成功
** 负数: 错误,绝对值参考zy_if.h
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyThreadDel (unsigned long ulThreadId)
{
OS_TCB *ptcbTask; /* 任务TCB */
void *pvTmp1;
ptcbTask = (OS_TCB *)ulThreadId;
if (zyThreadGetCurId() == ulThreadId) {
zyIrqDisable();
pvTmp1 = (void *)(ptcbTask->OSTCBStkPtr);
zyHeapFree(pvTmp1);
OSTaskDel(ptcbTask->OSTCBPrio);
zyIrqEnable();
return ZY_OK;
}
OSSchedLock();
pvTmp1 = (void *)(ptcbTask->OSTCBStkPtr);
zyHeapFree(pvTmp1);
OSTaskDel(ptcbTask->OSTCBPrio);
OSSchedUnlock();
return ZY_OK;
}
/*********************************************************************************************************
** Function name: zyThreadSuspendSelf
** Descriptions: 挂起线程自身
** input parameters: none
** output parameters: none
** Returned value: zy_OK: 成功
** 负数: 错误,绝对值参考zy_if.h
** Created by: chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyThreadSuspendSelf (void)
{
OSTaskSuspend(OS_PRIO_SELF);
return ZY_OK;
}
/*********************************************************************************************************
** Function name: zyThreadResume
** Descriptions: 恢复任务
** input parameters: ulThreadId: 线程ID
** output parameters: none
** Returned value: zy_OK: 成功
** 负数: 错误,绝对值参考zy_if.h
** Created by: chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyThreadResume (unsigned long ulThreadId)
{
OS_TCB *ptcbTask; /* 任务TCB */
ptcbTask = (OS_TCB *)ulThreadId;
OSTaskResume(ptcbTask->OSTCBPrio);
return ZY_OK;
}
/*********************************************************************************************************
** Function name: zyThreadGetCurId
** Descriptions: 获得当前线程ID
** input parameters: none
** output parameters: none
** Returned value: 当前线程ID
** Created by: chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
unsigned long zyThreadGetCurId (void)
{
return (unsigned long)OSTCBCur;
}
/*********************************************************************************************************
** Function name: __zyThreadSuspendCheck
** Descriptions: 检查线程是否确实被挂起
** input parameters: ulThreadId: 线程ID
** output parameters: none
** Returned value: zy_OK: 挂起
** -ZY_NOT_OK: 未挂起
** 其它负数: 错误,绝对值参考zy_if.h
** Created by: chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyThreadSuspendCheck (unsigned long ulThreadId)
{
OS_TCB *ptcbTask; /* 任务TCB */
ptcbTask = (OS_TCB *)ulThreadId;
if(((ptcbTask->OSTCBStat) & OS_STAT_SUSPEND) != OS_STAT_RDY) {
return ZY_OK;
}
return -ZY_NOT_OK;
}
/*********************************************************************************************************
** Function name: zyThreadDelay
** Descriptions: 当前线程延时
** input parameters: ulTimes: 等待时间(毫秒)
** output parameters: none
** Returned value: zy_OK: 成功
** 负数: 错误,绝对值参考zy_if.h
** Created by: chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zyThreadDelay (unsigned long ulTimes)
{
if (ulTimes == 0) {
return -ZY_PARAMETER_ERR;
}
OSTimeDly((INT16U)((ulTimes * OS_TICKS_PER_SEC + 999) / 1000));
return ZY_OK;
}
/*********************************************************************************************************
** Function name: zySemCreate
** Descriptions: 创建信号量
** input parameters: ulCnt: 信号量初始值
** output parameters: none
** Returned value: 信号量标识
** 0: 不成功
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
unsigned long zySemCreate (INT32S ulCnt)
{
return (unsigned long)OSSemCreate((INT16U)ulCnt);
}
/*********************************************************************************************************
** Function name: zySemDel
** Descriptions: 删除信号量
** input parameters: ulSem: zySemCreate返回值
** output parameters: none
** Returned value: ZY_OK: 成功
** 负数: 错误,绝对值参考zy_if.h
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zySemDel (unsigned long ulSem)
{
INT8U ucErr; /* 错误代码 */
#if OS_ARG_CHK_EN == 0
/*
* 参数检查
*/
if (ulSem == 0) {
return -ZY_PARAMETER_ERR;
}
#endif /* OS_ARG_CHK_EN */
OSSemDel((OS_EVENT *)ulSem, OS_DEL_ALWAYS, &ucErr);
switch (ucErr) {
case OS_ERR_PEVENT_NULL:
return -ZY_PARAMETER_ERR;
case OS_ERR_EVENT_TYPE:
return -ZY_NO_FIND_OBJECT;
case OS_ERR_DEL_ISR:
return -ZY_NOT_OK;
case OS_NO_ERR:
return 0;
default:
return -ZY_NOT_OK;
}
}
/*********************************************************************************************************
** Function name: zySemAccept
** Descriptions: 无等待获得信号量
** input parameters: ulSem: zySemCreate返回值
** output parameters: none
** Returned value: >=0: 信号量当前值
** 负数: 错误,绝对值参考zy_if.h
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zySemAccept (unsigned long ulSem)
{
#if OS_ARG_CHK_EN == 0
/*
* 参数检查
*/
if (ulSem == 0) {
return -ZY_PARAMETER_ERR;
}
#endif /* OS_ARG_CHK_EN */
return OSSemAccept((OS_EVENT *)ulSem);
}
/*********************************************************************************************************
** Function name: zySemPend
** Descriptions: 等待信号量
** input parameters: ulSem: zySemCreate返回值
** ulDly: 最长等待时间,毫秒为单位
** output parameters: none
** Returned value: >=0: 信号量当前值
** 负数: 错误,绝对值参考zy_if.h
** Created by: Chenmingji
** Created Date: 2009-07-23
**--------------------------------------------------------------------------------------------------------
** Modified by:
** Modified date:
*********************************************************************************************************/
INT32S zySemPend (unsigned long ulSem, INT32U ulDly)
{
INT8U ucErr; /* 错误代码 */
#if OS_ARG_CHK_EN == 0
/*
* 参数检查
*/
if (ulSem == 0) {
return -ZY_PARAMETER_ERR;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -