自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 MySQL中char、varchar和text三者的区别

在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定最大的字符长度,但text不可以。它们的存储方式和数据的检索方式也都不一样。数据的检索效率是:char > varchar > text具体说明:char:存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候

2021-11-30 11:06:16 661

原创 C# 桌面应用添加启动等待画面(SplashScreen)

最近闲下来,准备看看优化一下公司的旧系统,首先应用打开时没有启动等待画面,如果初始化应用时间过长会让用户认为没有启动成功,所以启动画面是很有必要的,先弄这个吧。很多文章都对DevExpress的SplashScreenManager控件进行详细的应用实例介绍,我就不再介绍这个控件了,具体文章可以查看这两个文章:SplashScreenManager控件介绍SplashScreen和WaitForm使用还有一种更简单的方式来创建一个启动画面(如果不需要加载进度表展示的话),只需要新建一个Form窗.

2021-09-09 09:08:09 2626

原创 C# 远程下载服务器文件到本机

好久没有更新文章了,最近一直在出差。这次甲方希望系统可以下载日志文件以查看设备的启停运行情况,我就在页面中添加了一个按钮和一个下拉框来实现下载文件(毕竟新需求没给钱,怎么简单怎么做吧)首先需要将日志文件(日志使用NLog进行记录,存放在了项目下的logs文件夹下)查询出来放入下拉框中,下拉框我使用的是 aspx控件dropdownlist,在页面加载时进行一次文件名查询和下拉框元素初始化,部分代码如下:xxPage.aspx:<asp:DropDownList id="fileName" r.

2021-06-07 10:08:43 899

转载 LWIP 使用流程

一、Lwip首先进行内存分配:Mem_init()内存栈起止地址,空闲列表初始化; Memp_init()内存池初始化。两者的详细比较会在https://blog.csdn.net/weixin_41561640/article/details/113535282,进行了详细的说明二、内存分配完之后,进行数据包管理:pbuf_init();三、LWIP的初始化:sys_sem_t sem;tcpip_init(TcpipInitDone, &sem);四、进行网络配置

2021-02-03 15:36:01 1343

转载 LWIP 内存分配详解对比 mem_init和memp_init 源码分析

Lwip内存分配mem_init ()分配方式介绍内存堆的初始化函数,主要是告知内存堆的起止地址,以及初始化空闲列表,mem_malloc( ) 申请分配内存。将总共需要的字节数作为参数传递给该函数,返回值是指向最新分配的内存的指针,而如果内存没有分配好,则返回值是 NULL。内存的分配和释放,不能在中断函数里面进行。内存堆是全局变量,因此内存的申请、释放操作做了线程安全保护,如果有多个线程在同时进行内存申请和释放,那么可能会因为信号量的等待而导致申请耗时较长。mem_free()释放空间到内存堆.

2021-02-02 09:17:29 1384 1

原创 C语言 htons函数

uint16_t htons(uint16_t hostshort)  htons的功能:将一个无符号短整型数值转换为网络字节序,即大端模式(big-endian)  参数u_short hostshort: 16位无符号整数  返回值:TCP / IP网络字节顺序  htons 是把机器上的整数转换成“网络字节序”, 网络字节序是 big-endian,也就是整数的高位字节存放在内存的低地址处。 而我们常用的 x86 CPU (intel, AMD) 电脑是 little-endian,也

2021-02-01 12:58:52 843

原创 C# WinForm实现窗口始终在顶层

