自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 winform学习(3)-----Windows窗体应用和Windows窗体应用(.Net Framework)有啥区别?

NET Core相当于是.NET Framework 的一个超集,他在包含了桌面应用的同时添加了其他很多丰富的功能,但是这些功能对于现在的我使用.NET Framework 开发没有看到有什么很大的优势,或许以后才能探索到。Windows窗体应用(.NET Core)是跨平台桌面应用程序,使用跨平台的.NET Core技术框架,可以在Windows、Linux和MacOS等操作系统上运行,支持现代化、灵活和可扩展的应用程序开发。也就是说按理使用winform开发的时候需要使用下面这个模板。

2023-07-31 20:21:19 4848

原创 winform学习(1)------多窗口控制

在窗口中跳转到另外一个窗口,需要创建另外一个窗口的对象,然后通过窗口对象的show方法进行展示。如果窗口数量大于2个的时候,会出现窗口的重叠,有时为了保证窗口的顺序就会采用窗口的。用户只会有权限操作当前窗口,对于已经嵌套的父窗口变成不可选中的状态。这里展示了通过当前窗口的button按键来打开另外一个窗口。

2023-07-31 19:30:21 903

原创 c#高级编程-----第三章结构类和枚举

结构和类很相似,都是具备方法和数据的集合,但是区别也很明显,两者的区别在于存储区域的,结构存储于栈中是值类型,而类存储于堆中,是引用类型。

2023-03-16 15:53:44 386 1

原创 esp32连接阿里云物联网平台进行MQTT通信

前提:IDE是采用arduino IDE,arduino使用的库是pubsubclient 开发板可以使用esp32(esp8266也是一样的)已经学会pubsubclient库的基本使用。

2023-01-30 21:22:54 1185 2

原创 arduino和物联网云端平台系列---物模型之事件

系列文章都是已经完成了基本的库安装和使用为前提。

2023-01-19 09:59:54 1978

原创 arduino rc522模块使用

一个ic的存储结构就是上面的样子,而我们在读取ic卡会选取一个扇区,这个扇区中设置的密钥可以用于ic卡的验证,而ic卡总共有16个,这样可以为一个IC卡提供多个功能,实现一卡多用。SPI的连线是根据ESP32引脚功能来设置的,但是有文章说可以通过SPI来自己自定义设置(库作者没有提供定义的功能),读者可以自行设置。如果这个扇区没有经过密钥的解锁是没办法读取的,有兴趣的可以了解一下IC卡的破译(比如说水卡,一些门禁的验证)。大致上面的函数就能完成我们的基本的需求了,一些功能的完成,使用这三个函数就足够了。

2023-01-14 19:07:31 2359

原创 arduinoIDE下载keypad和password库文件

任务需求:需要使用4*4矩阵键盘来完成一个按键密码锁需要使用keypad和password这两个开源库。

2023-01-10 15:18:58 1838

原创 arduino IDE esp32安装手动版(离线安装)

arduino IDE esp32离线安装方法

2023-01-06 23:36:38 1911

原创 stm32学习——DMA

学习STM32DMA之前去书上学习详细点的知识来源:计算机组成原理(唐朔飞)

2022-10-14 21:10:57 268

原创 STM32--CH340模块使用

下载程序使用flymcu开进行下载,相关选项进行设置之后就能使用了,如果连接ISP失败,flyMCU也会提示(一开始我的接线帽没有连接对,就一直不能连接)程序下载连线还是和串口通信一致,唯一需要注意的就是在使用开发板下载的时候,要将接线帽也就是黄色部分接成01,执行程序又需要接回去,这样才能正常的下载程序。安装好了就需要检查开发板,通信是否正常,将开发板tx和rx用一条线相连(自己给自己发消息发现是可以的)就正常。这一块使用自己写好的usart通信的代码进行测试,代码可以自行写和测试。

2022-10-14 18:43:52 3870

原创 stm32学习—库函数总结

1.通过中断相关的函数去中断源是什么(也就是发生了什么事件),这个函数和没有加it的区别在于,这里考虑了中断屏蔽器,而那个函数只是检查挂起寄存器,这和我们的预期结果是不一致的。这里的it没有和exit的外设控制器的初始化结合起来,但是从属这个结构之中,这里也解释了学exit中电路中下半部分的作用。一般一开始是使用结构体进行数据的初始化,然后通过使用的途径进行划分,比如常用的数据的输出和输出,这在大部分的外设中都是大量涉及的。2.清除相应的标志位,标志位清除的库函数没有区别,但是使用对应的库函数更符合标准。

