//* 协议栈内部工作线程列表const static STCB_PSTACKTHREAD lr_stcbaPStackThread[] = { { thread_one_shot_timer_count, NULL},#if SUPPORT_PPP //* 在此按照顺序建立ppp工作线程,入口函数为thread_ppp_handler(),线程入口参数为os_open_tty()返回的tty句柄值 //* 其直接强行进行数据类型转换即可,即作为线程入口参数时直接以如下形式传递: //* (void *)句柄值 //* 不要传递参数地址,即(void *)&句柄,这种方式是错误的#endif};
ppp主处理线程将在协议栈加载时由os适配层函数os_thread_onpstack_start()启动 。在这里只需把其添加到工作线程列表中即可,剩下的交由协议栈自动处理 。在这里需要特别说明的是主处理线程的入口参数为tty句柄 。其值应直接传递给线程 , 不能传递句柄地址(参见上面的伪代码注释) 。比如实际移植到目标系统时如果系统只存在一路ppp,os_open_tty()返回的tty句柄值为0,那么添加到工作线程列表中的ppp主处理线程入口参数的值应为“(void *)0” 。不用关心前面的“(void *)” , 这段数据类型强制转换代码只是为了避免编译器报错 。ppp链路建立成功后,协议栈会以“ppp+tty句柄”的方式命名该链路,命名时的tty句柄值就是通过这个启动参数获得的,所以这个值一定要配置正确 。对于单路ppp,由于tty句柄值为0,所以ppp链路的名称为“ppp0” 。
至此,ppp网卡相关的移植工作完成 。
【3 onps栈移植说明——添加网卡】
推荐阅读
- 2 onps栈移植说明——编译器及os适配层移植
- 1 onps栈移植说明——onps栈的配置及裁剪
- 开源网络协议栈onps诞生记
- <一>从指令角度了解函数堆栈调用过程
- stm32h750移植lvgl
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 都卷Java,你看看你得学多少技术栈才能工作!
- flutter系列之:flutter中可以建索引的栈布局IndexedStack
- SpringBoot+Vue3 AgileBoot - 手把手一步一步带你Run起全栈项目
- C++ 使用栈求解中缀、后缀表达式的值