在聊微信的时候发现桌面版的聊天窗口上方有一个图钉标签,可以使聊天窗口始终在顶层,这个功能我们也可以用在自己的程序中,实现也很简单。只需要设置一个属性即可。窗体属性TopMost:获取或设置一个值,指示该窗体是否应显示为最顶层窗体。设置为 true,将窗体显示为最顶层窗体;设置为 false则相反。 默认值为 false。简单实例: private void TopMost_button_Click(object sender, EventArgs e) { .

2021-01-14 10:05:37 5247

转载 Cortex-M3 (NXP LPC1788)之IIS控制器

I2S总线为数字音频应用提供了一个标准的通信接口。它是一条3线串行总线,包含串行数据SD、字选择WS、串行时钟SCK。LPC1788的I2S接口提供了彼此独立的发送和接收通道,每个通道可以作为主机或从机,还提供了可选的过采样主机时钟输出MCLK。因此发送和接收通道各有四个引脚,对于发送为I2S_TX_CLK、I2S_TX_WS、I2S_TX_SDA、I2S_TX_MCLK。I2S的时序如图:从图中可以看出每个串行时钟SCK传送一位音频信号,因此SCK的频率=声道数 * 采样频率 * 采样位数。如程序中4

2021-01-06 11:19:14 330 1

转载 Cortex-M3 (NXP LPC1788)之IIC控制器

I2C通信协议在上篇文章中进行了介绍,下面对LPC1788的I2C控制器进行分析。要使用I2C模块,需要配置相应的寄存器,如功率、时钟、管脚等。以I2C0为例,配置P0.27和P0.28管脚分别为SDA和SCL功能,在PCONP中使能I2C0功率控制,根据PCLK和要使用的I2C的频率设置SCLH和SCLL。I2C模块可以工作在主发送、主接收、从发送、从接收四种工作模式。开发板上LPC1788工作在主发送模式时发送数据给总线上的外设。工作在主接收模式时接收总线上的外设数据。主发送模式操作流程如下:

2021-01-06 10:55:52 685

转载 Cortex-M3 (NXP LPC1788)之EEPROM存储器

EEPROM是一种非易失性存储器,主要用于存储相对少量的数据,如存储一些系统的配置信息。通过系统的EEPROM控制模块可以轻松的进行EERPOM的存储控制。要正确使用EEPROM需要配置掉电寄存器EEPWRDWN确定EEPROM的工作模式,配置EEPROM时钟分频器寄存器,使EEPROM工作在375KHZ。下面对EEPROM的读和写数据进行介绍。EEPROM存储器的访问有三种操作方式:读、写、擦除/编程。对EEPROM中写数据分成两个单独的操作:写和擦除/编程。第一步写操作并不是真正把数据写入EEPRO

2021-01-04 12:46:19 1054 1

转载 Cortex-M3 (NXP LPC1788)之ADC模/数转换器

A/D转换器的功能是将模拟输入信号采样得到可以提供计算机进行处理的数字信号。LPC1788的ADC是一个12位的逐次逼近型模数转换器,有8个复用的输入管脚,它的时钟使用PCLK分频得到。开发板的A/D输入模块电路图如下:要使用ADC转换,也要配置PCONP寄存器,配置ADC的时钟以及管脚和中断等。A/D转换控制寄存器AD0CR用来设置ADC的通道,时钟分频,工作模式和启动A/D转换的方式。开发板使用的是AIN2即A/D转换通道2,管脚为P0[25]。根据之前的文章,配置了系统的PCLK位60M,所以设置

2021-01-04 10:56:15 657

转载 Cortex-M3 (NXP LPC1788)之WDT窗口看门狗定时器

看门狗定时器的用途是在微控制器进入错误状态后的一段合理时间内将其复位。看门狗被使能后,如果用户没有在预先设定的时间内喂狗,那么会产生一个看门狗事件。看门狗定时器的寄存器有看门狗定时器常数计数器WDTC,每当在喂狗寄存器WDFEED中写入喂狗序列,WDTC中的值就会被写入看门狗定时计数器WDTV,WDTV中的值在看门狗时钟的驱动下递减。我们可以通过设置看门狗定时器报警中断寄存器WDWARNINT寄存器,当WDWARNINT中的值和WDTV中的值匹配时,可以形成中断。最重要的还有看门狗模式寄存器WDMOD,它

2021-01-04 10:37:29 382

转载 Cortex-M3 (NXP LPC1788)之RTC

实时时钟是一组用于测量时间的计数器,如果使用电池供电,在系统掉电以后它也可以正常运行以记录系统的时间。LPC1788时钟采用内部的32K振荡器输出1HZ的时钟信号做为RTC的时钟源。RTC的寄存器比较简单,主要有时钟计数器寄存器包括秒SEC 分MIN 小时HOUR 日期(月)DOM 星期DOW 日期(年)DOY 月MONTH 年YEAR, 这些寄存器为R/W 可以从中读出具体的时间信息。其中的秒计数由1HZ时钟驱动。报警寄存器组中的值将和时间计数器寄存器中的值比较,如果所有为屏蔽的报警寄存器都与他们对应

2021-01-04 10:04:19 255

转载 Cortex-M3 (NXP LPC1788)之UART用法

在工作中经常将平台的串口和PC机连接,通过串口打印信息进行程序调试。LPC1788共有5个串口Uart0~Uart4,根据开发板的资源,将使用Uart2进行简单的串口输出和输入中断的操作。开发板上使用74HC4052多路开关对UART2的RXD和TXD进行选择,使用SP3243E进行3.0V到5.5V的RS-232电平转换。查看手册配置好相关的跳线帽,保证DB口上的串口输出采用的是Uart2。下面介绍Uart相关系统配置和Uart模块的配置。Uart的时钟采用PCLK,我们配置系统的CCLK为120M,P

2020-12-31 16:11:59 674

转载 Cortex-M3 (NXP LPC1788)之PWM(脉宽调制器)

PWM即脉宽调制,可用于输出一定占空比的方波。LPC1788有两个PWM,每个PWM可以有6路的输出,PWM1~PWM6。下面介绍使用PWM0.1输出PWM波。1,PWM使用公共的PCLK,因此要配置系统时钟和外设时钟。之前的文章中有具体的时钟配置过程。2,使能PWM模块。配置外设功率配置寄存器PCONP,使能PWM0的时钟控制位。3,PWM0.1的输出管脚和P1_2管脚复用,因此要配置IOCON_P1_02寄存器,将其设置成PWM0.1的输出。4,设置PWM的脉冲宽度,基本的原理就是比较PWM定时

2020-12-31 09:34:07 865

转载 Cortex-M3 (NXP LPC1788)之外部中断操作

要使用LPC1788的外部中断,要进行两部分的操作。由于外部中断的管脚采用I/O复用的形式,显然我们首先要对管脚进行配置,使其工作在外部中断输入的模式。其次,我们需要配置中断相关的寄存器包括中断使能以及中断的触发方式等。由于我们使用的是外部中断0,查阅数据手册,其GPIO管脚为P2_10,为此我们设置IOCON_P2_10寄存器的FUNC字段,设置成001即为EINT0模式。 配置完引脚后,还需要继续配置具体的中断功能。我们需要打开中断使能,设置ISER相应位;还要配置中断的触发方式如电平触发和边沿触发,

2020-12-31 08:51:40 477

转载 Cortex-M3 (NXP LPC1788)之SysTick系统节拍定时器

在GPIO控制篇中的延时闪烁LED只用了简单的for循环,为了精确的计时本篇介绍使用SysTick定时器每1ms产生中断,从而实现精确定时的目的。要使用系统节拍定时器主要进行两个部分的配置。1:系统时钟控制。2系统节拍定时器的控制。一,系统时钟控制LPC1788有3个独立的振荡器。他们是主振荡器,内部RC振荡器,RTC振荡器。复位后,LPC1788将用内部的RC振荡器运行,直到被软件切换。这样就能在没有任何外部晶振的情况下运行。LPC1788的时钟控制如图1所示在开发板上使用12M的晶振作为主振荡器

2020-12-30 13:39:43 727

转载 Cortex-M3 (NXP LPC1788)之GPIO

经过前一篇的分析,现在可以进入C环境进行各个模块的学习。首先进行简单的GPIO控制LED灯的操作,开发板通过GPIO1.18控制LED灯,电路如下图:为了对LPC1788的内部结构有更好的理解和学习,虽然NXP给出了封装好的库函数,但是我将自己编写代码便于直接对内部原理进行分析。代码如下#define rFIO1DIR (*(volatile unsigned*)0x20098020) //高速GPIO 方向控制寄存器,用于配置管脚的输入或输出,默认为输入#define rFIO1MASK (*(

2020-12-30 09:39:25 514

转载 Cortex-M3 (NXP LPC1788)之启动代码分析

在Keil uVision4中新建一个基于NXP1788的工程后,会提示添加启动汇编代码startup_LPC177x_8x.S。该文件进行从汇编到C语言运行环境的初始化工作。;/*****************************************************************************; * @file: startup_LPC177x_8x.s; * @purpose: CMSIS Cortex-M3 Core Device Startup Fi

2020-12-30 09:02:52 425

转载 Cortex-M3 (NXP LPC1788)之开发环境搭建

一,开发环境介绍最近有幸从NXP的代理商获得一块开发板OM13001,该开发板使用NXP LPC1788的处理器,主要特性如下:Data Memory: 32 MB SDRAM + 96 KB internalEthernet: 100/10M Ethernet interface based on SMSC LAN8720 Ethernet PHYClock Crystals: 12.000 MHz crystal for CPU , 32.768 kHz crystal for RTCConn

2020-12-30 08:25:50 1075

原创 C# 测试SqlServer连接及设置连接超时时间

在项目中,会有一种场景:需要提前判断本地或远程数据库是否可以连接上。直接进行判断: private string _strConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DispatchDB"].ToString(); public bool sqlConnectCheck() { bool connectFlag =.

2020-12-26 13:02:40 9615 3

原创 C#中WinForm程序退出方法(释放资源)

在旧winform项目中,发现将程序应用关闭后其实并没有真正的完全释放了资源,原因可能是有一部分委托和还在运行的线程并没有随着应用的关闭而停止。现在研究一下怎么释放资源和强制关闭应用:销毁代码,释放资源方法:this.Dispose();this.DialogResult = DialogResult.OK;退出WinForm程序包括有很多方法,如:this.Close();Application.Exit();Application.ExitThread();System.Env.

2020-12-14 11:23:37 6440

转载 STM32 嵌入式开发学习笔记七:外部中断 EXTI

一、 EXTI 简介EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 20个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。二、 EXTI 功能框图EXTI 的功能框图包含了 EXTI 最核心内容,掌握了功能框图,对 EXTI 就有一个整体的把握,在编程时思路就非常清晰。EXTI功能框

2020-11-20 10:08:45 1273

原创 C# 使用quartz实现定时触发作业

Quartz3.0之前是同步执行的,quartz3.0后为异步执行(只支持framework4.5.2及之后版本)在使用NUGET程序包下载quartz包时需确认版本是否兼容!quartz 2.6.21、创建job类实现IJob接口using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using Quartz;name

2020-11-10 14:28:15 636

原创 Redis 学习笔记(十四)redis缓存穿透和雪崩

缓存穿透缓存穿透:当查询的内容在缓存中没有命中时,会向数据层发送查询命令,当存在大量的查询命令穿过缓存到达数据库时,会导致数据库崩溃,引发服务器的死机。应对方案:使用布隆过滤器(bloomfilter):布隆过滤器是一种数据结构,将所有可能会查询的参数以hash形式存储,在控制层中进行参数校验,不符合就会丢弃此查询命令,不会向下传递。创建缓存空对象:当用户查询内容在redis中没有命中,则在redis中创建这个空对象,以防止用户无限次的穿过缓存去查询数据库。对于这些会占用大量内存空间的空对象,可以

2020-10-24 16:04:45 105

原创 Redis 学习笔记(十三)redis哨兵模式

哨兵模式概述Redis的哨兵模式用于管理 Redis 集群,负责以下三个任务:监控(Monitoring): 哨兵定期检查redis服务器是否运作正常。提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵可以通过 API 向管理员或者其他应用程序发送通知。自动故障迁移(Automatic failover):当一个主机不能正常工作时,哨兵会开始一次自动故障迁移操作,它会将失效主机r的其中一个从机升级为新的主机, 并让其他从机改为认主新的主机。一般使用多哨兵

2020-10-24 14:59:18 85

原创 Redis 学习笔记(十二)redis主从复制

主从复制:将主机redis中的数据复制到其他从机redis中,数据复制是单向的,只能由主节点到从节点。主机以写数据为主,从机以读数据为主,这样可以减缓服务器的压力。实现主从复制需要搭建redis集群,redis集群至少需要三台redis服务器。搭建环境时,只需要配置从机,不需要配置主机,(从机认主即可):主从配置查看当前redis库信息 info replication在从机中进行认主设置 slaveof <masterIP> <masterPort> #

2020-10-23 13:49:10 114

原创 Redis 学习笔记(十一)redis订阅和发布

redis 发布订阅(pub/sub)是一种信息通信模式。发送者(pub)发送消息,订阅者(sub)接收消息。redis订阅频道(channel)需要先订阅频道,再向频道发送消息。redis 发布订阅的原理:通过 subscribe 命令订阅频道后,redis-server 中将维护一个字典,字典的键是频道名,值是一个链表,链表中保存了所有订阅了该频道的客户端(subscribe 命令就是将客户端添加到指定频道的链表中)。订阅频道命令 subscribe <channel> ...

2020-10-23 11:08:06 159

原创 Redis 学习笔记(十)redis持久化

关于持久化的相关配置已在上一章笔记中介绍了,本章不再赘述。一、redis持久化概述由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化:一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化)一种是AOF(append only file)持久化(原理是将Reids的操作日志以追加的方式写入文件

2020-10-22 15:59:26 41

原创 Redis 学习笔记(九)redis.conf配置文件解读

网络bind 127.0.0.1 #绑定redis服务器地址protected-mode yes #保护模式port 6379 #redis端口号设置通用 Generaldaemonize no #以守护进程方式运行,默认为no,在部署时需要改为yespidfile /var/run/redis_6379.pid #若上面配置改为yes,需指定一个pid文件logleve

2020-10-22 14:54:18 80

原创 Redis 学习笔记(八)事务

更多的数据类型命令可在redis中文官网中查找和学习,下面学习redis的事务。一、redis事务概述原子性是指一个操作或者多个操作,要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行。事务是指一系列操作,这些操作要么同时成功,要么同时失败,它是一种原子操作。事务没有隔离级别的概念。redis的单条命令都具有原子性,但是不保证多条命令的原子性!想要让redis客户端的多条命令可以不被其他的客户端打断,可以使用事务:执行事务时,所有的命令都会被顺序地一次性执行,且不会被其他客户端打断。但

2020-10-22 10:14:43 93

原创 Redis 学习笔记(七)特殊数据类型

在redis的特殊数据类型中选出三种数据类型进行分析:geospatialhyperloglogbitmapsgeospatial 数据类型(地理位置)geo只有六个命令: geoadd <key> <经度> <纬度> <名称>... #将指定的地理空间位置(经度、纬度、名称)添加到指定的key中 #例:geoadd China:city 116.4 39.9 beijing 121.47 31.23 shanghai ge

2020-10-21 15:58:01 99

原创 Redis 学习笔记(六)五大基本数据类型zset

redis的基本数据类型为:stringlistsethashzsetzset数据类型(sorted sets 有序集合)zset的命令都以"z"开头: zadd <zset> [XX/NX] <score> <member>... #向有序集合zset中添加成员: #当添加XX选项时,表示只更新成员,不添加新成员;

2020-10-21 11:32:25 96

原创 Redis 学习笔记(五)五大基本数据类型hash

redis的基本数据类型为:stringlistsethashzsethash数据类型(相当于Map集合)hash的本质和string类型没有太大区别。hash命令以"h"开头: hset <hash> <key> <value> #在hash中创建字段key,设置字段值value hsetnx <hash> <key> <value> #当hash中没有key字段时正常创建;当hash中存在key字

2020-10-21 09:20:29 81

原创 Redis 学习笔记(四)五大基本数据类型set

redis的基本数据类型为:stringlistsethashzsetset数据类型(集合)值是无序的不可重复的在redis中,set命令都以"s"开头: sadd <set> <value>... #向set中添加元素 smembers <set> #获取set中的所有元素 sismember <set> <value> #判断set中是否存在value元素 scard <se

2020-10-20 15:43:51 116

原创 Redis 学习笔记(三)五大基本数据类型List

redis的基本数据类型为:stringlistsethashzsetList数据类型(列表)在redis中,可以将列表当成栈(先进后出)、队列(先进先出)和阻塞队列(一个线程往列表中放消息,另一个线程从列表中取消息。当队列为空:取消息线程被阻塞;当队列中满了:放消息线程被阻塞)。所有的list命令都以"L"为开头: lpush <list> <value> #将value插入到list列表头部(从左侧添加);当list不存在时先创建列表 rpush

2020-10-20 14:31:49 2142

原创 Redis 学习笔记(二)五大基本数据类型string

redis的基本数据类型为:stringlistsethashzsetstring数据类型命令: set <key> <value> #设置键值对 setnx <key> <value> #若key不存在则正常创建;若key存在则无法创建,不会替换原键值对 setex <key> <seconds> <value> #设置键值对,并设置key的过

2020-10-19 16:24:39 60

原创 Redis 学习笔记(一) 概述和部署

上周跟着B站的UP主 “狂神说JAVA” 学习了一下Redis,总结一下笔记。一、NoSQL概述NoSQL意为 Not Only SQL ,泛指非关系型数据库。非关系型数据库存储方式可分为:键值对存储列存储文档存储 (BSON)图形关系存储(社交关系)目前常用的非关系型数据库有:文档型数据库 : MongoDB分布式文件系统: FastDFS、Hadoop(HDFS)关键字搜索 : solr、elasticsearch内存数据库 : Redis、Memache、Tair.

2020-10-19 14:59:16 96

原创 “\\s+“的使用

正则表达式中\s匹配任何空白字符,包括空格、制表符、换页符等等, 等价于[ \f\n\r\t\v]\f -> 匹配一个换页\n -> 匹配一个换行符\r -> 匹配一个回车符\t -> 匹配一个制表符\v -> 匹配一个垂直制表符而“\s+”则表示匹配任意多个上面的字符。因为反斜杠在Java里是转义字符,我们要使用 \ \ s +。例子: Scanner sc = new Scanner(System.in); Strin

2020-10-17 13:50:11 1962

原创 C# 文件创建和FTP文件上传下载

应用场景:项目需增加每分钟将实时统计数据写入文件后通过FTP发送给数据分析监管平台的功能,简单地写一下创建文件和FTP文件上传的小例子。一、创建文件 FtpFileUpload ftpFileUpload = new FtpFileUpload(); /// <summary> /// 创建文件 /// </summary> /// <param name="psList">要写入文件的数据记录数组</param> .

2020-09-12 15:08:15 267

空空如也

空空如也

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

TA关注的人

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