2022-10-10 19:41:21 3066

原创 STM学习--异步串口通信

首先数据来源是内存中的数据(用户定义的)通过DMA或者cpu(内核)将数据传输到数据发送的寄存器,然后传输到移位寄存器通过传输线进行传输,这个过程会触发相应的事件。收到数据的过程是一个逆过程。第二种方式是自己写一个串口输出的函数,这种方式比较复杂,里面涉及C语言中比较复杂的知识,所以先放着后面在弄。波特率的控制是对时钟信号的频率的进行控制,通过对外设时钟的分频来控制对发送器和接收器接收数据的频率。三个控制寄存器,至于有哪些内容需要控制,需要在写代码的时候才能知道,那些是需要用户写入的配置信息。

2022-10-10 18:55:21 370

原创 STM32学习--EXIT

中断服务函数一开始为了方便管理都是放在同一个文件也就是stm32xxx_it.h这个文件中,但有的时候,我们访问的变量并不在这个文件的作用域中,所以为了访问到对应的变量,我们可以吧这个函数重新进行定义,只要名字对了,定义在哪里都可以。misc.h文件是有关nvic配置的文件,他不像其他外设文件一样采用nvic.h这样的文件定义,而是采用这种名字。因为这里的中断服务函数是为多条线路服务的,他并不确定中断源是来自那一天线路,所以需要使用这种方式来进行判断。1.完成led的初始化,包括了一开始led灯的状态。

2022-10-10 14:35:53 884

原创 STM32学习--GPIO按键

1.按键模块有一个按键检测功能,思路就是检测相应的端口,判断是否是低电平(这里使用的上拉输入模式),里面使用了到一个gpio相关的函数然后再和0,1比较这里还有一个按键延迟处理和等待按键释放的逻辑在里面(最主要是了解到按键的延迟消抖的原因)

2022-10-09 19:54:36 719

原创 嵌入式学习的第二天

