另外一个地方是临界区保护函数:
#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适配层移植】
推荐阅读
- 1 onps栈移植说明——onps栈的配置及裁剪
- 开源网络协议栈onps诞生记
- <一>从指令角度了解函数堆栈调用过程
- stm32h750移植lvgl
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 都卷Java,你看看你得学多少技术栈才能工作!
- flutter系列之:flutter中可以建索引的栈布局IndexedStack
- SpringBoot+Vue3 AgileBoot - 手把手一步一步带你Run起全栈项目
- C++ 使用栈求解中缀、后缀表达式的值
- 1 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - ES6标准入门和Flex布局