📄 sys_arch.c
字号:
//*------------------------------------------------------------------------------------------------
//* 文件名 : sys_arch.c
//* 功能描述 : 操作系统模拟层接口函数实现文件
//* 作者 : 焦海波
//* 版本 : 0.1
//* 建立日期、时间 : 2006/09/04 10:50
//* 修改日期、时间 :
//* 修改原因 :
//*------------------------------------------------------------------------------------------------
//*------------------------------------------ 头文件 -----------------------------------------------
#include "/LwIP/include/lwip/sys.h"
#include "/LwIP/include/arch/cc.h"
#include "/LwIP/include/arch/sys_arch.h"
//*================================================================================================
//* 函 数 区
//*================================================================================================
//*------------------------------------------------------------------------------------------------
//* 函数名称 : sys_sem_new
//* 功能描述 : 建立并返回一个新的信号量
//* 入口参数 : <count>[in] 指定信号量的初始状态
//* 出口参数 : 返回新的信号量
//*------------------------------------------------------------------------------------------------
sys_sem_t sys_sem_new(u8_t count)
{
return OSSemCreate(count);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : sys_sem_signal
//* 功能描述 : 发送信号
//* 入口参数 : <sem>[in] sem指定要发送的信号
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
void sys_sem_signal(sys_sem_t sem)
{
OSSemPost(sem);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : sys_sem_free
//* 功能描述 : 释放信号量
//* 入口参数 : <sem>[in] 指定要释放的信号量
//* 出口参数 : 无
//*------------------------------------------------------------------------------------------------
void sys_sem_free(sys_sem_t sem)
{
INT8U __u8Err;
while(NULL != OSSemDel(sem, OS_DEL_ALWAYS, &__u8Err))
OSTimeDlyHMSM(0, 0, 0, 100);
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : __MSToOSTicks
//* 功能描述 : 将毫秒转变成时钟节拍
//* 入口参数 : <u16MS>[in] 节拍数
//* 出口参数 : 毫秒数
//*------------------------------------------------------------------------------------------------
static INT16U __MSToOSTicks(INT16U u16MS)
{
INT16U __u16DelayTicks;
if(u16MS != 0)
{
__u16DelayTicks = (u16MS * OS_TICKS_PER_SEC)/1000;
if(__u16DelayTicks < 1)
__u16DelayTicks = 1;
else if(__u16DelayTicks > 65535)
__u16DelayTicks = 65535;
else;
}
else
__u16DelayTicks = 0;
return __u16DelayTicks;
}
//*------------------------------------------------------------------------------------------------
//* 函数名称 : sys_arch_sem_wait
//* 功能描述 : 等待由参数sem指定的信号并阻塞线程
//* 入口参数 : <sem>[in] sem指定要发送的信号
//* : <timeout>[in] 指定等待的最长时间(单位为毫秒)。为0,线程会一直被阻塞直至收到指定的信号;非0,指定线
//* : 程最长等待时间
//* 出口参数 : - 0: 在指定时间内等到指定信号
//* : - SYS_ARCH_TIMEOUT: 在指定时间内没有等到指定信号
//*------------------------------------------------------------------------------------------------
u32_t sys_arch_sem_wait(sys_sem_t sem, u32_t timeout)
{
INT8U __u8RtnVal;
OSSemPend(sem, __MSToOSTicks(timeout), &__u8RtnVal);
if(__u8RtnVal == OS_NO_ERR)
return 0;
else
return SYS_ARCH_TIMEOUT;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -