自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

杰杰的博客

知易行难,以最好的状态迈向梦想!

  • 博客(13)
  • 资源 (7)
  • 收藏
  • 关注

原创 LwIP的ARP协议实现(5)

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

2019-03-29 11:33:22 2235

原创 LwIP的ARP协议实现(4)

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

2019-03-29 11:32:35 1497

原创 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...

2019-03-29 11:31:18 1552

原创 LwIP中的ARP协议实现(2)

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

2019-03-29 11:30:15 1335

原创 LwIP中的ARP协议实现(1)

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

2019-03-28 22:00:44 2084

原创 STM8L051F3_0c_新建工程

注意:stm8系列教程原创作者是我师兄:光光本文介绍基于IAR For STM8+ STM8L15x-16x-05x-AL31-L_StdPeriph_Lib(官方固件库)来新建STM8L051F3工程,STM8L的标准固件库可以到ST的官方网站中找到并下载,下载地址:http://www.st.com/content/st_com/en/products/embedded-software...

2019-03-13 15:02:51 2465

原创 STM8L051F3_0b_开发环境搭建

注意:原创作者是我师兄:光光本节介绍IAR For STM8(EWSTM8)开发环境搭建。开发环境的搭建步骤如下:软件下载 软件安装与注册 软件使用1、软件下载IAR For STM8(EWSTM8)的软件包可到技新官网:https://www.jixin.pro/中下载,也可以根据下面的教程到IAR的官网中下载(推荐)。下面开始介绍IAR For STM8(EWSTM8)开发环...

2019-03-13 15:02:02 1974

原创 继续学习FreeRTOS~

写在前面:杰杰这个月很忙~所以并没有时间更新,现在健身房闭馆装修,晚上有空就更新一下!其实在公众号没更新的这段日子,每天都有兄弟在来关注我的公众号,这让我受宠若惊,在这里谢谢大家的支持啦!!谢谢^在这里我们就跟着火哥的书来学习一下FreeRTOS的消息队列,这本书我觉得写得很好,基本都讲解到了,关于什么是消息队列,就请大家去看书,基础知识我暂时不说了。声明:本书绝大部分内容来自《FreeR...

2019-03-13 15:00:56 1048 7

原创 ARP协议原理

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

2019-03-12 20:03:05 47498 9

原创 STM8L051F3_0d_基础介绍

