自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

习惯成就伟大

欢迎光临本博客

  • 博客(927)
  • 资源 (4)
  • 论坛 (1)
  • 收藏
  • 关注

原创 固高运动控制卡的相关知识点

承接使用QT(C++)编程的各类固高运动控制项目,有意者可私聊。# GTS运动控制器-二维位置比较输出扩展功能指令 6 GT_2DCompareSetPrm指令原型 short GT_2DCompareSetPrm(short chn,T2DComparePrm *pPrm); 指令说明 设置二维位置比较输出参数。 指令类型 立即指令,调用后立即生效。 ...

2019-08-07 14:14:35 4239

转载 华为海思AI视频监控芯片出货量超5亿,背后竟然离不开这家公司?

导语:“AI芯片”这个新鲜的概念在过去一年间逐渐走过了普及的阶段,越来越被大众所熟知。在行业走过野蛮生长,开始加速落地、加速整合的过程中,也有更多的AI芯片公司也开始走出属于自己的差异化路线。智东西在此前AI芯片系列报道第一季之后,再次出发,进一步对AI芯片全产业链上下近百间核心企业进行差异化的深度追踪报道。此为智东西AI芯片产业系列报道第二季之一。继高清化和IP化之后,如何让视频监控更加...

2018-12-04 13:43:00 2948

转载 英文文献 ---英语词汇整理

as such          就其本身而言intermediate       中间的phony   假的,欺骗的

2018-11-29 09:47:56 416

原创 C++内存管理之shared_ptr

引子  c++中动态内存的管理是通过new和delete来完成的,只要保证new和delete的配对使用,是没有问题的。但是有时候我们会忘记释放内存,甚至有时候我们根本就不知道什么时候释放内存。特别时在多个线程间共享数据时,更难判断内存该何使释放。这种情况下就机器容易产生引用非法内存的指针。                                                                                                      为了更容

2020-11-18 15:32:38 59

原创 Asynchronous subscription example

#include <stdio.h>#include <stdlib.h>#include <string.h>#include "MQTTClient.h"#define ADDRESS "tcp://localhost:1883"#define CLIENTID "ExampleClientSub"#define TOPIC "MQTT Examples"#define PAYLOAD "Hello World!".

2020-11-17 10:41:55 19

原创 MQTT QoS(服务质量)介绍

MQTT 协议中规定了消息服务质量(Quality of Service),它保证了在不同的网络环境下消息传递的可靠性,QoS 的设计是 MQTT 协议里的重点。作为专为物联网场景设计的协议,MQTT 的运行场景不仅仅是 PC,而是更广泛的窄带宽网络和低功耗设备,如果能在协议层解决传输质量的问题,将为物联网应用的开发提供极大便利。MQTT QoS 等级MQTT 设计了 3 个 QoS 等级。QoS 0:消息最多传递一次,如果当时客户端不可用,则会丢失该消息。 QoS 1:消息传递至少 1 次.

2020-11-10 10:44:19 48

原创 spdlog的格式设置

