一个适用于单片机的开源网络协议栈_单片机简单协议栈,2024年最新Golang插件化入门指南-程序员宅基地

技术标签: 2024年程序员学习  开源  网络协议  单片机  

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

深知大多数程序员,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Golang全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以添加V获取:vip1024b (备注go)
img

正文

已剪辑自: https://mp.weixin.qq.com/s/Vpi4E9T5BUo_cdCE692V_A

移植及使用说明

协议栈支持主流的ARM Cortex系列MCU,支持Keil MDK、IAR等常见IDE。移植的核心工作就是完成RTOS模拟层的编写及适配,详细的移植说明请参考《onps网络协议栈移植及使用说明v1.0》一文:https://gitee.com/Neo-T/open-npstack/releases/download/v1.0.0.221017/onps%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE%E6%A0%88%E7%A7%BB%E6%A4%8D%E5%8F%8A%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8Ev1.0.7z 本说明提供了STM32F103RCT6及STM32F407VET6两种硬件平台的移植样例,每种样例分别针对RT-Thread和ucosii两种RTOS。样例工程经过了严格的内部测试,可以直接使用。 如果你没有太多时间,或者样例工程与你的目标平台并不匹配,你可以直接参考协议栈移植的一般性指导文件《onps栈移植手册》:https://gitee.com/Neo-T/open-npstack/raw/master/onps%E6%A0%88%E7%A7%BB%E6%A4%8D%E6%89%8B%E5%86%8C.pdf 协议栈开发的一般性指导文件请参考 《onps栈API接口手册》:https://gitee.com/Neo-T/open-npstack/raw/master/onps%E6%A0%88API%E6%8E%A5%E5%8F%A3%E6%89%8B%E5%86%8C.pdf)https://gitee.com/Neo-T/open-npstack/raw/master/onps%E6%A0%88%E7%94%A8%E6%88%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E5%86%8C.pdf

许可协议:Apache License 2.0开源许可协议。

onps简介

onps是一个开源且完全自主开发的国产网络协议栈,适用于资源受限的单片机系统,提供完整地ethernet/ppp/tcp/ip协议族实现,同时提供sntp、dns、ping等网络工具,支持以太网环境下dhcp动态ip地址申请,也支持动态及静态路由表。 协议栈还封装实现了一个伯克利套接字(Berkeley sockets)层。 该层并没有完全按照Berkeley sockets标准设计实现,而是我根据以往socket编程经验,以方便用户使用、简化用户编码为设计目标,重新声明并定义了一组常见socket接口函数:

  • socket:创建一个socket,目前仅支持udp和tcp两种类型
  • close:关闭一个socket,释放当前占用的协议栈资源
  • connect:与目标tcp服务器建立连接(阻塞型)或绑定一个固定的udp服务器地址
  • connect_nb:与目标tcp服务器建立连接(非阻塞型)
  • is_tcp_connected:获取当前tcp链路的连接状态
  • send:数据发送函数,tcp链路下为阻塞型
  • send_nb:数据发送函数,非阻塞型
  • is_tcp_send_ok:数据是否已成功送达tcp链路的对端(收到tcp ack报文)
  • sendto:udp数据发送函数,发送数据到指定目标地址
  • recv:数据接收函数,udp/tcp链路通用
  • recvfrom:数据接收函数,用于udp链路,接收数据的同时函数会返回数据源的地址信息
  • socket_set_rcv_timeout:设定recv()函数接收等待的时长,单位:秒
  • bind:绑定一个固定端口、地址
  • listen:tcp服务器进入监听状态
  • accept:接受一个到达的tcp连接请求
  • tcpsrv_recv_poll:tcp服务器专用函数,等待任意一个或多个tcp客户端数据到达信号
  • socket_get_last_error:获取socket最近一次发生的错误信息
  • socket_get_last_error_code:获取socket最近一次发生的错误编码

协议栈简化了传统BSD socket编程需要的一些繁琐操作,将一些不必要的操作细节改为底层实现,比如select/poll模型、阻塞及非阻塞读写操作等。 简化并不意味着推翻,socket接口函数的基本定义、主要参数、使用方法并没有改变,你完全可以根据以往经验及编程习惯快速上手并熟练使用onps栈sockets。 无须过多关注协议栈底层,利用socket api编程即可完全满足复杂通讯应用的需求,而不像LwIp一样需要使用它自定义的一组接口函数才能达成同样的目标。 为了适应单片机系统对内存使用极度变态的苛刻要求,onps协议栈在设计之初即考虑采用写时零复制(zero copy)技术。用户层数据在向下层协议传递过程中,协议栈采用buf list链表技术将它们链接到一起,直至将其发送出去,均无须任何内存复制操作。 另外,协议栈采用buddy算法提供安全、可靠的动态内存管理功能,以期最大限度地提高协议栈运行过程中的内存利用率并尽可能地减少内存碎片。 不同于本世纪00到10年代初,单片机的应用场景中ucosii等rtos尚未大规模普及,前后台系统还大行其道的时代,现如今大部分的应用场景下开发人员选择使用rtos已成为主流。 因此,协议栈在设计之初即不支持前后台模式,其架构设计建立在时下流行的rtos(RT-Thread、ucosii/iii等)之上。协议栈移植的主要工作也就自然是针对不同rtos编写相关os适配层功能函数了。 当然,如果你有着极其特定的应用场景,需要将onps栈移植到采用前后台模式的单片机上,我的建议是保留tcp/udp之下协议层的通讯处理逻辑,调整上层的系统架构使其适应目标系统运行模式。

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加V获取:vip1024b (备注Go)
img

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/2401_84254087/article/details/137938430

