2 onps栈移植说明——编译器及os适配层移植( 二 )


另外一个地方是临界区保护函数:
#define os_critical_init()//* 临界区初始化#define os_enter_critical() //* 进入临界区(关中断)#define os_exit_critical()//* 退出临界区(开中断)一般的os临界区保护函数基本都是进入临界区关中断,离开临界区开中断 。代码非常简单,所以这里直接给出了三个函数宏原型,移植时请依据目标系统具体情形添加对应的开、关中断代码即可 。
3.3 os_adapter.c这个文件的核心工作就是编码实现 os_adapter.h 文件声明的所有与 os 相关的接口函数 。os_adapter.h中有这些函数的详细功能说明 , 移植时按照说明实现具体功能即可,不再赘述 。
//* 当前线程休眠指定的秒数,参数 unSecs 指定要休眠的秒数OS_ADAPTER_EXT void os_sleep_secs(UINT unSecs);//* 当前线程休眠指定的毫秒数,单位:毫秒OS_ADAPTER_EXT void os_sleep_ms(UINT unMSecs); //* 获取系统启动以来已运行的秒数(从 0 开始)OS_ADAPTER_EXT UINT os_get_system_secs(void);//* 线程同步锁初始化,成功返回同步锁句柄 , 失败则返回INVALID_HMUTEXOS_ADAPTER_EXT HMUTEX os_thread_mutex_init(void);//* 线程同步区加锁OS_ADAPTER_EXT void os_thread_mutex_lock(HMUTEX hMutex);//* 线程同步区解锁OS_ADAPTER_EXT void os_thread_mutex_unlock(HMUTEX hMutex);//* 删除线程同步锁,释放该资源OS_ADAPTER_EXT void os_thread_mutex_uninit(HMUTEX hMutex);//* 信号量初始化,参数unInitVal指定初始信号量值 ,  unCount指定信号量最大数值OS_ADAPTER_EXT HSEM os_thread_sem_init(UINT unInitVal, UINT unCount);//* 投递信号量OS_ADAPTER_EXT void os_thread_sem_post(HSEM hSem);//* 等待信号量到达,参数unWaitSecs指定要等待的超时时间(单位为秒)://* 0,一直等下去直至信号量到达,收到信号则返回值为0,出错则返回值为-1;//* 大于0,等待指定时间,如果指定时间内信号量到达 , 则返回值为0,超时则返回值为1,出错则返回值为-1OS_ADAPTER_EXT INT os_thread_sem_pend(HSEM hSem, INT nWaitSecs);//* 信号量去初始化 , 释放该资源OS_ADAPTER_EXT void os_thread_sem_uninit(HSEM hSem);//* 启动协议栈内部工作线程OS_ADAPTER_EXT void os_thread_onpstack_start(void *pvParam);#if SUPPORT_PPP//* 打开 tty 设备,返回 tty 设备句柄,参数 pszTTYName 指定要打开的 tty 设备的名称OS_ADAPTER_EXT HTTY os_open_tty(const CHAR *pszTTYName);//* 关闭 tty 设备,参数 hTTY 为要关闭的 tty 设备的句柄OS_ADAPTER_EXT void os_close_tty(HTTY hTTY);//* 向 hTTY 指定的 tty 设备发送数据,返回实际发送的数据长度//* hTTY:设备句柄//* pubData:指针,指向要发送的数据的指针//* nDataLen:要发送的数据长度OS_ADAPTER_EXT INT os_tty_send(HTTY hTTY, UCHAR *pubData, INT nDataLen);//* 从参数 hTTY 指定的 tty 设备等待接收数据 , 阻塞型//* hTTY:设备句柄//* pubRcvBuf:指针,指向数据接收缓冲区的指针,用于保存收到的数据//* nRcvBufLen:接收缓冲区的长度//* nWaitSecs:等待的时长 , 单位:秒 。0 一直等待;直至收到数据或报错,大于 0,等待指定秒数;小于 0,不支持OS_ADAPTER_EXT INT os_tty_recv(HTTY hTTY, UCHAR *pubRcvBuf, INT nRcvBufLen, INT nWaitSecs); //* 复位 tty 设备,这个函数名称体现了 4g 模块作为 tty 设备的特殊性 , 其功能从本质上看就是一个 modem,modem 设备出现通讯//* 故障时,最好的修复故障的方式就是直接复位,复位可以修复绝大部分的因软件问题产生的故障OS_ADAPTER_EXT void os_modem_reset(HTTY hTTY);#endif【2 onps栈移植说明——编译器及os适配层移植】

推荐阅读