自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(151)
  • 问答 (2)
  • 收藏
  • 关注

原创 mbedtls学习5.mbedtls扩展

学习链接SSL编程- 简单函数介绍ssl的消息读写以及和tcp语义的异同OpenSSL 简单思路和函数笔记mbedTLS(PolarSSL)简单思路和函数笔记(Client端)mbed TLS 简明教程(一)mbed TLS 简明教程(二)mbed TLS 简明教程(三)mbed_TLS RT-thread移植mbed_TLS arm网站...

2020-05-26 19:18:44 555 1

原创 mbedtls学习4.mbedtls_RAM/ROM优化指南

MbedTLS RAM 和 ROM 资源占用优化指南mbedtls 软件包采用了模块化的设计,可以使用 config.h 文件来进行功能模块的配置选择。mbedtls 默认提供的 config.h 文件是一个通用的、全功能的配置,占用了非常大的 RAM 和 ROM 空间,但是保证了 SSL 握手和通讯的建立速度、稳定性、协议兼容性以及数据传输效率。但嵌入式设备受限于其有限的 RAM 和 ROM 空间,我们不得不牺牲速度来节省 RAM 空间,裁剪不需要的功能模块来降低 ROM 占用。本优化指南,在保证

2020-05-26 14:11:29 3426

原创 mbedtls学习3.mbedtls_API分析

1.API 说明为了方便用户使用,这里列出了常用的 API,并给出了相关的使用说明。注:更多详细 API 内容请参阅 ARM mbedtls API 手册。应用层 API应用层 API 是提供给用户在 App 中直接使用的 API,这部分 API 屏蔽了 mbedtls 内部具体的操作步骤,简化了用户使用。mbedtls 初始化int mbedtls_client_init(MbedTLSSession *session, void *entropy, size_t entropyLen);

2020-05-26 14:10:31 5135 2

原创 mbedtls学习2.mbedtls从0使用指南

1.使用指南这里主要介绍 mbedtls 程序的基本使用流程,并针对使用过程中经常涉及到的结构体和重要 API 进行简要说明。mbedtls 的基本工作流程如下所示:初始化 SSL/TLS 上下文建立 SSL/TLS 握手发送、接收数据交互完成,关闭连接menuconfig 配置说明获取 mbedtls 软件包或者修改用户配置都需要使用 menuconfig。需要用户打开 ENV 工具,并将目录切换到您所用的 BSP 目录,使用 menuconfig 命令打开配置界面。在 RT-Thr

2020-05-26 14:07:34 4336 1

原创 mbedtls学习1.mbedtsl是什么?

1、介绍mbedTLS(前身 PolarSSL)是一个由 ARM 公司开源和维护的 SSL/TLS 算法库。其使用 C 编程语言以最小的编码占用空间实现了 SSL/TLS 功能及各种加密算法,易于理解、使用、集成和扩展,方便开发人员轻松地在嵌入式产品中使用 SSL/TLS 功能。该 mbedtls 软件包是 RT-Thread 基于 ARMmbed/mbedtls 开源库 v2.6.0 版本移植的.1.1 目录结构名称说明certsCA 证书存放目录docs文档目录

2020-05-25 08:49:17 2186

原创 webclient学习4.webclient-流程分析