这个地址有描述,同时简单了的使用了一下,下面有人说采用另外一种方式,采用串口对串口的输出方式,电脑没有串口输出,所以需要使用ch340模块转换成串口,然后在将开发板和这个模块相连,感兴趣的可以去搜索一下(在淘宝搜索之后,发现这种方式比较便宜,喜欢动手的可以试试)在使用keil选择的时候会安装一个32page,同时在创建工程的时候也会选择芯片(可以在keil中下载,但是多方说网络下载慢,而且容易出错,所以不在这里下载。一个是通知了再发(按照公共时钟进行收发),一个是随时想发就发(按照标志位进行收发的进程)

2022-10-01 21:25:17 168

原创 水平垂直居中方式

flex布局,flex布局首先要把原来的元素的样式给他转换过来,所有的元素都变成了flex的容器(item或项目)。项目默认是按照主轴排列的(这个也可以设置的),每个容器的大小也是可以设置的,这个是比较特殊的使用方式。绝对定位+transform(支持翻转,缩小,平移)绝对定位脱离文档流,但是增加了top,left这类可以可以进行用于移动的属性。text-align设置一个块元素的行内元素的对齐方式。align-item(设置在交叉轴的布局方式),交叉轴的布局方式可以设置在垂直方向的布局效果。...

2022-07-31 20:40:19 76

原创 react memo函数

在class组件中可以轻易做到,但是如果在函数组件做到不是一件容易事,使用Hooks也是继承了多个钩子函数。所以引入了memo()这个高阶组件,也就是给memo传入组件,就让这个组件加上了一个经过简单逻辑判断的。接受第二个参数,可以不适用他memo简单的逻辑判断,而是使用自定义的函数。可以根据函数返回的布尔值来判断这次渲染是否执行。react组件有一个。...

2022-07-31 19:35:46 275

原创 常量表达式

常量表达式有两个特性:1.不会改变2.在编译期就能得到结果const满足第一个条件,那么他是否满足第二个条件?答案是不一定,如果知道const初始化,就可以知道,const对值是没有限制的,const可以是一个函数的返回值,这样就会导致const的初始化在运行时得到结果那么这样的情况又是什么样的呢?首先这个在编译器确实能得到结果,但是a不满足特性1,常量表达式是不会改变的。从上面两种分析可以得出,判断一个常量表达式要从类型和他的值来分析。常量表达式的定义和常值以及常量之间的联系是有一定的区别,要根

2022-07-11 10:38:58 373

原创 python将中间字符内容给清除

有一个这样的列表,想要将一个字符中的空格给清除,发现没有直接的函数,就使用现已有的方法做处理首先对首尾或者尾部的空格是用.strip或者.rstrip进行清除清除之后通过.split对字符串进行切割,切割完成之后,在进行合并“”.join(待处理字符串)这样就能完成合并...

2022-07-03 15:26:11 669

原创 在linux在安装vscode

我用的是centos,直接进入vscode官网,跟着官网教学就能完成跟着他按照第一步赋值粘贴这是没有显示输出的不要怕第二步要安装dnf(这里不安装就没有)第三步接着赋复制ok搞定了,输入code记得切换用户之后再使用,上面我是在root权限下写的进入vscode会有点慢而且卡,耐心点就好...

2022-06-27 10:15:13 281

原创 ES6 对象属性名表达式

前言今天在学习react 处理多个输入中引入了属性表达式的概念属性表达式是属于ES6对象拓展简洁表示在es6 如果键名和值名是一致的话那么可以省略一个。换句话说,ES6 允许在大括号里面,直接写入变量和函数,作为对象的属性和方法。这样的书写更加简洁。对象属性名表达式通常我们定义属性是通过{a:'xx',b:'xxx',c:'xx'}这样的形式,a,b,c都是字符串,也就是静态的值ES中可以使用一个动态的可以通过计算得到的属性名(也就是表达式)let lastWord = 'las

2022-04-30 21:51:44 660

原创 JS将数值转换成字符串

1.toString和StringtoString是实例上可以访问的方法, 如果你不确定变量的类型,那么访问时就可能出错,对于undefined和null来说,他们是没有这个方法的所以引入了第二种方法,String()函数。String()函数调用规则也很简单,只不过是对null和undefined类型的数据进行了处理常规的类型还是调用的toString处理2.加法运算符字符串的加法是字符串的拼接,当使用时会隐式的对操作数进行转换最后Object.prototype.toString(

2022-04-30 20:32:32 2093

原创 typescript可索引类型

先不谈这个问题先看我们是如何访问一个对象的a[0]a['xx']当以number类型作为index时,我们把内容看成数组当以string类型作为index时,我们把内容看成对象形式虽然最后number类型最后也要转换成string类型TypeScript支持两种索引签名:字符串和数字。也就是上面提及的两种形式放置到ts中就是interface square{ [index:string]:string这个接口的含义是定义,如何访问接口对应的变量,是以字符串还是数字类型上实

2022-04-25 20:41:23 1214 1

原创 typescript(1)类型注解

编译上下文给文件分组和告诉ts那些文件是有效的

2022-04-25 10:50:47 227

原创 webpack bundle.js文件分析

前言之前我一直不太明白webpack的模块引入机制。正好看到了bundle.js文件的解析才更加了解一些首先我们知道有的浏览器不支持es6的模块化机制,有的支持。假设如果浏览器支持模块机制,会是怎么样一个场景?浏览器只需要把所有模块从服务器上下载下来,就可以通过模块化机制引入使用,很是方便。现在假设浏览器不支持es6模块化机制那么应该怎么处理?根据webpack bundle.js文件分析,他的下载思路和前面没有什么区别(),不过的他的模块化思想和前面有很大的不同分析先给出一个整体代码(

2022-04-24 17:48:59 1875

原创 webpack file-loader和url-loader

什么是file-loader了解什么是file-loader前要知道为什么要使用file-loader?按照以往的方式我们想要在css文件中使用某个文件background:url('./x/xx')或者在js中引入某个地址xx.src='./xx/xxx'很多时候都是这样的相对地址,一但经过webpack打包,他们的地址就是失效了另一方面,来自于文件名,我们给的文件名大多没有规律,如果了解过缓存相关的内容就知道,如果想在本地缓存期使用更新的资源,就得替换。替换的原理就来源于文件名的不同

2022-04-24 12:38:14 2405

原创 DOM元素节点属性outerHTML和innerHTML

前言innerHTML是我们常用的一个修改某个元素内容的属性outerHTML可能不太常用两者有什么区别假设一个多层级的节点入下面代码所示<h2 id="注意事项"><a href="#注意事项" title="Permalink to 注意事项">注意事项</a></h2>输入代码document.querySelector('#注意事项').innerHTML'<a href="#注意事项" title="Permalink t

2022-04-24 09:55:46 425

原创 Polyfill是什么?

前言在学习Babel中,通过 Polyfill 方式在目标环境中添加缺失的特性。这里的polyfill方式添加我不是太明白什么是Polyfill先从这个名词意思开始,他的意思是特殊的粘合剂保证附着力和填充不会收缩或开裂。在简化一点就是用于缝补的功能那么在js环境中,什么情况下需要缝补?当我们在使用一些高版本的API时,低版本不支持,这时候该怎么办?所以Polyfill就是存在这两者之间的一个中间件。它会自动帮我们修正位于高版本和低版本浏览器之间的不使用特性有时也可以称它为垫片。垫片的描

2022-04-21 21:41:59 666

原创 Vue插槽

插槽是什么?插槽可以是看做是一个定义在组件的坑位,就像萝卜坑一样,种上萝卜就是往坑位里面分发东西分发的东西是什么,也就是可以往坑里填什么东西?可以想填你任何填的内容,组件,标签都行。具名插槽当你的坑位多起来来时,就需要进行区分,不同的坑位要要不同的编号。不同的坑位用途也不一样定义一个坑位<slot name=''></slot>这个坑位也具备一些内容,比如说当没有内容进来,可以设置一个默认值<slot name=''>在这里设置默认值</slo

2022-04-19 11:45:08 708

原创 JS 为什么要使用this指针

前言var age=18;function a(){ console.log(age); console.log(this.age)}var obj={ a:a, age:19,}obj.a();//18,19先看代码。这里输出两个age,第一个是作用域下的age,第二个是this这个上下文下的age学习this指针先要区分作用域和执行栈的区别。JS是词法作用域,不懂的可以自行去了解一下。这里只说this指针每当我们执行到函数时,执行引擎会自动帮我们创建

2022-04-19 09:54:53 420

原创 Vue 实传和透传props,事件

什么是实传和透传实传就是你在组件内部进行了注册,可以在这个组件内部使用,同时你可以将嵌套组件已经注册的属性传递下去透传是父组件传递一些在子组件没有注册的属性和没有使用的方法,实际上这些message是用于给子组件的嵌套组件使用的。实传实例先贴代码,var childcom={ props:['name'], template:`<div> <div>我是子组件 {{name}}</div> <grandcom v

2022-04-18 16:07:04 2447

原创 Babel入门

什么是babel?将高版本的es转换成在浏览器中普适性较好的es版本这句话也反应了babel的原理,babel分为三步,解析转化和生成babel如何运行的解析生成ast树,ast树是一个描述对象转化通过插件来实行,插件也是babel的核心插件分为语法插件和转译插件,大部分语法babel都能解决,但是有一些特殊语法babel无法解析,这是需要调用语法插件,如果同时调用转译插件和语法插件,转译插件会生效,他会调用语法插件除了插件还有一个是预设,他们都被放在了babel的配置文件.babelrc中。

2022-04-16 10:33:58 778

原创 Websocket思考

前言最近想到之前做的一个实时通信的小demo,发现对websocket不是很了解,现在决定重新好好学习一下websocketwebsocket解决了什么问题,先给一个前提,http事务是一次性的,浏览器和服务端没办法做到全双工的通信过程。而有些应用场景下又需要使用服务端和浏览器的全双工通信,比如股票信息,实时通信等。这时候出现了几种解决方案,比如说轮询,还有长轮询机制,但是他们的缺点都是比较大的,感兴趣的可以自行去搜索一下最终还是引入一个较为靠谱的协议,websocket什么是websocket

2022-04-14 20:42:39 2235

原创 http2.0新增内容思考

二进制分帧http报文的形式组成是比较熟悉的,当他们以http报文出现在运输层时,udp不拆分,tcp以字节流形式拆分。也就是http报文在传输过程中是以一种顺序流的形式传递的,因为http报文没有准确说明报文形式的内容如果我们想让不同的http报文混在一起传递,这样需求来自于http连接的管道化处理,如果想了解管道化技术上的可以自行搜索总的需求就是在tcp持久连接下进行多个请求并行发送。http报文没有拆分识别和重组的中间协议,所以HTTP2.0设计了这样的协议,将http转换成二进制帧的形式,

2022-04-14 11:25:39 2739

原创 DNS解析过程

为什么要使用DNS由于我们想要取得web资源,需要和另外一台机器进行通信,通信使用ip+端口号又因为ip太长太难记,就将ip和容易记忆的名字相对应起来以后访问web资源只用输入名字就行,名字向ip的转换就由DNS服务器来执行DNS如何解析名字转换成ip地址...

2022-04-13 14:19:57 108

原创 CORS跨域请求

什么是CORS首先得知道什么是浏览器的同源策略?从浏览器获取html页面开始,我们从一台服务器(ip+端口+http协议)中获取了html文档在html文档中使用ajax技术,通过xhr对象发送网络请求,那么这个xhr的源即是这个HTML文档的归属服务器,如果有条件可以在orgin:xxx看到浏览器拒绝不同源的内容相互发送请求,但是有时候为了需要还是想要实现跨域请求,这就有了corsCors实现如何实现cors?实现跨域也就是同另一台服务器(准确来说是另一个源,毕竟还有端口号的限制)进行交流,服务

2022-04-09 11:49:43 643

原创 get和post请求的区别

前言从方法的含义上来区分的话,一个是用于请求服务器文件路径上的资源,一个是将本地资源提交然后经过服务器处理后返回但是单从语义上来区分的话还不够。下面需要从三个角度来区分。幂等性,安全性和其他相关幂等性什么是幂等?就是请求多少次得到的结果都是一致的,这一点是在get方法体现的为什么会出现这样的情况?浏览器的缓存机制,浏览器会根据请求的url将资源缓存在内存中,这样做能够减少网络资源的占用,同时提高网页的响应速度安全性安全性是相对服务器来说,依据的是请求的方法会不会对服务器数据造成影响很显然p

2022-04-09 10:33:33 66

原创 为什么要使用虚拟DOM?

为什么要使用虚拟DOM主要分为两个角度1.DOM操作角度。假设状态发生变化,我们如何将状态的更新应用到视图上?直接创建元素,然后将元素覆盖到我们需要更新的地方,这样做固然很快捷,但是会引发页面出现很大的变动,渲染引擎需要重新计算和渲染,这样的开销很大更聪明的办法是找出那些需要更新的节点,然后只更新那些发生变动的节点,这样导致DOM操作减少,虽然会耗费一点时间用于计算哪些节点需要更新,但是这样的时空置换是远远值得的2.vue数据侦测角度,由于Vue1.0绑定状态是页面的中dom节点,如果绑定的节点过

2022-04-01 16:52:42 758

原创 CSS层叠上下文

在学习z-index属性的时候,限制了能够使用z-index属性的元素。那么为什么有的元素能够使用z-index?因为他创建了一个层叠上下文,对于这个词的理解首先要理解上下文。上下文这个名词的出现有很多地方,块级格式上下文,执行上下文,在不同地方都有着不同的解释但都可以理解它代表一种环境,一块区域。层叠上下文由于在CSS世界中,元素是三维的,但是我们看到的是一个二位平面,多个二维平面堆叠就形成了三维平面,这就是层叠上下文的含义以上条件就可以创建一个层叠上下文在了解了层叠上下文之后,假设我们在

2022-04-01 14:43:19 108

原创 元素堆叠顺序问题

前言在学习css浮动脱离元素文档流,还有z-index,背景图,背景颜色出现颜色覆盖问题时,我总会产生一种疑惑,疑惑这几项谁覆盖谁,谁的优先级更高?堆叠顺序堆叠顺序有两种,第一种是基于z-index,第二种是没有z-index情况下。由于页面中的元素是一个三维图形,如下我们的视野看到的就是z-x这个平面,产生堆叠是在y轴上假设y轴离源点越远,那么他的优先级就越高堆叠顺序如下:根元素的背景和边界优先级最低没有position和postion:static的优先级比1要高一级优先级最高的是

2022-04-01 10:20:24 483

空空如也

空空如也

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

TA关注的人

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