当前位置: 首页 > news >正文

嵌入式上位机开发入门(十一): Socket 封装思路

目录

  • 一、前言
  • 二、AT 命令发送的核心需求
  • 三、后台线程的设计
  • 四、核心数据结构设计
  • 五、整体架构分层
  • 六、总结
  • 七、结尾

一、前言

大家好,这里是Hello_Embed。借鉴 RT-Thread 的实现思路,本篇来设计基于 FreeRTOS 的 Socket 封装方案。核心在于socket 结构体的封装,以及后台线程的设计。


二、AT 命令发送的核心需求

想要发送 AT 命令,需要实现以下四个步骤:

  1. 获得 AT 命令的锁(互斥访问)
  2. 写串口
  3. 阻塞等待响应
  4. 唤醒后解析数据

三、后台线程的设计

为了支持上述流程,需要设计一个后台线程不断读取串口数据并解析。

后台线程必须分辨读到的数据类型:

数据类型处理方式
AT 命令回应唤醒等待 AT 响应的线程
网络数据读出数据 → 解析属于哪个 socket → 保存到队列 → 唤醒对应 APP

后台线程是整个封装的核心,它解耦了串口数据的接收与上层 APP 的处理。


四、核心数据结构设计

需要定义AT_DeviceAT_Device里有多个AT_Socket[],每个AT_Socket需要包含:


五、整体架构分层

整体分为三层:

APP 层(at_socket)

APP 使用标准 Socket 封装函数接口,由at_socket文件实现:

#definesocket(domain,type,protocol)at_socket(domain,type,protocol)#defineclosesocket(socket)at_closesocket(socket)#defineshutdown(socket,how)at_shutdown(socket,how)#definebind(socket,name,namelen)at_bind(socket,name,namelen)#defineconnect(socket,name,namelen)at_connect(socket,name,namelen)#definesendto(socket,data,size,flags,to,tolen)at_sendto(socket,data,size,flags,to,tolen)#definesend(socket,data,size,flags)at_send(socket,data,size,flags)#definerecvfrom(socket,mem,len,flags,from,fromlen)at_recvfrom(socket,mem,len,flags,from,fromlen)#definerecv(socket,mem,len,flags)at_recv(socket,mem,len,flags)#definelisten(socket,backlog)at_listen(socket,backlog)#defineaccept(socket,name,namelen)at_accept(socket,name,namelen)

硬件驱动层(w800)

AT 命令层(at_command)

三层架构实现了 APP 与硬件的完全解耦,上层代码无需关心底层 AT 命令的细节。


六、总结


七、结尾

本篇完成了基于 FreeRTOS 的 Socket 封装设计思路,下一篇将学习封装 socket 的核心结构体、初始化与连接热点、后台线程的具体实现

Hello_Embed继续带你从原理到实践,掌握嵌入式上位机开发的核心技能,敬请关注~

http://www.jsqmd.com/news/598311/

相关文章:

  • 【双分解】基于CEEMDAN-VMD-Transformer-LSTM单变量时序预测 (单输入单输出) Matlab代码
  • 终极HunterPie指南:如何将《怪物猎人:世界》游戏体验提升到全新高度
  • 跨平台控制器模拟:ViGEmBus实战解决方案
  • Win11Debloat:Windows 11终极优化指南 - 让系统运行如飞的完整教程
  • 救命!这些毕设太好抄了,3000+毕设案例推荐第1029期
  • java基础实战:通过快马ai快速构建学生成绩管理系统项目
  • 如何用BG3ModManager打造终极博德之门3模组体验:完整指南
  • PEMS交通数据集预处理避坑指南:.h5文件读取、维度理解与Pandas转换技巧
  • 解锁高级交互:借助快马ai模型,智能生成ui-ux-pro-max级别的动态任务管理应用
  • 给计算机大数据专业推荐一个练手的github项目
  • Readest(电子书阅读器)
  • OpenClaw本地知识库:Qwen3.5-9B-AWQ-4bit自动索引图片资料
  • matlab复现,考虑综合需求响应和阶梯型碳交易机制的综合能源系统优化调度策略。 关键词,综合...
  • 告别“对方已撤回“!RevokeMsgPatcher防撤回工具完整使用指南
  • Qwen3.5-2B助力Anaconda环境管理:创建专属AI模型运行环境
  • DeepAnalyze参数详解:Llama3:8b模型在信息提炼任务中的Prompt工程与输出结构优化
  • ai辅助开发新体验,让快马平台智能生成自适应网站结构的python爬虫
  • OpenClaw多任务队列管理:千问3.5-27B并行处理技巧
  • 3步打造专属电视直播系统:mytv-android颠覆性一站式解决方案
  • 2026江门市媒体发稿平台深度测评与选择指南 - 每日资讯速递
  • 企业应用集成模式(EAI)架构参考
  • SteamAutoCrack:三步告别Steam游戏限制,实现真正的离线自由
  • 告别Frida注入:手把手教你用IDA和010 Editor修改TikTok的libsscronet.so实现抓包(Android 30.8.4)
  • 别再乱改环境变量了!手把手教你正确合并Lattice Diamond与Radiant的License文件
  • 广州SEO优化如何优化网站结构_广州SEO优化如何进行网站推广
  • 告别手动配置,用快马生成脚本批量设置mobaxterm中文环境
  • Windows网页字体模糊困扰?Font Rendering油猴脚本让文字瞬间清晰锐利
  • 从数据到模型:Paraformer与SenseVoice专业名词识别优化实战
  • Transmission Remote GUI完整指南:跨平台远程BT下载管理终极解决方案
  • 编译原理实验避坑指南:正则转NFA时,你的连接符‘.’补全对了吗?