WANQIANG WANG


  • Home

  • About

  • Tags

  • Categories

  • Archives

  • Search

日志设计

Posted on 2021-01-02 | In 代码

C语言版本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

/**********************************************
* LOG DEFINE *
**********************************************/
// OFF FATAL ERROR WARN INFO DEBUG TRACE
// 0 1 2 3 4 5 6
#define OFF (0)
#define FATAL (1)
#define ERROR (2)
#define WARN (3)
#define INFO (4)
#define DEBUG (5)
#define TRACE (6)

#define LOG_LEVEL DEBUG


#define LOG(level, format, ...) \
if(LOG_LEVEL >= level) { \
fprintf(stderr, "[%s|%s@%s,%d] " format "\n", \
#level, __func__, __FILE__, __LINE__, ##__VA_ARGS__ ); \
}

QMenu 自定义样式

Posted on 2020-11-21 | In Qt , GUI

通过QSS 去掉菜单前面的对勾。用颜色表示 checked 状态。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20


QMenu::item {
padding:8px 32px;/*设置菜单项文字上下和左右的内边距,效果就是菜单中的条目左右上下有了间隔*/
margin:0px 8px;/*设置菜单项的外边距*/
border-bottom:1px solid #DBDBDB;/*为菜单项之间添加横线间隔*/
padding-left:0px;
}

QMenu::item:selected { /* when user selects item using mouse or keyboard */
background-color: #00fff9;/*这一句是设置菜单项鼠标经过选中的样式*/
}

QMenu::item:checked { /* checked */
background-color: #ff0000;
}

QMenu::indicator { /* delete the default icon v */
image: none;
}

效果图:

image-20201121110545903

Win10 启用组策略

Posted on 2020-11-01 | In win10

Win10 启用组策略

WIN+R 运行输入 gpedit.msc 发现找不到这个命令。在网上查了一下,说可能是因为自已用的Win10是家庭版,不支持这个功能。

发现用下面的方法可以手动安装。亲测好用。

1
2
3
4
5
6
7
8
9
10
11
12

@echo off

pushd "%~dp0"

dir /b %systemroot%\Windows\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientExtensions-Package~3*.mum >gp.txt

dir /b %systemroot%\servicing\Packages\Microsoft-Windows-GroupPolicy-ClientTools-Package~3*.mum >>gp.txt

for /f %%i in ('findstr /i . gp.txt 2^>nul') do dism /online /norestart /add-package:"%systemroot%\servicing\Packages\%%i"

pause

把上面的内容存到一个bat文件中。用管理员权限执行,就能自动安装。

然后就可以运行 gpedit.msc 了。

Win10 微软拼音双拼设置

Posted on 2020-06-02 | In win , 输入法

Win10 微软拼音双拼设置

Win10 微软拼音添加小鹤双拼

首先打开注册表,找到这个路径:

1
计算机\HKEY_CURRENT_USER\Software\Microsoft\InputMethod\Settings\CHS

然后新建一个名为 UserDefinedDoublePinyinScheme0的字符串值,数值数据为

1
小鹤双拼*2*^*iuvdjhcwfg^xmlnpbksqszxkrltvyovt

然后在设置中将默认的输入法设置为小鹤双拼。

微软拼音支持自定义时间格式

1
2
3
4
5
6
7
# 关键字需要用 %% 来包裹
yyyy 4 位年
MM 2 位月
dd 2 位日
HH 2 位小时(24 小时制)
mm 2 位分钟数
ss 2 位秒数

示例:

1
2
3
# 结果是这样的格式: 2020-02-07 12:36:52
# 具体的格式参看, 详见 ref
%yyyy%-%MM%-%dd% %HH%:%mm%:%ss%

Qt下载链接

Posted on 2020-05-30 | In Qt
  1. 所有Qt版本下载地址:

http://download.qt.io/archive/qt/

  1. 所有Qt Creator下载地址:

http://download.qt.io/archive/qtcreator/

  1. 所有Qt VS开发插件下载地址:

http://download.qt.io/archive/vsaddin/

  1. Qt相关下载大全

http://download.qt.io/

SPI 总线

Posted on 2020-05-03 | In 外设 , 嵌入式

概述

SPI是串行外设接口(Serial Peripheral Interface)的缩写。是 Motorola 公司推出的一种同步串行接口技术,是一种高速的,全双工,同步的通信总线。

优缺点

特点

  1. 高速、同步、全双工、非差分、总线式
  2. 主从机通信模式

优点

  1. 支持全双工通信
  2. 通信简单
  3. 数据传输速率块

缺点

  1. 没有指定的流控制,没有应答机制确认是否接收到数据,所以跟IIC总线协议比较在数据
  2. 可靠性上有一定的缺陷。

协议详解

它以主从方式工作,这种模式通常有一个主设备和一个或多个从设备,需要至少4根线,事实上3根也可以(单向传输时)。也是所有基于SPI的设备共有的,它们是SDI(数据输入)、SDO(数据输出)、SCLK(时钟)、CS(片选)。

  1. SDO/MOSI – 主设备数据输出,从设备数据输入;
  2. SDI/MISO – 主设备数据输入,从设备数据输出;
  3. SCLK – 时钟信号,由主设备产生;
  4. CS/SS – 从设备使能信号,由主设备控制。当有多个从设备的时候,因为每个从设备上都有一个片选引脚接入到主设备机中,当我们的主设备和某个从设备通信时将需要将从设备对应的片选引脚电平拉低或者是拉高。

mark

SPI通信有4种不同的模式,不同的从设备可能在出厂是就是配置为某种模式,这是不能改变的;但我们的通信双方必须是工作在同一模式下,所以我们可以对我们的主设备的SPI模式进行配置,通过CPOL(时钟极性)和CPHA(时钟相位)来控制我们主设备的通信模式,具体如下:

  1. Mode0:CPOL=0,CPHA=0
  2. Mode1:CPOL=0,CPHA=1
  3. Mode2:CPOL=1,CPHA=0
  4. Mode3:CPOL=1,CPHA=1

时钟极性CPOL是用来配置SCLK的电平出于哪种状态时是空闲态或者有效态,时钟相位CPHA是用来配置数据采样是在第几个边沿:

  1. CPOL=0,表示当SCLK=0时处于空闲态,所以有效状态就是SCLK处于高电平时
  2. CPOL=1,表示当SCLK=1时处于空闲态,所以有效状态就是SCLK处于低电平时
  3. CPHA=0,表示数据采样是在第1个边沿,数据发送在第2个边沿
  4. CPHA=1,表示数据采样是在第2个边沿,数据发送在第1个边沿

例如:

CPOL=0,CPHA=0:此时空闲态时,SCLK处于低电平,数据采样是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在上升沿,数据发送是在下降沿。

CPOL=0,CPHA=1:此时空闲态时,SCLK处于低电平,数据发送是在第1个边沿,也就是
SCLK由低电平到高电平的跳变,所以数据采样是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=0:此时空闲态时,SCLK处于高电平,数据采集是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在下降沿,数据发送是在上升沿。

CPOL=1,CPHA=1:此时空闲态时,SCLK处于高电平,数据发送是在第1个边沿,也就是
SCLK由高电平到低电平的跳变,所以数据采集是在上升沿,数据发送是在下降沿。

mark

mark

需要注意的是:我们的主设备能够控制时钟,因为我们的SPI通信并不像UART或者IIC通信
那样有专门的通信周期,有专门的通信起始信号,有专门的通信结束信号;所以我们的
SPI协议能够通过控制时钟信号线,当没有数据交流的时候我们的时钟线要么是
保持高电平要么是保持低电平。

协议对比

spi 与 iic

  1. iic总线不是全双工,2根线SCL SDA。spi总线实现全双工,4根线SCK CS MOSI MISO

  2. iic总线是多主机总线,通过SDA上的地址信息来锁定从设备。spi总线只有一个主设备,主设备通过CS片选来确定从设备

  3. iic总线传输速度在100kbps-4Mbps。spi总线传输速度更快,可以达到30MHZ以上。

  4. iic总线空闲状态下SDA SCL都是高电平。spi总线空闲状态MOSI MISO也都是 SCK是有CPOL决定的

  5. iic总线scl高电平时sda下降沿标志传输开始,上升沿标志传输结束。spi总线cs拉低标志传输开始,cs拉高标志传输结束

  6. iic总线是SCL高电平采样。spi总线因为是全双工,因此是沿采样,具体要根据CPHA决定。一般情况下master device是SCK的上升沿发送,下降沿采集

  7. iic总线和spi总线数据传输都是MSB在前,LSB在后(串口是LSB在前)

  8. iic总线和spi总线时钟都是由主设备产生,并且只在数据传输时发出时钟

  9. iic总线读写时序比较固定统一,设备驱动编写方便。spi总线不同从设备读写时序差别比较大,因此必须根据具体的设备datasheet来实现读写,相对复杂一些。

SPI、IIC、UART和CAN 使用场景对比

SPI 和I2C这两种通信方式都是短距离的,芯片和芯片之间或者其他元器件如传感器和芯片之间的通信。 SPI和IIC是板上通信,IIC有时也会做板间通信,不过距离甚短,不过超过一米,例如一些触摸屏,手机液晶屏那些薄膜排线很多用IIC,I2C能用于替代标准的并行总线,能连接的各种集成电路和功能模块。I2C是多主控总线,所以任何一个设备都能像主控器一样工作,并控制总线。总线上每一个设备都有一个独一无二的地址,根据设备它们自己的能力,它们可以作为发射器或接收器工作。多路微控制器能在同一个I2C总线上共存这两种线属于低速传输。

而UART是应用于两个设备之间的通信,如用单片机做好的设备和计算机的通信。这样的通信可以做长距离的。UART速度比上面两者者快,最高达100K左右,用与计算机与设备或者计算机和计算之间通信,但有效范围不会很长,约10米左右,UART优点是支持面广,程序设计结构很简单,随着USB的发展,UART也逐渐走向下坡。

CAN使用场景完全不一样:

  1. CAN 通讯距离最大是10 公里(设速率为5Kbps),或最大通信速率为1Mbps(设通信距离为40 米)。
  2. CAN 总线上的节点数可达110 个。通信介质可在双绞线,同轴电缆,光纤中选择。
  3. CAN 采用非破坏性的总线仲裁技术,当多个节点同时发送数据时,优先级低的节点会主动退出发送,高优先级的节点可继续发送,节省总线仲裁时间。
  4. CAN 是多主方式工作,网上的任一节点均可在任意时刻主动地向网络上其他节点发送信息。
  5. CAN 采用报文识别符识别网络上的节点,从而把节点分成不同的优先级,高优先级的节点享有传送报文的优先权。报文是短帧结构,短的传送时间使其受干扰概率低,CAN 有很好的效验机制,这些都保证了CAN 通信的可靠性。

常见图表与用途

Posted on 2020-02-05 | In 数据分析
主类 次类 用途
折线图 折线图 用于反应和时间相关的数据变化(趋势)。
面积图 用于反应主次之间基于时间的对比。
柱状图 柱状图 分类项目的数量比较。也能反应趋势。
条形图 分类项目的数量比较。
环状条形图 分类项目的数量比较。更能反应项目之间的数量关系。
南丁格尔玫瑰图 以夸张的形式来表示分类项目的数量对比
饼状图 饼状图 反映分类数据反占比例
旭日图 表示比例对比的同时,也表示层次关系
对状图 表示比例,可以多层线。
散点图 散点图 反应相关性和分布关系,两个变量
气泡图 反应相关性和分布关系,三个变量
带线散点 趋势线
地图 地图 反应空间信息
其它图 股价图/箱线图 反映数据分散情况
直方图 反映数据分布
瀑布图 数量变化的过程

Qt对话框窗口设置

Posted on 2020-01-21 | In qt , c++

设置窗口标题

1
setWindowTitle("Touch Screen");

设置窗口固定大小

1
setFixedSize(QT_WINDOW_WIDTH_FOR_TOUCH, QT_WINDOW_HEIGHT_FOR_TOUCH);

设置窗口显示在另外一个显示器上

1
2
3
4
5
QDesktopWidget* desktop = QApplication::desktop();
if (desktop->screenCount() > 1)
{
setGeometry(desktop->screenGeometry(1));
}

在非主线程更新显示

1
QMetaObject::invokeMethod(this, "asyncUpdateGui", Qt::QueuedConnection);

其中 asyncUpdateGui 的定义:

1
2
private slots:
Q_INVOKABLE void asyncUpdateGui();

实现:

1
2
3
4
void xApplicationWindow::asyncUpdateGui()
{
update();
}

解决 package 'fontconfig' not found

Posted on 2020-01-20 | In linux , compile

解决 package ‘fontconfig’ not found

Whenever you get messages about missing packages (or suggestions to modify your PKG_CONFIG_PATH) during a build, it usually indicates that you are missing the corresponding development package - which is typically separate from the runtime package that is normally installed on the system.

In this case you have the most recent version of fontconfig but are probably missing the corresponding libfontconfig1-dev package.

正确的解决方法是安装:libfontconfig1-dev

DD-WRT 通过SSH使用WOL

Posted on 2020-01-06 | In dd-wrt , 路由器

WOL through Telnet/SSH

Note: This is the preferred method to send WOL magic packets remotely.

If you have local or remote Telnet/SSH access to your router, you can wake up a machine on the LAN by using the following command:

1
/usr/sbin/wol -i 192.168.1.255 -p PP AA:BB:CC:DD:EE:FF

Note that the full path to “/usr/sbin/wol” is important. Simply “wol” will not work.

Substitute AA:BB:CC:DD:EE:FF with the actual MAC address of the computer which you wish to boot remotely. Likewise, replace 192.168.1.255 with the actual broadcast address of the network (192.168.1.255 is the broadcast address when the machine has an IP of 192.168.1.x and subnet mask of 255.255.255.0). Replace “PP” with the port number your machine listens on (usually 7 or 9).

1
/usr/sbin/wol -i 192.168.1.255 -p 9 24:5E:BE:32:C8:EB
12…10

Wanqiang

95 posts
39 categories
40 tags
GitHub E-Mail
© 2021 Wanqiang
Powered by Hexo
|
Theme — NexT.Pisces v5.1.4
|
粤ICP备15047376号