0%

风扇简介

CPU风扇主要有两种,一种是三线的风扇,主要包含电源两根线加一根转速反馈线,这种风扇是定速风扇基本上是无法通过CPU去自动调速的;第二种是4线的风扇,相比三线风扇对一条PWM调速线,CPU可以根据温度及反馈的风扇转速去调整输出的PWM达到调速的目的

3线替代4线就不能随cpu温度变换风扇转速,高速旋转,噪音大。
4线完全能替代3线的,也就是3根线是恒速运行的,4根线可以自动调速(当然前提是主板支持并开启了这个功能),3线和4线可以互换直接插上使用的。

阅读全文 »

1、什么是韦根信号

​ 韦根信号是两根数据线传输二进制数据,在空闲时端,两线的对0V的电源都为TTL电平的水平,也就是5V,一般通过5K电阻上拉,当有数据传输时,两根线交替地发送400uS低脉冲,当Data0线发脉冲时,数据是0;当Data1发脉冲时,发送的数据是1,不能两根线同时发脉冲。脉冲的间隔时间是1mS。

韦根的数据格式一般是由三部分组成:校验位、出厂码和数据位。不同的韦根格式有不同的组成。如26Bit格式,其第一位和第二十六位是校验位,2-9位是厂家码,10-25位是卡号位。

2、什么是韦根协议

Wiegand协议是国际上统一的标准,是由摩托罗拉公司制定的一种通讯协议,适用于门禁控制系统的读卡器和卡片的许多特性。

Wiegand协议很多格式,最常用的格式是26bit,即韦根26,此外还有34bit、32bit、36bit、37bit、42bit、44bit等格式。标准26-bit 格式是一个开放式的格式,他是广泛使用的工业标准,几乎所有的门禁控制系统都接受标准的26-Bit格式。

Wiegand协议并没有定义通讯的波特率、也没有定义数据长度,韦根格式主要定义数据传输方式:Data0和Data1两根数据线分别传输二进制数据0和二进制数据1。

阅读全文 »

Retropie

Retropie可以将你的树莓派或者PC变成一台复古游戏机模拟器。 其基于完整的操作系统之上,你可以把它装在Raspbian系统上,或者直接刷入完整的镜像然后再添加更多的软件。Retropie预装了很多不同的模拟器,可以让你玩很多不同平台的游戏,比如FC,SFC,MD,CPS1,CPS2,NEOGEO,PS1等等。
RetroPie 是免费的游戏机模拟器,通过它可以将你的树莓派、PC或者是Odroid 变为游戏机,RetroPie支持超过50+的主机系统,从1977的Atari 2600到PS2、Wii都可以支持,我们国内熟悉的儿时经典任天堂FC、GBA和PS都支持。RetroPie在树莓派上提供了SD卡的镜像文件,只需要刻录到SD卡后,就可以运行各种不同的模拟器,传输Roms到树莓派后就可以开始回味经典游戏了。

RETRORANGEPI

RetrOrange Pi是一个非营利性项目。

它包含一个基本的Retropie设置,基于Armbian桌面版本系统,可以安装到大部分OrangePi上运行,算是Retropie在低成本Orangepi上的应用。

阅读全文 »

简介

JSON即JavaScript Object Notation,是一种轻量级的数据交换格式。

JSON建构于两种结构:

  • “名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
  • 值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。

关于JSON库的性能评测与标准符合程度,可以参照《28 个 C/C++ 开源 JSON 程序库性能及标准符合程度评测》,另一个英文版更详细结果在nativejson-benchmark

在阅读了一系列评测之后,结合需求(ROM尽量小,RAM尽量小,带处理的数据比较简单),准备研究一下cJSON和json-c。

JSON官网获得json-c和cJSON的源码地址如下:cJSONjson-c

环境

控制器STM32F405+MDK5.34+cJSON1.7.7

安装cJSON

下载源码https://gitee.com/IOTTS/cJSON.git

阅读全文 »

问题描述

前几天用SerialPort类写一个串口的测试程序,关闭串口的时候会让界面卡死。
参考博客RAR密码破解,得出界面卡死原因:主线程和其他的线程由于资源或者锁争夺,出现了死锁。

参考知乎文章电脑提速,通过点击调试暂停,查看ui线程函数栈,直接定位阻塞代码的行数,确定问题出现在SerialPort类的Close()方法。

参考文章误删文件恢复文章的解决方法和网上的大部分解决方法类似:定义2个bool类型的标记Listening和Closing,关闭串口和接受数据前先判断一下。我个人并不太接受这种方法,感觉还有更好的方式,而且文章讲述的也并不太清楚。

阅读全文 »

前言

c# 的richtextbox对读入几十万行大数据或者频繁更新经常卡死界面几分钟。
终于找到一个通过子线程更新的方法,实际测试对于40万行可以在10秒内完成更新,并且运行中界面不卡死可以操作。

一、richtextbox更新方法

richtextbox更新有两种更新方法:richtextbox.appendtext() 和 richtextbox.text = richtextbox.text + str。
在子线程中可使用 richtextbox.text = richtextbox.text + str。

为了提高效率,使用了StringBuilder sb进行缓冲,每maxDisplayline行更新一次richtextbox,并根据行数增加动态调整了maxDisplayline的大小。

阅读全文 »

有时子窗体的操作需要实时调用父窗体中的控件操作,比如在父窗体的文本框中显示子窗体中的输出:

主窗体:

MainForm.cs:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public partial class MainForm : Form  
{
public MainForm()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
SubForm SubForm = new SubForm();

// 3.将ChangeTextVal加入到委托事件中
// 等效于:
// SubForm.ChangeTextVal += ChangeTextVal;
SubForm.ChangeTextVal += new DelegateChangeTextVal(ChangeTextVal);
SubForm.ShowDialog();
}

public void ChangeTextVal(string TextVal)
{
this.textBox1.Text = TextVal;
}
}
阅读全文 »

有时我们需要在ESP32启动的时候使用一些初始化的文件,我们可以通过spiffsgen.py制作spiffs文件系统的镜像并烧写到系统里面去。

1制作spiffs文件系统镜像

我们首先要创建一个文件夹,然后把我们我们需要初始化的文件放到这个文件夹里面。
我们制作的工具是spiffsgen.py,在ESP-IDF\components\spiffs

1
2
python spiffsgen.py <image_size> <base_dir> <output_file>
python D:\Program\ESP-IDF\components\spiffs\spiffsgen.py 0x60000 spiffs_dir spiffs.bin

阅读全文 »