1.使用流程使用 WebClient 软件包发送 GET/POST 请求一般需要完成如下基本流程:(1) 创建客户端会话结构体struct webclient_header{ char *buffer; //添加或者获取的头部数据 size_t length; //存放当前头部数据长度 size_t size; //存放最大支持的头部数据长度

2020-05-23 12:50:05 907

原创 webclient学习3.webclient-API分析

1.API 说明1.1创建会话struct webclient_session *webclient_session_create(size_t header_sz);创建客户端会话结构体。参数描述header_sz最大支持的头部长度返回描述!= NULLwebclient 会话结构体指针= NULL创建失败1.2关闭会话连接int webclient_close(struct webclient_session *session);关闭传

2020-05-23 12:42:08 679

原创 webclient学习2.webclient怎么用?

1.示例程序WebClient 软件包提供两个 HTTP Client 示例程序, 分别用于演示软件包支持的 GET 和 POST 功能,完成数据的上传与下载。示例文件示例程序路径说明samples/webclient_get_sample.cGET 请求测试例程samples/webclient_post_sample.cPOST 请求测试例程2.准备工作2.1获取软件包menuconfig 配置获取软件包和示例代码打开 RT-Thread 提供的 EN

2020-05-23 12:36:47 658

原创 webclient学习1.webclient是什么?

1.webclient是什么?WebClient 软件包是 RT-Thread 自主研发的,基于 HTTP 协议的客户端的实现,它提供设备与 HTTP Server 的通讯的基本功能。2.软件包功能特点WebClient 软件包功能特点:支持 IPV4/IPV6 地址WebClient 软件包会自动根据传入的 URI 地址的格式判断是 IPV4 地址或 IPV6 地址,并且从其中解析出连接服务器需要的信息,提高代码兼容性。支持 GET/POST 请求方法HTTP 有多种请求方法(GET、POS

2020-05-23 12:29:47 7891

原创 libcurl学习1_libcurl是什么?

1.libcurl是什么?可能对于新人来说,就连 cURL、libcurl 和 curl 的概念都是分不清楚的。这不怪我们,确实关于这一点,官方网站都没有说的很清楚,但是在源代码中的 FAQ 文档中却说的非常明白。What is cURL? cURL is the name of the project. The name is a play on‘Client for URLs’, originally with URL spelled in uppercase to make itobviou

2020-05-23 11:42:47 3110

原创 LWIP_简记(8.tcpip_init()之lwip_init())

LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------从这一讲开始我们来剖析一下lwip_init()中那些子系统的初始化.先上源码:/** * @ingroup lwip_nosys * Initialize all modules. ...

2020-03-28 15:22:27 3876 1

原创 LWIP_简记(7.tcpip_init()之tcpip_thread)

LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------接着上一篇的讲:/** * @ingroup lwip_os * Initialize this module: * - initialize all sub modules * - ...

2020-03-28 12:45:17 3194 1

原创 LWIP_简记(6.走一遍初始化)

LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------前面在第一节乃至后面每一篇我都在强调五步初始化,第三节也实操了一下.今天呢就详细的再来讲一下这五步初始化的具体操作.1.xxx_init(网络驱动,一般由具体厂商弄,比如BCM,RTL,AW...

2020-03-28 10:52:28 2344

原创 LWIP_简记(5.数据包管理)

LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------先整链接:https://blog.csdn.net/XieWinter/article/details/99829412这篇博文讲的特别清楚详细.前言再来自我总结:lwip说到底也就是...

2020-03-22 13:18:48 574

原创 LWIP_简记(4.高大上的内存管理)

LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------前言在第一讲中我们已经简单的提到了lwip支持的三种内存分配策略,这里我们先来聊聊这三种内存分配的异同. |C库自带内存分配策略(malloc/free/rea...

2020-03-22 12:31:48 674

原创 LWIP_简记(3.今天来点儿干货,"实操")

LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构-------------------------------------------相信大家有了前面的基础,已经对lwip有了个框架认识,那么今天就来实操一下 .按照惯例我喜欢条例化,那么来吧!以RTThread操作系统为例,五步曲跑通lwip.至于为啥选择RTThread...

2020-03-14 17:02:39 694

原创 LWIP_简记(2.谈谈具体的配置)

LWIP一句话记住就行:一项工程,两份配置,三种内存分配,四套操作API,五步初始化,六个"数据流",七个数据结构上一篇已经提到了一项工程,粗略的介绍了大纲,以及两份配置,其实要真正弄懂LWIP,还真没那么简单,讲到配置,拿东西可多了,什么协议,TCP,UDP,PPP,IP,ICMP,IGMP…各种xxP,还有各种mem,南瘦香菇.如果你以为我这里会把所有配置列出来一通分析,那你就大错特错了...

2020-03-14 12:39:33 900

原创 LWIP_简记(1.不得不说一下目录结构)

当然啦不失一般性,我也会简单讲一下LWIP的目录结构,点到为止,毕竟一开始还是面对初学者,没必要整有些没的,吓到了不好.或者一些大神原本看都看到吐了的东西,再看浪费时间,扫一眼就够了.我呢,全系列以最新的2.0.0及以上开始整.小白请自觉跳转这篇博文(https://blog.csdn.net/ZCShouCSDN/article/details/79229728).先整张图:可怕不.....

2020-03-13 20:33:56 891

原创 LWIP_简记(0.说在前面的话)

今天开始计划做一系列LWIP的简记,什么叫简记呢?说实话,鄙人开始学习网络也不久,也还在摸爬打滚,所以也都是网上各种搜索"LWIP移植","LWIP源码分析",“LWIP手把手教学”......这些关键字,于是乎就会出现一大堆网址,资料,看多了发现还是停留在移植,目录结构的介绍,但是每每看到LWIP分析...的文章还是忍不住从头到位看一遍,生怕错过什么精彩(大同小异)内容,时间悠哉悠哉就没了.所...

2020-03-13 19:21:23 631

原创 BUGS_10 gcc编译报错"commands commence before first target. Stop"

编译smartconfig时出现:make[3]: Entering directory `xxx/compile_dir/target/smartlinkd/src'Makefile:11: *** commands commence before first target. Stop.make[3]: Leaving directory `xxx/compile_dir/target/...

2020-03-13 08:52:46 590

原创 LWIP_socket(5小总结)

1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()没想到吧,我胡汉三又回来了,怎么说over就over呢,学习了不总结还学习干嘛?2.总结一下1)先简单说一下api的分析技巧,通过前面几篇,大家几乎都能够发现,在lwip中,其实还是...

2020-03-12 16:38:41 549

原创 LWIP_socket(4recv)

1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()本文着重介绍Server端的recv()过程。还记得前一篇的accept吧,不熟悉的再回去看看.前一篇文章中,accept()生成了一个新的socket,作为server端socket...

2020-03-12 16:30:53 510

原创 LWIP_socket(2listen)

1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()本文着重介绍Server端的listen()过程,这节是比较轻松的,开心的往下看就好了.用户使用socket,调用listen()时,实际调用的是lwip里的lwip_listen()...

2020-03-12 16:26:39 304

原创 LWIP_socket(3accept)

1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()本文着重介绍Server端的accept()过程。会有大量代码分析,请提前准备小板凳认真听课.上一篇我们已经分析了listen()过程,listen()过程新建了pcb并把它放到了tc...

2020-03-12 16:23:18 345

原创 LWIP_socket(1bind)

1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()2.lwip_bind()用户调用bind()时,实际调用的是lwip_bind(),我们从这个函数看起: 1 int 2 lwip_bind(int s, const struc...

2020-03-12 16:17:15 278

原创 LWIP_socket(0创建)

1.前言一个基本的socket建立顺序是Server端:socket()bind()listen()accept()recv()Client端:socket()connect()send()2.lwip_socket()用户使用socket时,首先会调用socket()函数创建一个socket。在lwip中实际调用的就是lwip_socket()函数。intlwip_...

2020-03-12 16:12:23 1628 1

原创 NET6_LWIP使用DNS服务

ping测试,使用dns时出现:msh />ping www.baidu.comping: unknown host www.baidu.com----------------------------经过排查发现:先把宏定义添加上去#ifndef LWIP_DNS#define LWIP_DNS 1#endif在系统初始化调用dns_init();1、创建一个udp的专...

2020-03-12 15:43:07 334

原创 LWIP_ARP协议(6个人总结)

功能根据目标IP地址,寻找网络中的目的主机,获取主机MAC地址.实质IP地址和MAC地址的映射,对arp缓存表项的建立,更新,查询操作.关键数据结构表项数组[]每一个元素(即每一个表项)都有如下重要指标:IP地址<–>MAC地址状态:enum etharp_state{ETHARP_STATE_EMPTY = 0, //空ETHARP_STATE_PENDING...

2020-03-12 11:46:49 492

转载 LWIP_ARP协议(0协议原理)

引言从前一篇文章中,我们知道计算机中会维护一个ARP缓存表,这个表记录着IP地址与MAC地址的映射关系,我们可以通过在电脑的控制台通过arp -a指令查看一下我们自己计算机的ARP缓存表:那么什么是ARP协议呢?初始ARPARP协议是地址解析协议(Address Resolution Protocol)是通过解析IP地址得到MAC地址的,是一个在网络协议包中极其重要的网络传输协议,它与网...

2020-03-12 11:09:14 447

转载 LWIPARP协议(5数据包接收)

ARP数据包处理以太网是有自己独立的寻址方式(MAC地址),而对于TCP/IP的上层协议(如TCP协议、IP协议),它们是以IP地址作为网络的标识,如果没有IP地址则无法进行收发数据。当数据通过网卡中接收回来的时候,LwIP内核就需要将数据进行分解,如果是IP数据报则递交给IP协议去处理,如果是ARP数据包则交由ARP协议去处理。真正让LwIP内核去处理接收到的数据包是ethernet_inp...

2020-03-12 10:42:40 393

转载 LWIP_ARP协议(4数据包发送)

ARP数据包发送我们知道一个数据包从底层传递进来的流程是怎么样的,如果是ARP数据包就会给ARP去处理,如果是IP数据报就使用ip4_input()函数传递到上层,这些处理在后面的章节讲解。那么如果上层协议想要发送数据,也肯定需要经过ARP协议将IP地址映射为MAC地址才能完成发送操作,IP数据报通过ip4_output()函数将上层数据包传递到ARP协议处理,关于IP协议是怎么样传递的我们暂且...

2020-03-12 10:40:30 363

转载 LWIP_ARP协议(3请求包的发送)

发送ARP请求包发送ARP请求包的时候,需要填充已知的目标IP地址、源MAC地址、源IP地址等,并且需要该ARP包进行广播出去,所以以太网首部的目标MAC地址为FF-FF-FF-FF-FF-FF。LwIP先调用etharp_request()函数进行发送ARP请求包,在etharp_request()函数中会调用etharp_request_dst()函数进行发送,此时指定的目标MAC地址是e...

2020-03-12 10:37:58 580

转载 LWIP_ARP协议(2缓存表超时处理)

ARP缓存表的超时处理ARP表项的生存时间是5分钟,而ARP请求的等待时间是5秒钟,当这些时间到达后,就会更新ARP表项,如果在物理链路层无法连通则会删除表项。这就需要ARP层有一个超时处理函数对ARP进行管理,这些操作都是根据ARP表项的ctime字段进行的,它记录着对应表项的生存时间,而超时处理函数是etharp_tmr(),它是一个周期性的超时处理函数,每隔1秒就调用一次,当ctime的值...

2020-03-12 10:35:24 1056

转载 LWIP_ARP协议(1缓存表数据结构)

前言从前面的文章,我们知道,ARP协议的核心是ARP缓存表,而ARP协议的实质就是对缓存表项(entry)的建立、更新、查询等操作。那么,LwIP中是是怎么实现ARP协议的呢?ARP缓存表的数据结构LwIP使用一个arp_table数组描述ARP缓存表,数组的内容是表项的内容,每个表项都必须记录一对IP地址与MAC地址的映射关系,此外还有一些基本的信息,如表项的状态、生命周期(生存时间)以...

2020-03-12 10:32:45 644

原创 TIPS16_Illegal Instruction错误小谈

1 现象当执行一段程序时,发生错误,并报”illegal instruction”错typedef void(*FUNC)(void);int main(void){ const static unsigned char insn[4] = { 0xff, 0xff, 0xff, 0xff }; FUNC function = (FUNC) insn; function(...

2020-01-07 09:59:02 386

原创 BUGS9_strncpy函数拷贝长度不对

一、strcpy()与strncpy() strcpy():strcpy(dest,src); strcpy把src所指向以'\0'结尾的字符串复制到dest所指的数组中,返回指向dest的指针。 当sizeof(dest)>=sizeof(src)时,拷贝正确,并在dest字符串后面加入'\0'; 当sizeof(dest)<sizeof(src)时,拷贝出错。...

2020-01-07 09:51:44 638

原创 TIPS15_ubuntu14.04搭建rt-thread开发环境

1.下载交叉编译工具链下载gcc-arm-none-eabi交叉编译工具链apt-get install gcc-arm-none-eabi下载完成后,一般工具链路径在/usr/bin下,这个时候你在终端执行arm,然后按[TAB]键就会看到很多命令2.下载RT-Thread编译工具RT-Thread使用了scons做为自身的编译构建系统,并进行一定的定制以满足自身的需求(可以通过sc...

2019-11-22 11:02:02 268

转载 ubuntu安装adb

1、通过apt-get安装adbsudo add-apt-repository ppa:nilarimogard/webupd8sudo apt-get updatesudo apt-get install android-tools-adb将android设备连接至电脑,执行adbshell会提示“error:device not found”2、将android设备连接至电脑,通过l...

2019-11-01 17:53:47 535

转载 getopt函数解析

平时在写程序时常常需要对命令行参数进行处理,因为参数少,自己解析就可以搞定;如果命令行个数比较多时,如果按照顺序一个一个定义参数含义很容易造成混乱,而且如果程序只按顺序处理参数的话,一些“可选参数”的功能将很难实现,这个问题在 linux 中用 getopt 等函数可以优雅地解决。一、查询linux命令手册:复制代码#include<unistd.h>#include<...

2019-10-25 14:36:04 545

原创 Ctips6_条件编译那点儿事

1.概念条件编译(conditional compiling)命令指定预处理器依据特定的条件来判断保留或删除某段源代码。例如,可以使用条件编译让源代码适用于不同的目标系统,而不需要管理该源代码的各种不同版本。2.形式条件编译区域以 #if、#ifdef 或 #ifndef 等命令作为开头,以 #endif 命令结尾。**条件编译区域可以有任意数量的 #elif 命令,但最多一个 #else ...

2019-09-30 09:26:51 100

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除