智能推荐

页面打印-程序员宅基地

文章浏览阅读92次。最佳答案对JS的打印方法总结一下,方便日后查阅。一.用JS自带函数打印直接调用Java代码 复制代码 1. <a href="javascript:window.print();">打印</a> <a href="javascript:window.print();">打印</a>..._toolbar: true可以打印页面吗

中国操作系统变迁史,鸿蒙之前的尸骨_国产操作系统的崛起之路的相关介绍-程序员宅基地

文章浏览阅读1.3w次,点赞156次,收藏236次。本文转载自程序员极客实验室把时钟调回到16年前,地处北京市东部远郊的平谷区做了一个大胆的决定:在全区行政公务系统全部大范围地使用国产Linux桌面操作系统,并纳入考核。此行的目的,是展开全面取代微软Windows的尝试。然而,国产操作系统并不受欢迎。在一年多的推广过程中,大家像小孩子过家家一样,在检查时用国产,检查完换盗版微软。许多问题暴露出来。比如,本来在使用微软浏览器上网很正常实现的功能,Linux下的浏览器却不能正常使用。16年过去了,6月2日晚间,华为在直播中,向观..._国产操作系统的崛起之路的相关介绍

char格式化linux和windows区别_linux和windows char区别-程序员宅基地

文章浏览阅读980次。在windows下可以使用 ''%C",将char字符格式化输入成大写字母而linux只能使用 "%c"进行格式化输入_linux和windows char区别

PAT-A-1006 Sign In and Sign Out【简单模拟】-程序员宅基地

文章浏览阅读3.8w次。At the beginning of every day, the first person who signs in the computer room will unlock the door, and the last one who signs out will lock the door. Given the records of signing in's and out's, you...

TFTP传输---wireshark抓包工具,听诊器_tftp抓包-程序员宅基地

文章浏览阅读1.9k次,点赞2次,收藏6次。1.广播受限广播2.每两个16位进制组成一个字节,再翻译成ASCII码_tftp抓包

2021年双十一活动,淘宝/天猫喵糖/京东双11任务自动助手软件+淘宝/京东/拼多多/抖音/直播抢购软件,分享代码_天猫双11幻想岛辅助-程序员宅基地

文章浏览阅读3.3k次,点赞5次,收藏26次。软件下载地址https://www.lanzoui.com/b01cfbrbihttps://www.lanzoui.com/b01cfbrbi功能1、支持天猫喵糖/京东双11任务自动完成,领取奖励(亲测可能,部分任务需要手动)2、支持淘宝/天猫/京东/拼多多/抖音/直播抢购,支持BP模式(测试了京东可以自动下单)if (!auto.service) { toast('无障碍服务未启动!退出!') exit()} // 打开淘宝活动页面 .._天猫双11幻想岛辅助

随便推点

修改Cisco交换机ntp服务器,在无线局域网控制器配置示例的NTP-程序员宅基地

文章浏览阅读859次。Introduction本文解释如何配置无线局域网控制器(WLCs)同步的日期和时间与网络时间协议(NTP)服务器。PrerequisitesRequirements尝试进行此配置之前,请确保满足以下要求:Cisco WLCs的配置的基础知识。NTP基础知识。Components Used本文档中的信息基于以下软件和硬件版本:CiscoWLC运行软件版本8.8.110.0的3504。运行Cisc..._cisco 3560 ntp

pandas合并多个DataFrame_pd.merge多个dataframe-程序员宅基地

文章浏览阅读7.1k次,点赞5次,收藏16次。pandas合并多个DataFrame合并两个DataFrame合并多个DataFrame合并两个DataFrame合并两个DataFrame用pd.mergeimport pandas as pdimport numpy as npdf1 = pd.DataFrame(np.array([ ['a', 1, 2], ['b', 3, 4], ['c', 5, 6]]), columns=['name', 'num11', 'num12'])df2 = pd._pd.merge多个dataframe

ArrayList核心代码注释汉化-程序员宅基地

文章浏览阅读244次。public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable { private sta..._arraylist代码注释汉化

软件测试面试题:怎么设计接口测试用例?_面试题如何设计接口-程序员宅基地

文章浏览阅读2.3k次,点赞5次,收藏27次。怎么设计接口测试用例?通常,设计接口测试用例需要考虑以下几个方面:(1)是否满足前提条件有些接口需要满足前提,才可成功获取数据。常见的,需要登录Token逆向用例:针对是否满足前置条件(假设为n个条件),设计0~n条用例(2)是否携带默认值参数正向用例:带默认值的参数都不填写、不传参,必填参数都填写正确且存在的“常规”值,其他不填写,设计1条用例(3)业务规则、功能需求这里根据时间情况,结合接口参数说明,可能需要设计N条正向用例和逆向用例..._面试题如何设计接口

jQuery实现遮蔽层的弹出层,根据后台循环取出的数据弹出所要的DIV层_jquery 弹出层后端获取-程序员宅基地

文章浏览阅读340次。<style type="text/css"> .bgDiv{ background-color:#e3e3e3; position:absolute; z-index:1; left:0; top:0; display:none; width:100%; ..._jquery 弹出层后端获取

关于sublime3的使用-程序员宅基地

文章浏览阅读40次。一、安装Package Control使用Ctrl+`快捷键或者通过View->Show Console菜单打开命令行,粘贴如下代码:importurllib.request,os; pf ='Package Control.sublime-package'; ipp =sublime.installed_packages_path(); urllib.request.inst...

推荐文章

热门文章

相关标签