0%

简介

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

阅读全文 »

我们在调试TI的cc系列的芯片时经常会用到CC-DEBUGGER,CC-DEBUGGER的接口中带有SPI调试接口,如果我们是在批量生产时这个接口有时会使用不到,因此需要将下载接口进行简化,下面是主要的接线说明,
调试下载接口:

阅读全文 »

前言

最近在做一款热风枪需要测量温度,所以用到了MAX6675这款K型热电偶测量芯片,MAX6675执行冷端补偿,并数字化K型热电偶的信号。 数据以SPI™兼容的12位分辨率,只读格式输出。
该转换器分辨率为0.25°C,允许读数高达+ 1024°C,并且在0°C至+ 700°C的温度范围内具有8LSB的热电偶精度。

阅读全文 »

ArduinoIDE会默认把开发板库文件存放在

1
C:\Users\你自己的管理员文件夹\AppData\Local\Arduino15\packages

想要换只需在Arduino的安装目录下新建一个文件夹,重命名为portable 重启IDE,看到如下位置变更就成功了。

阅读全文 »