- 博客(47)
- 收藏
- 关注
原创 LWIP中NETCONN接口编程(上)
netbuf结构体LWIP为了更好描述应用线程发送接收的数据,并且为了更好管理这些数据的缓冲区,LWIP定义了一个netbuf结构体,它是基于pbuf上更高一层的封装,记录了主机的ip地址与端口号,端口号对应的就是应用线程,在接收的时候,应用程序肯定需要知道到底是谁发送数据给自己,而在发送的时候,应用程序需要将自己的端口号与IP地址填充到netbuf结构体对应字段中.netbuf结构体1...
2019-09-07 10:46:39 1351
原创 LWIP中TCP协议的介绍
TCP协议(Transmission Control Protocol)传输控制协议在LWIP协议栈中占据了大半的代码,它是最常见的传输层协议,也是最稳定的传输层协议,很多上层应用都是依赖TCP协议进程传输数据,如SMTP,FTP等等TCP服务介绍TCP与UDP一样,都是传输层的协议,但是提供的服务却不相同,UDP为上层应用提供的是一种不可靠的,无连接的服务,而TCP提供一种面向连接,可靠...
2019-09-03 16:04:43 1077
原创 以太网模型以及以太网的接入方案
以太网的实现采用层次结构的概念,每一层都有自己的功能,就像建筑物一样,每一层都靠下一层支持,每一层都为上一层功能的实现打好基础。实际上,用户接触到的只是最上面的一层,根本感觉不到底层的存在。要理解与以太网,必须从最下层开始,自下而上理解每一层的功能。五层结构以太网的模型有不同的分层方式,ISO(国际标椎组织)提出OSI七层网络模型,自上而下分别为:应用层,表示层,会话层,传输层,网络层...
2019-08-30 10:18:31 2610
原创 TCP的三次握手四次挥手
以太网控制芯片在内部利用硬件实现了TCP/IP 协议栈,即内部结构包含了物理层、数据链路层、网络层和传输层。全硬件 TCP/IP 协议栈完全独立于主控芯片,可以降低主芯片负载且无需移植繁琐的 TCP/IP 协议栈,便于产品 实现网络化更新。TCP Server/ClientTCP是整个协议族的核心协议之一,是TCP/IP体系中面向连接的传输层协议,它使用IP作为网络层提供全双工的和可靠交付...
2019-08-26 16:14:25 188
原创 LWIP中netif结构体的介绍
网络接口网络接口(以太网接口)是硬件接口(网络接口又可以称之为网卡)LWIP是软件那么而怎样让硬件和软件无缝连接起来呢?而且网卡又多种多样,怎样才能让LWIP使用同样的软件兼容不同的硬件平台?LWIP中使用了一个netif结构体来描述网卡但是网卡是直接和硬件平台打交道的,硬件不同则处理基本上是不同的,所以由用户提供最底层的接口函数,LWIP提供统一的接口,但是底层的实现需要用户自己去完成,...
2019-08-23 09:02:42 5401
原创 Navicat连接Mysql遇到的错误
在navicat链接mysql以后的版本时,会出现2059的错误,这个错误出现的原因是在mysql8之前的版本中加密规则为mysql_native_password,而在mysql8以后的加密规则为caching_sha2_password。解决此问题有两种方法,一种是更新navicat驱动来解决此问题,一种是将mysql用户登录的加密规则修改为mysql_native_password。本文采用...
2019-08-21 16:31:13 299
原创 LWIP数据包和网络接口管理
LWIP数据包管理lwip使用pbuf结构体来描述协议栈使用的数据包,pbuf结构体在pbuf.h中的定义struct pbuf{ struct pbuf*next; //指向下一个pbuf结构体,可以构成链表 void *payload; //指向该pbuf真正的数据区 u16_t tot_len; //当前pbuf和链表中后面所有...
2019-08-21 09:13:55 358
原创 结构体和而联合体的区别
两者最大的区别是内存的使用一 结构体struct各成员各自拥有自己的内存,各自使用互不干扰,同时存在的,遵循内存对齐原则。一个struct变量的总长度等于所有成员的长度之和二 联合体union各成员共用一块内存空间,并且同时只有一个成员可以得到这块内存的使用权(对该内存的读写)各变量共用一个内存的首地址,因此联合体比结构体更节约内存。一个union的总长度至少能容纳最大成...
2019-08-14 10:10:36 413 4
原创 linux下各种安装包的安装命令
一 rpm包安装步骤找到相应的安装包,比如xxx.xx.rpm,下载到本机的某个目录 打开终端,切换成root用户模式 cd到安装包的目录下 输入rpm -ivh xxx.xx.rpm二 deb包安装方式步骤找到相应的软件包,比如xxx.xx.deb,下载到本机目录 打开终端,切换成超级用户 cd到安装包的目录下 输入dpkg -i xxx.xx.deb三 tar.gz源代...
2019-08-06 16:36:24 5443 1
原创 串行和并行
串行传输:串行传输即串行通信,是指使用一条数据线 将数据一位一位地依次传输,每一个数据占据一个固定的时间长度,其只需要少数几条线就可以在系统之间交换信息,特别适合计算机和计算机 计算机和外设之间的远距离通信。并行传输:并行传输指的是数据以成组的方式,在多条并行信道上同时进行传输,是在传输中有多条数据位同时在设备之间进行传输。区别:串行传输的速度比并行传输的速度要慢的多,但是费用低并行传输...
2019-07-31 19:21:31 2591
原创 FreeRTOS任务
系统运行时,全局变量放在哪里?子函数调用时,局部变量放在哪里?中断发生时函数的返回地址放在哪里???栈是单片机RAM中一段连续的内存空间 栈的大小一般在启动文件或者连接脚本中指定,最后由C库函数 __main进行初始化在多任务中每个任务都是独立的互不干扰的,所以每个任务都分配独立的栈空间,这个栈空间通常是一个预先定义好的全局数组,也可以是动态分配的一段内存空间 ,都存在与RAM ...
2019-07-29 15:23:03 232 1
原创 中断向量,中断向量表 ,中断服务函数
所谓中断是指CPU在正常执行程序的过程中,由于内部/外部事件的触发或由程序的预先安排,引起CPU暂时中断当前正在运行的程序,而转去执行为内部/外部事件或程序预先安排的事件的服务子程序,待中断服务子程序执行完毕后,CPU再返回到被暂时中断的程序处(断点)继续执行原来的程序,这一过程成为中断。中断向量:中断的地址的变量;中断向量表:中断类型号与相应中断源的中断处理程序入口地址之间的连接表;...
2019-07-29 12:31:52 9998 1
原创 启动代码的讲解
启动代码通常烧写在flash上,它是系统一上电就能够执行的一段程序,它运行在任何用户C代码之前,上电后ARM处理器处于ARM态,运行于管理模式,同时系统的所有中断被禁止,PC到地址0处取指令执行,一个可执行映像文件必须有一个入口点,而能够放在ROM起始处的映像文件的入口地址也必须设置为0启动代码主要完成两方面的工作:初始化执行环境 中断向量表 堆栈 I/O接口 初始化C库 和用户的应...
2019-07-19 13:38:26 3199
原创 STM32的讲解
GPIO general purpose input output 通用的输入输出GPIO的输入输出方式四种输 浮空输入模式上拉输入模式 下拉输入模式. 四种输出模式 四种最大的输出速度IO口为FT的话表示支持5V容忍上电复位后,GPIO口默认为输入浮空状态,部分特殊功能的引脚为特定的状态GPIO端口可以通过程序配置成输入或者输出STM32的引脚中,有部分是做...
2019-07-18 11:09:22 1091 1
原创 cmder的配置以及应用
简介cmder是一个增强型的命令行工具,不仅可以使用windows下的所有命令,更爽的是还可以使用linux下的所有命令下载官网下载:http://cmder.net/下载的时候会有两个版本分别是mini和full版,区别是有没有内建的msysgit工具,这是git forWindows的标准配备;配置环境变量配置环境变量的目的是可以直接在右键中运行在系统变量下...
2019-04-10 12:54:01 150
转载 类视图和方法视图
类视图的引入以函数的形式进行定义的视图就是函数视图,视图函数便于理解,但是遇到一个视图函数对应的路径提供了多种不同的HTTP请求方式的支持时(get,post,delete,put),需要在一个函数中写不同的业务逻辑,代码的可读性和复用性就很底, 所以,我们引入类视图进行解决. def register(re...
2018-10-09 21:50:19 452
原创 django用虚拟环境创建项目
为什么需要虚拟环境到目前位置,我们所有的第三方包安装都是直接通过pip install xx的方式进行安装的,这样安装会将那个包安装到你的系统级的Python环境中。但是这样有一个问题,就是如果你现在用Django 1.10.x写了个网站,然后你的领导跟你说,之前有一个旧项目是用Django 0.9开发的,让你来维护,但是Django 1.10不再兼容Django 0.9的一些语法了。这时候就...
2018-09-29 20:04:25 967
原创 模块和urllib的简介
urllib 的简介模块在程序开发的过程中 随着程序代码越来越多在一个文件里代码越来越长,就不容易维护为了编写可以维护的代码,我们把很多函数进行分组,分别放在不同的文件中,很多编程语言就运用这种组织代码的方式,在python中一个py 文件就是一个模块使用模块的好处?1实现了代码的可维护性,当一个代码编写完毕时就可以被其他的地方进行引用,我们在编写代码的时候就经常使用其...
2018-09-06 22:39:02 145
原创 nodejs
一nodejs的简介Node.js是运行在服务端的javaScrips Node.js是一个基于Chrome javaScrip运行时建立的一个平台. 是一个事件驱动I/o服务端的JavaScript环境二 Nodejs的安装 下载地址 : https://nodejs.org/dist/v4.4.3/node-v4.4.3-x64.msi下载完成后进行点击安装 ...
2018-08-29 21:23:31 214
原创 分布式爬虫和redis
分布式爬虫什么是分布式爬虫默认情况下scrapy是单机爬虫,只能在一台电脑上运行因为爬虫调度器当中的queue去重和set集合都是在本机上创建的其他的计算机无法访问另外一台计算机上的内存的内容分布式爬虫用一个共同的程序,同时部署到多台电脑上运行这样可以提高爬虫的速度 实施分布式爬虫分布式爬虫的前提1 保证每一台计算机都能够正常执行scrapy命令 能够启动爬虫...
2018-08-13 21:46:05 386
原创 代码发送电子邮件
smtplib 简单邮件传输协议 simble mail transfer protocol libraryimport smtplib 引入的包import email 多用户邮件扩充协议from email.mime.text import MIMETextfrom email.mime.image import MIMEImagefrom email.mime...
2018-08-11 17:28:35 4683
原创 phantomJS
1 phantomJs是基于webkit的JavaScript API 它使用的是QTwebKit作为它核心的浏览器核心功能 使用webkit来编译解释执行javascript代码,任何你能够在浏览器中做到的 webkit都可以做到,它不仅是一个隐形的浏览器提供了诸如css选择器,支持web标准 DOM操作JSON HTML5Canvas SVG 同时也提供了处理文件IO的操...
2018-08-09 20:12:47 430
原创 获取文本内部标签的内容
1获取最外部的标签 获取内部的所有的子标签获取标签文本type_list = response.xpath('//div[@class="book-info"]/p[@class="tag-box"]/span/i/text()').extract() for type in type_list: print(type)2正则去掉所有标签的所有内容 re.com...
2018-08-06 21:37:15 1048
原创 xpath的用法
xpath的简介xpath是一门在xml会或者html中进行信息定位并且查找在xml文档中通过元素和属性进行导航xpath的标准函数xpath含有标准的内建函数100多个 这些函数用于字符串值,数值日期和时间节点进行比较序列处理,逻辑值等操作xpath中,有七种类型的节点:元素,属性,文本,命名空间,处理指令,注释以及文档节点(或者称之为根节点)xml文档<?xm...
2018-08-04 16:00:00 261
原创 scrapy的应用
scrapy 的简介BOT_NAME= '百度' 爬虫所在地CONCURRENT_REQUESRS = 32最大请求并发量ENABLE OR DISABLE middlewares值越小优先级越高 优先级越高越先执行benchfetchgenipiderscrapy 全局命令scrapy startproject <项目名称>进入到相...
2018-08-01 21:59:43 477
原创 scrapy 框架的安装
1Scrapy的简介Scrapy 是用纯python实现的为了爬取网络数据的,提取结构性数据而编写的应用型框架Scrapy 使用了twisted异步网络框架来处理网络通信可以加快下载速度,不用自己去实现异步框架并且包含了各种中间件接口 可以灵活地完成各种需求2怎么安装scrapy框架在终端下输入pip install scrapy命令安装,提示Faile bui...
2018-08-01 21:34:54 246
原创 yield和 return
return可以往法外传递一个值 从之后return之后的代码不再执行yield 也可以往方法里面传递一个值 但是传递之后继续执行后面的代码通过yield传递的值的方法是一个可以迭代的对象returndef test1(name): print('return方法') return name print('return方法结束')name = test...
2018-08-01 20:42:12 767
原创 线程与进程
1进程与线程进程:狭义定义:一段程序的执行顺序广义定义:进程就是具有一定独立功能的程序关于某个数据集合上的一次运动活动进程是进行资源分配和调度的独立单位线程是进程的一个实体,是cpu调度和分派的基本单位 他是比进程还小的能独立运行的基本单位线程基本上不自己拥有系统资源只拥有一点在运行中必不可少的资源(程序计数器 寄存器和栈)但是他可以同属于一个进程的其他线程共享进程的...
2018-08-01 20:36:34 127
原创 数据请求
1 from urllib.request import urlopenfrom urllib.parse import quoteimport stringimport jsonurl = 'http://api.map.baidu.com/telematics/v3/weather?location=%E9%83%91%E5%B7%9E%E5%B8%82&output=j...
2018-07-31 16:22:01 134
原创 selenium的学习
1 selenium英文原意是硒 在python中是一个自动化测试工具测试按照不同得我分类 分为手动测试 或者自动测试 黑盒测试或者白盒测试 selenium在python中的应用selenium 可以完全模拟人,对浏览器操作,对动态数据进行获取 ,动态数据由代码生成,在页面的初始化过程中是没有的,也无法获取 但是可以通过selenium进行获取...
2018-07-30 20:27:58 170
原创 http
1URLURL的全称是Uniform Resource Locator(统一资源定位符)通过1个URL,能找到互联网上唯一的1个资源URL就是资源的地址、上位置,互联网的每个资源都有一个唯一的URLURL的基本格式 = 协议://主机地址/路径协议:不同的协议,代表着不同的资源查找方式、资源传输方式主机地址:存放资源的主机的IP地址(域名)路径:资源在主机中的具体位置U...
2018-07-18 22:47:40 278
原创 正则表达式
判断目标字符串是否符合特定的要求 \d 表示任意的一位数字 digit \d\d 表示任意的两位数字 \w 表示任意的一个字母或者数字 word \s 表示任意的空格 space . 表示任意的内容一般不单独使用123 abc!@ a.在a后面匹配任意的内容 * 表示*前面的内容出现0次或者多次 + 表示+前面内容出现一...
2018-07-18 20:02:03 108
原创 python中的*args和**kwargs
*args **kwargs都可以传多个参数def test(a, *args, **kwargs): print(a) print(args) print(kwargs)test('张三','17',True,{'name':'王五'},friend = '赵六')kwargs对应的参数必须是关键参数,args对应的参数可以是任何形式...
2018-07-12 23:09:27 116
原创 python错误总结
TypeError: ‘ <‘ not supported between instance of ‘str’ and ‘int ’ 不支持在字符串和数字之间使用<ValueError:substring not found值错误 子串没找到syntaxError: 'return' outside function 语法错误 return 不在方法内IndentationErr...
2018-07-10 11:54:16 775
原创 类与对象
1.计算机语言机器语言汇编语言高级语言 1面向过程的语言 C语言 注重实现的过程 2面向对象的语言 java , oc, C++, C#, python 注重谁来执行方法类 静态的属性 动态的方法 ...
2018-07-06 19:31:44 100
原创 数据库操作
1数据的存储 将数据拼接成字符串 list tuple dict以上数据都是同一种方式,将数据存放在内存中实际开发过程中存储数据主要有三种方式a将数据存放在内存中优点:使用方便读写速度快 缺点:程序关闭的时候,内存会被释放数据会消失b将数据写在文件中优点:数据存储是永久性的 不易丢失 缺点:打开关闭文件操作数据比较麻烦c将数据存储到数据库中优点...
2018-07-06 19:03:33 116
原创 异常处理和函数
1异常处理的形式try: print('这是一个标准格式') print(dic['data'])except IndexError as e: print('上一行代码出现了索引错误{}'.format(e))except KeyError as e: print('上一行代码出现了关键字错误{}'.format(e))# 如果没有出现任何错误 即执行els...
2018-07-04 20:06:36 781
原创 时间和系统操作
1引入prettyprinter包2引入时间包 import time获取从1970年到现在的秒数import timetime_line = time.time()print(time_line)time.struct_time获取本地时间time1 = time.localtime()# 得到的是一个结构体# 0 周日 1-6周一到周六 js# 0 周一 6周日prin...
2018-07-02 22:42:53 136
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人