在开始学习外设使用之前,先了解一下STM8L051F3单片机系统中的基础部分:PWR(电源控制系统)、RST(复位系统)、CLK(时钟控制系统)。本节内容分为以下部分:PWR介绍 RST介绍 CLK介绍1、PWR介绍STM8L051F3是STM8L系列中属于低密度(low-density)产品,供电电压范围:1.8V~3.6V,供电的接口采用同一电源(VDD&VDD...

2019-03-12 20:01:04 4457

原创 网络底层知识

前言从前一篇文章,我们也知道大概的网络相关知识,网络这个系列文章就从底层往顶层讲解,本篇文章就来接触一下网络底层的相关知识。概述网络中的数据递交当用户发送数据时,将数据向下交给传输层,这是处于应用层的操作,应用层可以通过调用传输层的接口来编写特定的应用程序,并且TCP/IP协议栈一般也会包含一些简单的应用协议如 Telnet 远程登录、FTP文件传输、SMTP 邮件传输协议等,这些协议有自己...

2019-03-05 21:15:06 2825

原创 基于ubuntu腾讯云主机搭建网盘(我主要用于放书)

准备云主机一台(系统:ubuntu 16.4)域名。解析域名。域名设置解析后需要过一段时间才会生效。通过 ping 命令检查域名是否生效,如:ping www.yourdomain.com如果 ping 命令返回的信息中含有你设置的解析的 IP 地址,说明解析成功。注意替换下面命令中的 www.yourdomain.com为你自己的注册的域名安装 Seafile 服务器安装依...

2019-03-04 07:48:54 604

原创 http客户端

int WebClient(const char *url, const char *post, uint8_t **pageBuf){ uint16_t i, j, k; char *server_addr = NULL; char *web_addr = NULL; ip_addr_t server_ip; struct netconn *conn =...

2019-03-01 23:05:26 688

代码大全(第二版超高清文字版)——文字版

代码大全文字版(可复制),非扫描版,超高清,全书9M 《代码大全(第2版)》是著名IT畅销书作者、《IEEE Software》杂志前主编、具有20年编程与项目管理经验的Steve McConnell十余年前的经典著作的全新演绎:第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论等等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种实践方法。 作者特别注重源代码的可读性,详细讨论了类和函数命名、变量命名、数据类型和控制结构、代码布局等编程的最基本要素,也讨论了防御式编程、表驱动法、协同构建、开发者测试、性能优化等有效开发实践,这些都服务于软件的首要技术使命:管理复杂度。为了培养程序员编写高质量代码的习惯,书中展示了大量高质量代码示例(以及用作对比的低质量代码),提高软件质量是降低开发成本的重要途径。除此之外,《代码大全(第2版)》归纳总结来自专家经验、业界研究以及学术成果,列举了大量软件开发领域的真实案例与统计数据,提高本书的说服力。 《代码大全(第2版)》中所论述的技术不仅填补了初级与高级编程实践之间的空白,而且也为程序员们提供了一个有关软件开发技术的信息来源。《代码大全(第2版)》对经验丰富的程序员、技术带头人、自学的程序员及没有太多编程经验的学生都是大有裨益的。可以说,只要您具有一定的编程基础,想成为一名优秀的程序员,阅读《代码大全(第2版)》都不会让您失望。

2019-03-04

LwIP+freertos工程(LwIP2.1.2最新版本)

下面是一些接口文件代码: /* 如果timeout参数不为零,则返回值为 等待信号量所花费的毫秒数。如果 信号量未在指定时间内发出信号,返回值为 SYS_ARCH_TIMEOUT。如果线程不必等待信号量 该函数返回零。 */ u32_t sys_arch_sem_wait(sys_sem_t *sem, u32_t timeout) { u32_t wait_tick = 0; u32_t start_tick = 0 ; //看看信号量是否有效 if(*sem == SYS_SEM_NULL) return SYS_ARCH_TIMEOUT; //首先获取开始等待信号量的时钟节拍 start_tick = xTaskGetTickCount(); //timeout != 0,需要将ms换成系统的时钟节拍 if(timeout != 0) { //将ms转换成时钟节拍 wait_tick = timeout / portTICK_PERIOD_MS; if (wait_tick == 0) wait_tick = 1; } else wait_tick = portMAX_DELAY; //一直阻塞 //等待成功,计算等待的时间,否则就表示等待超时 if(xSemaphoreTake(*sem, wait_tick) == pdTRUE) return ((xTaskGetTickCount()-start_tick)*portTICK_RATE_MS); else return SYS_ARCH_TIMEOUT; } void sys_sem_signal(sys_sem_t *sem) { if(xSemaphoreGive( *sem ) != pdTRUE) printf("[sys_arch]:sem signal fail!\n"); } err_t sys_mutex_new(sys_mutex_t *mutex) { /* 创建 sem */ *mutex = xSemaphoreCreateMutex(); if(*mutex != SYS_MRTEX_NULL) return ERR_OK; else { printf("[sys_arch]:new mutex fail!\n"); return ERR_MEM; } }

2019-01-27

RT-Thread学习笔记,思维导图

个人根据野火书籍学习整理的笔记,从0到1一步步实现rtos,结合RT-Thread v 3.0.3的源码实现线程切换的思路,帮助用户理解rtt的处理。RT-Thread学习笔记,思维导图

2018-09-06

stm32串口缓冲区源码

环形队列的实现:在计算机中,也是没有环形的内存的,只不过是我们将顺序的内存处理过,让某一段内存形成环形,使他们首尾相连,简单来说,这其实就是一个数组,只不过有两个指针,一个指向列队头,一个指向列队尾。指向列队头的指针(Head)是缓冲区可读的数据,指向列队尾的指针(Tail)是缓冲区可写的数据,通过移动这两个指针(Head) &(Tail)即可对缓冲区的数据进行读写操作了,直到缓冲区已满(头尾相接),将数据处理完,可以释放掉数据,又可以进行存储新的数据了。 实现的原理:初始化的时候,列队头与列队尾都指向0,当有数据存储的时候,数据存储在‘0’的地址空间,列队尾指向下一个可以存储数据的地方‘1’,再有数据来的时候,存储数据到地址‘1’,然后队列尾指向下一个地址‘2’。当数据要进行处理的时候,肯定是先处理‘0’空间的数据,也就是列队头的数据,处理完了数据,‘0’地址空间的数据进行释放掉,列队头指向下一个可以处理数据的地址‘1’。从而实现整个环形缓冲区的数据读写。 1/** 2* @brief Write_RingBuff 3* @param u8 data 4* @return FLASE:环形缓冲区已满,写入失败;TRUE:写入成功 5* @author 杰杰 6* @date 2018 7* @version v1.0 8* @note 往环形缓冲区写入u8类型的数据 9*/ 10u8 Write_RingBuff(u8 data) 11{ 12 if(ringBuff.Lenght >= RINGBUFF_LEN) //判断缓冲区是否已满 13 { 14 return FLASE; 15 } 16 ringBuff.Ring_Buff[ringBuff.Tail]=data; 17// ringBuff.Tail++; 18 ringBuff.Tail = (ringBuff.Tail+1)%RINGBUFF_LEN;//防止越界非法访问 19 ringBuff.Lenght++; 20 return TRUE; 21} 具体见我博客:https://blog.csdn.net/jiejiemcu/article/details/80563422

2018-08-27

C#上位机源码串口调试助手

是杰杰之前做的 一个参赛小作品 其实在做这个恒温控制系统项目的时候,师弟就问我,什么是上位机。。。。。可能很多师弟师妹都没一个大概的概念。 现在,就来看下什么是上位机: 上位机是指可以直接发出操控命令的计算机,一般是PC/host computer/master computer/upper computer,屏幕上显示各种信号变化(液压,水位,温度等)。下位机是直接控制设备获取设备状况的计算机,一般是PLC/单片机single chip microcomputer/slave computer/lower computer之类的。上位机发出的命令首先给下位机,下位机再根据此命令解释成相应时序信号直接控制相应设备。下位机不时读取设备状态数据(一般为模拟量),转换成数字信号反馈给上位机。简言之如此,实际情况千差万别,但万变不离其宗:上下位机都需要编程,都有专门的开发系统。 在概念上,控制者和提供服务者是上位机,被控制者和被服务者是下位机,也可以理解为主机和从机的关系,但上位机和下位机是可以转换的。 工作原理 两机如何通讯,一般取决于下位机,TCP/IP一般是支持的,但是下位机一般具有更可靠的独有通讯协议。通常上位机和下位机通讯可以采用不同通讯协议,可以有RS232的串口通讯或者采用RS485串行通讯。采用封装好的程序开发工具就可以实现下位机和上位机的通讯,当然可以自己编写驱动类的接口协议控制上位机和下位机的通讯。 通常工控机,工作站,触摸屏作为上位机,通信控制PLC,单片机等作为下位机,从而控制相关设备元件和驱动装置。 既然差不多知道什么是上位机与下位机,那么,我们做到小喇叭的要求:就得写个上位机,我自己也是学了下C#,用来开发上位机还是可以的,开发环境用visual studio 2015,微软的软件真的是很简单,之前看到有人问为什么微软的软件是最多人用的,答:因为那是傻瓜式操作。。。。。我不得不认同。。。 回归正题:先看看我们的上位机有什么功能: 1)能够实现与下位机的正常通讯。这必须得有,不然算哪门子上位机啊。 2)能够控制我们的恒温系统,通过电脑控制恒温系统的温度。这种应用场景很正常,我在机房就能控制我某一个地方的温度,简单方便。 3)能够实时显示温度与波形。这种应用的场景也是非常常见,实时显示温度我们可以知道温度是否正常,而波形我们能快速看出恒温系统空间温度是否出现异常。 4)数据保存功能,自动将实时的温度保存下来,加入 日期与时间,方便以后排查问题的时候用于检测某段时间的温度是否正常,这也是很使用的功能。 说了那么多,看看我们的上位机。由于我以前用的别人的上位机都是色调比较单一的,而我,又是那种比较活泼开朗的人,觉得单一的灰色调比较死沉,我不喜欢,当然那是别人做的上位机,即使再不喜欢,要用还是要用,没办法, 现在我自己做的就不一样了,得给他做个五颜六色出来。亮瞎眼。。。。。 1.png 2.jpg 3.jpg 当我们的温度达到目标温度的时候,下位机就会控制自己的温度,以保持温度恒定,同时在上位机显示看到温度为一条曲线,由于我设置的温度为整数,没有小数,但是我们通过下位机可以看到实时的温度,精确在0.4范围左右。 4.jpg 当我们把上位机与下位机通讯协议切断,可以看到上位机接受不到数据(在软件右下角粉红色的窗口,没有显示接收到的数据),上位机的波形就会回到默认值(0°),就是上图的样子 5.jpg 6.jpg 当我们需要后期的检测与排除故障的时候,我们可以从我们保存的温度来做简单的排查,上位机自动保存的温度数据,精确到某天某时某分某秒,简单方便。也是一个很实用的功能当没什么故障的时候,我们只需要隔一段时间吧数据清一下就OK了。 附上作品视频:http://v.youku.com/v_show/id_XMzE0Nzg0ODUzMg==.html?spm=a2h0k.8191407.0.0&from=s1.8-1-1.2 本次上位机介绍到此结束 源码文件会可以关注关注获得。 或者CSDN下载连接: 本上位机仅为杰杰个人娱乐,不做商业用途。 如需转载请说明出处。 欢迎关注“创客飞梦空间” 干货不间断 在未来的日子里 创客飞梦空间与你们同在,放飞我们的梦想

2018-05-29

stm8l系列单片机教程与源码

STM8L系列单片机教程已经更新完毕 做成PDF版本 欢迎参考 本系列教程为原创,转载请说明出处 目录: 【连载】STM8L051F3_0b_开发环境搭建 【连载】STM8L051F3_0c_新建工程 【连载】STM8L051F3_0d_基础介绍 【连载】STM8L051F3_01_GPIO应用 【连载】STM8L051F3_02_EXTI应用 【连载】STM8L051F3_03_CLK应用 【连载】STM8L051F3_04_PWR应用 【连载】STM8L051F3_05_BEEP应用 【连载】STM8L051F3_06_TIM2应用 【连载】STM8L051F3_07_TIM4应用 【连载】STM8L051F3_08_USART应用 【连载】STM8L051F3_09_IIC应用 【连载】STM8L051F3_10_FLASH应用 【连载】STM8L051F3_11_ADC应用 【连载】STM8L051F3_12_DMA应用 【连载】STM8L051F3_13_SPI应用 【连载】STM8L051F3_14_RTC应用 【连载】STM8L051F3_15_IWDG应用 【连载】STM8L051F3_16_WWDG应用 源码

2018-05-29

空空如也

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

TA关注的人

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