⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zy_if.c

📁 LPC1768工程模板
💻 C
📖 第 1 页 / 共 3 页
字号:

        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 + -