SPDLOG_INLINE void pattern_formatter::handle_flag_(char flag, details::padding_info padding){ // process custom flags auto it = custom_handlers_.find(flag); if (it != custom_handlers_.end()) { auto custom_handler = it->second-&.

2020-10-15 15:34:34 71

原创 linux下对/sys/class/gpio中的gpio的控制

在嵌入式设备中对GPIO的操作是最基本的操作。一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的。其实linux下面有一个通用的GPIO操作接口,那就是我要介绍的 “/sys/class/gpio” 方式。首先,看看系统中有没有“/sys/class/gpio”这个文件夹。如果没有请在编译内核的时候加入 Device Drivers —> GPIO Support —> /sys/class/gpio/… (sysfs interface)。/sys/class/g...

2020-10-15 14:32:22 210

原创 UML类图

1.类图基础属性类图的表示-表示private #表示protected ~表示default,也就是包权限 _下划线表示static 斜体表示抽象 2.类与类之间关系在UML类图中,常见的有以下几种关系: 泛化(Generalization), 实现(Realization),关联(Association),聚合(Aggregation),组合(Composition),依赖(Dependency)类与类之间的关系2.1泛化介绍:泛化(Gen.

2020-10-09 10:49:22 78

原创 spdlog Features

Very fast (seebenchmarksbelow). Headers only or compiled Feature rich formatting, using the excellentfmtlibrary. Asynchronous mode (optional) Customformatting. Multi/Single threaded loggers. Various log targets: Rotating log files. Daily log ...

2020-09-29 16:51:13 111

原创 libevent源码学习(14):IO复用模型之epoll的封装

目录Libevent提供的epoll后端结构体初始化epoll_init何时调用epoll_init事件添加epoll_nochangelist_add何时调用epoll_nochangelist_add事件删除epoll_nochangelist_del何时调用epoll_nochangelist_del事件监听epoll_dispatch为什么evmap_io_active的第三个参数需要或上一个EV_ET?何时调用epoll_dispatchepoll销毁e

2020-09-27 15:32:38 84

原创 当NONCOPYABLE遇见SINGLETON

在实现单例类时,通常要把构造相关的几个函数访问权限设为private或protected(最好是private)。但假设一个大型系统中,有数十个单例类(这很正常,单例类其实是外观模式的一种最常用设计),每一个都这么写显得繁琐不堪。要把这些操作代表的代码复用,可以使用c++语言提供的利器---继承。设计如下的基类:1 class NonCopyable {2 public:3 NonCopyable() = default;4 NonCopyable(const NonCopy

2020-09-09 11:02:40 58

转载 C++11 实现简单的阻塞队列

一个blocking queue是一个支持 take 和 put 的 queue。take操作从队列中取出一个元素,如果队列为空,那么take会阻塞到直到队列中有可用元素。put操作往队列里放入一个元素,如果队列是满,那么put会阻塞到队列有可用空间。一个简单的blocking queue的实现,首先我们要有一个非常底层的容器,至于是vector还是deque甚至是list都无所谓,我们这里选择deque作为容器。前面定义的blocking queue是有界的,也就是说元素有上限,所以才会出

2020-09-08 10:33:57 78

转载 BlockingQueue(阻塞队列)详解

一. 前言  在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。二. 认识BlockingQueue  阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示:  从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列

2020-09-04 20:01:07 83

原创 epoll机制:epoll_create、epoll_ctl、epoll_wait、close

在linux的网络编程中,很长的时间都在使用select来做事件触发。在linux新的内核中,有了一种替换它的机制,就是epoll。相比于select,epoll最大的好处在于它不会随着监听fd数目的增长而降低效率。因为在内核中的select实现中,它是采用轮询来处理的,轮询的fd数目越多,自然耗时越多。并且,linux/posix_types.h头文件有这样的声明:#define__FD_SETSIZE1024表示select最多同时监听1024个fd,当然,可以通过修改头文件...

2020-09-02 10:55:39 116

转载 面试系列之指针和引用的使用场景

先抛出两个问题: 指针和引用有什么区别? 什么时候应该使用指针?什么时候应该使用引用? 01 指针和引用的区别首先看一段代码:int a = 1;int b = 2;int *c = nullptr;c = &a;int &d = b;指针其实就是一个存放内存地址的整数,这个整数表示的是被指向的变量的地址。引用其实就是变量的别名,就是给变量重新起了一个名字,注意引用既然是个别名,那它一定要有本体,一个人叫王二小,我们也可以给它起个别名叫二蛋.

2020-08-19 15:21:19 140

原创 pFun = ( Fun )*( ( int* ) * ( int* )( &b ) + i )

typedef void( *Fun )( void ); //是吧Fun定义为一个没有参数,返回void类型的函数指针*( ( int* ) * ( int* )( &b ) + i )这一段,(int*)*相当于没有进行任何操作,所以等同于*( ( int* )( &b ) + i )这里先取b的地址,然后把地址转换成int*,之后+i是指针算术,也就是在b的地址上加一个int的长度,最后最前面的*是解指针,座椅这段最后返回的是“b的地址+i个int长度的值”最前面的(Fun)

2020-08-19 11:22:00 108

原创 c++常见面试题30道(有答案)

1.new、delete、malloc、free关系delete会调用对象的析构函数,和new对应free只会释放内存,new调用构造函数。malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存和释放内存。对于非内部数据类型的对象而言,光用maloc/free无法满足动态对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和

2020-08-11 16:29:35 397

转载 C++三种容器:list、vector和deque的区别

在写C++程序的时候会发现STL是一个不错的东西,减少了代码量,使代码的复用率大大提高,减轻了程序猿的负担。还有一个就是容器,你会发现要是自己写一个链表、队列,或者是数组的时候,既要花时间还要操心怎么去维护,里面的指针啊,内存够不够用啊,长度问题,有没有可能溢出啊等等一系列的问题等着我们去解决,还是比较头疼的。所以容器的出现解决了这一个问题,它将这些数据结构都封装成了一个类,只需要加上头文件,我们就可以轻松的应用,不用那么复杂,就连指针也被封装成了迭代器,用起来更方便,更人性化,方便了我们的编程,对于程序员

2020-08-10 09:29:26 197

转载 深入 理解char * ,char ** ,char a[ ] ,char *a[] 的区别

C语言中由于指针的灵活性,导致指针能代替数组使用,或者混合使用,这些导致了许多指针和数组的迷惑,因此,刻意再次深入探究了指针和数组这玩意儿,其他类型的数组比较简单,容易混淆的是字符数组和字符指针这两个。。。下面就开始剖析一下这两位的恩怨情仇。。。 1 数组的本质   数组是多个元素的集合,在内存中分布在地址相连的单元中,所以可以通过其下标访问不同单元的元素。。 2 指针。   指针也是一种变量,只不过它的内存单元中保存的是一个标识其他位置的地址。。由于地址也是整数,在32位平台下,指针默认为

2020-08-03 14:05:42 136

转载 QProgressBar

简述:Qt提供了两种显示进度条的方式:一种是QProgressBar,提供了一种横向或者纵向显示进度的控件表示方式,用来描述任务的完成情况;另一种是QProgressDialog,提供了一种针对慢速过程的进度对话框表示方式,用于描述任务完成的进度情况。标准的进度条对话框包括一个进度显示条、一个取消按钮及一个标签。1、 QProgressBar基本用法 m_pConnectProBar = new QProgressBar; m_pConnectProBar->setRan...

2020-07-23 09:43:30 373

转载 invalid use of incomplete type struct 或者是class的解决办法

最近在移植wifi display的代码,过程中遇到一些问题,有些问题是常见的问题,现列出解决方法自己mark一下,也希望能对别人有所帮助,少走弯路。常见问题一:invalid use of incomplete type出现这个问题,表明编译器不知道所用的struct 或者是class的具体实现,通常出现在如下情况:假设我们有一个class some定义在some.h中,实现在some.cpp中,我们在other.cpp中要用到这个some 的方法,于是我们再other.h中声明可一个class

2020-07-21 17:34:04 702

原创 VS Code 编译多个C++文件

我们可以通过修改tasks.json文件来对构建过程进行定制化。编译多个C++文件:通过把“${file}”修改为“${workspaceFolder}\\*.cpp”,可以构建当前工作区中的所有C++文件。 "args": [ "-g", "${workspaceFolder}/src/*.cpp", "${workspaceFolder}/FolderA/*.cpp",

2020-07-19 16:10:04 819

原创 void(*func)(int)

void(*func)(int) 是一个指针 指向一个 返回值为void 参数为int的函数是一个函数指针具体理解http://zhidao.baidu.com/link?url=5GpEN7wPUhDlk_m-3drRHV9bGxv53tj818vtd1GIsyaVfyY1mdsFZfP6_2M_DNAfTQrh0qxMo_wXhK1CjIEPJK

2020-07-19 12:00:01 153

转载 linux的定时器(timer_create,timer_gettime,timer_delete,SIGEV_SIGNAL)

系统中的一个模块需要频繁的获取系统时间,使用linux中内置的函数开销过大,因为需要的精度不是很高(毫秒级),索性用signal函数配合setitimer实现了个简易的全局时钟。但是后来发现,SIGALRM的中断信号回终止sleep,因为sleep就是用SIGALRM信号量实现的,得另想方案。这个替代方案就是POSIX中内置的定时器:timer_create()(创建)、timer_settime()(初始化)以及 timer_delete(销毁),将自己的时间信号处理函数用timer_create

2020-07-16 16:12:17 222

原创 linux下多定时器+线程池的实现(经典)

linux只允许单进程拥有一个定时器,因此在linux下的单进程中要使用多个定时器,则需要自己维护管理这个实现允许用户使用多个自定义的定时器,每个自定义的定时器将周期地被触发直到其被删除。实现的主要思路是:i)首先在初始化多定时器(init_mul_timer)时利用setitimer注册一个基本的时间单位(如1s)的定时事件;ii)用户需要set_a_timer注册自定义定时器时,在timer_manage管理结构中记录这个定时器的回调函数和定时周期等参数;iii)当基本的时间单位到期后.

2020-07-16 15:04:15 142

原创 VS Code 必备插件

1. Bracket Pair Colorizer

2020-07-15 09:27:02 116

转载 POSIX 消息队列函数(mq_open、mq_getattr、mq_send、mq_receive)示例

概述消息队列是Linux IPC中很常用的一种通信方式,它通常用来在不同进程间发送特定格式的消息数据。消息队列和之前讨论过的管道和FIFO有很大的区别,主要有以下两点:一个进程向消息队列写入消息之前,并不需要某个进程在该队列上等待该消息的到达,而管道和FIFO是相反的,进程向其中写消息时,管道和FIFO必需已经打开来读,那么内核会产生SIGPIPE信号。 IPC的持续性不同。管道和FIFO是随进程的持续性,当管道和FIFO最后一次关闭发生时,仍在管道和FIFO中的数据会被丢弃。消息队列是随内核

2020-07-09 17:29:26 301

转载 在ubuntu系统中使用命令行更新vs code

一直没有找到ubuntu上自动更新vs code的有效方法。今天在stackoverflow发现了一个帖子说的很好,成功的更新了我的vs code。第一步执行chenrui@chenrui:~/Downloads$ wget https://vscode-update.azurewebsites.net/latest/linux-deb-x64/stable -O /tmp/code_latest_amd64.deb1命令:wget https://vscode-update.azurewebs

2020-07-04 15:34:28 277

转载 C++类模板(模板类)详解

人们需要编写多个形式和功能都相似的函数,因此有了函数模板来减少重复劳动;人们也需要编写多个形式和功能都相似的类,于是C++引人了类模板的概念,编译器从类模板可以自动生成多个类,避免了程序员的重复劳动。例如,在《C++运算符重载》一章中的《C++实现可变长度的动态数组》一节中,我们实现了一个可变长的整型数组类,可能还需要可变长的 double 数组类,可变长的 CStudent 数组类,等等。如果要把类似于可变长整型数组类的代码都重写一遍,无疑非常麻烦。有了类模板的机制,只需要写一个可变长的数组类模板,..

2020-06-19 11:29:40 156

原创 注意:ARM处理器中的char 是无符号的

C标准上char可以带符号也可以不带符号,但是具体的平台又有所不同。在大多数的体系结构中char是带符号的,但是在ARM体系中char是不带符号的其取值范围是0 - 255。如下面的代码: 图一在X86平台: 图二在基于ARM的HI3518EV200平台:① 编译 ...

2020-06-18 21:22:38 195

原创 滑动窗口的最大值

vector<int> maxInWindows(const vector<int>& num, unsigned int size){ vector<int> maxInWindows; if(num.size() >= size && size >= 1) { deque<int> index; for(unsigned int i = 0; i < s.

2020-06-16 11:40:59 100

原创 Ubuntu VScode 获取超级权限

因为在Ubuntu下,某些硬件设备需要使用root权限才可以操作,所以如果要用vscode调试有硬件的代码时,需要获得root权限在命令行中输入以下命令sudo code --user-data-dir="~/.vscode-root"

2020-06-12 17:16:22 739

原创 从零开始 Nginx 交叉编译

交叉编译工具链: arm-poky-linux-gnueabi-gcc

2020-05-26 13:59:01 186

原创 nginx 嵌入式

./configure --help --help print this message --prefix=PATH set installation prefix --sbin-path=PATH set nginx binary pathname --modules-path=PATH set modules path.

2020-05-25 20:35:37 187

原创 nginx交叉编译

(1)configure【3798】./configure --prefix=/opt/app/nginx --with-zlib=/home/share/nginx/zlib-1.2.11 --with-cc=arm-histbv310-linux-gcc --user=root --group=root --without-http_rewrite_module --without-http_fastcgi_module --conf-path=/opt/app/nginx/conf/nginx.c

2020-05-25 16:58:34 143

原创 qt 连接 mysql 数据库超时

mysql> show variables like '%timeout';+-----------------------------------+----------+| Variable_name | Value |+-----------------------------------+----------+| connect_timeout | 10 || delayed_insert_.

2020-05-22 09:28:42 410

转载 python中的Queue模块

queue介绍queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue。python3直接queue即可 在python中,多个线程之间的数据是共享的,多个线程进行数据交换的时候,不能够保证数据的安全性和一致性,所以当多个线程需要进行数据交换的时候,队列就出现了,队列可以完美解决线程间的数据交换,保证线程间数据的安全性和一致性(简单的来说就是多线程需要加锁,很可能会造成死锁,而queue自带锁。所以多线程结合queue会好的很多。案例:htt

2020-05-21 21:09:26 114

原创 python3之threading模块(上)

threading模块提供了管理多个线程执行的API。最简单的用法。就是用一个目标函数实例化一个Thread对象。start()开始工作,join()等待当前线程完成。import threadingdef work(): print("working")for i in range(5): t = threading.Thread(target=work) t.start() print("please wait!") t.join()

2020-05-20 21:05:01 147

原创 taskset set or retrieve a process CPU affinity

SYNOPSIS top taskset [options] mask command [argument...] taskset [options] -p [mask] pidDESCRIPTION top taskset is used to set or retrieve the CPU affinity of a running process given its pid, or to launch...

2020-05-18 21:38:47 102

基于MP430的示波法血压计设计

基于MP430的示波法血压计设计,希望能给你一点点思路

2014-10-16

心电信号采集模块

心电信号采集模块的设计与开发,希望能对大家有帮助

2014-10-16

蓝牙低功耗 知识讲解

关于蓝牙低功耗的讲解,主要包括蓝牙历史,蓝牙的体系结构

2018-06-27

listen-on-ipv4-and-ipv6-interfaces.py

Receive SNMP TRAP messages with the following options: SNMPv1/SNMPv2c with SNMP community “public” over IPv4/UDP, listening at 127.0.0.1:162 over IPv6/UDP, listening at [::1]:162 print received data on stdout

2018-04-17

青竹雨仙的留言板

发表于 2020-01-02 最后回复 2020-01-02

空空如也

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

TA关注的人 TA的粉丝

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