自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

SSSS的博客

长夜将至,我从第一行代码开始守望。

  • 博客(126)
  • 资源 (2)
  • 收藏
  • 关注

原创 OpenCV 图像形态学-膨胀dilate

膨胀 - dilation可增加light像素

2023-05-28 15:30:33 204

原创 OpenCV 图像形态学-腐蚀erode

opencv 腐蚀erode对比halcon erosion 可减少light像素,gray_ersion_shape() 灰度图像降低亮度。

2023-05-28 15:23:01 217

原创 Android-makefile编译系统-Android.mk-文件语法规范

Android-makefile编译系统-Android.mk-文件语法规范

2022-10-15 23:29:41 410

原创 linux系统编程-进程间通信-消息队列

最好用的队列是单向循环已知尾节点的队列,或者建立一个特殊的头节点,一个指向头节点,一个尾节点。可以通过消息类型进行收取或发送消息。类似于链式队列,满足先入先出,还满足通过类型来存取操作步骤:1.创建/打开消息队列相关函数:int msgget(key_t 键值,int 打开方式)参数:键值 – 通过ftok()获取打开方式:IPC_CREAT/0666成功是凡是msgid 失败是返回-12.收消息/发消息发送消息:int msg...

2021-03-07 14:19:42 232

原创 Android系统Camera2编程

开始建立相机APP manager.getCameraIdList() CameraCharacteristics characteristics = manager.getCameraCharacteristics(cameraId); characteristics.get(CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP); mPreviewSize = getOptimalSize(map.getOutputSizes(Surface

2021-03-07 13:53:56 1060

原创 链表操作-20210307

#include <stdio.h>#include <string.h>#include <math.h>#include <stdlib.h>/*写一个完整的程序,实现随机生成20个元素的链表(尾插法或头插法)用快慢指针快速查找中间结点的值并显示。*/#define OK 1;#define ERROR 0;typedef int EleType;typedef int Status;//单链表结点结构typedef st...

2021-03-07 13:40:56 185

原创 C/C++ 常见排序算法整理

测试主函数#include <stdio.h>#include <stdlib.h>#include <string.h>#include "Sort.c"// 数组长度#define LENGTH(array) ( (sizeof(array)) / (sizeof(array[0])) )int main(){ int i=100; int a[] = {8,2,3,4,3,6,6,3,9}; int ilen = L

2021-03-07 13:30:23 145

原创 C++类型转换:dynamic_cast (二)

参考:C++类型转换:dynamic_cast(一)dynamic_cast< type* >(e)   type必须是一个类类型且必须是一个有效的指针dynamic_cast< type& >(e) type必须是一个类类型且必须是一个左值,也就是说是一个非const修饰的左值dynamic_cast< type&& >(e) type必须是一个类类型且必须是一个右值,不能是左值e的类型必须符合以下三个条...

2021-02-28 23:21:28 476

原创 JSON数据格式(键值对)(一)

简介 是一种数据格式,结构为键值对的方式存储和传输,例如 第一个JSON格式 JSON 对象在大括号({})中书写: 对象可以包含多个名称/值对: { "name":"这是一个名字" , "url":"www.runoob.com" } JSON 数组 { "sites": [ { "name":"第一个名字" , "url":"www.diyigemignzi.com" },...

2021-02-28 21:40:11 7744

原创 C/C++ 二维数组做为函数参数(char类型)

参考:C/C++指针与二维数组与函数形参(int类型举例)#include<stdio.h>#define M 4 //行#define N 20 //每行长度/* 功能:数据输入方法 参数1:目标数组 参数2:数组长度 返回值:void*/void inPut(char str[][N],int m){ int indexM=0,indexN=0; printf("请输入一个第%d字符串\n",m); for(indexM=0;indexM<m;ind

2021-02-28 21:33:51 1587

原创 C/C++ 二维数组做为函数参数(int类型举例)

参考:C/C++指针与二维数组与函数形参(int类型举例)#include<stdio.h>#define M 2#define N 2/* 功能:数据输入方法 参数1:目标数组 参数2:数组长度 返回值:void*///void inPut(int arr[][N],int m,int n)void inPut(int (*arr)[N],int m,int n){ int indexM=0,indexN=0; printf("请输入一个[%d]*[%d]的二

2021-02-28 21:29:14 693

原创 C/C++指针与二维数组与函数形参(int类型举例)

通过指针变量指向一个二维 int 类型数组元素:int a[3][5]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; //定义一个数组名为 a 3行5列的整型数组int (*p)[5]; //定义一个变量名为pa的int类型指针变量。这个指针变量指向一个长度为5的数组, //pa + 1 就相当于 &a[0][0] + 5,指向下一行的首地址p=a;printf("**(p+1) =

2021-02-28 21:27:07 474

原创 linux系统中vim配置

总结的一些常用的vim配置set nocompatible "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限 set nu " 显示行号syntax on " 语法高亮set cursorline " 突出显示当前行"set cursorcolumn " 突出显示当前列"set tabstop=4 " tab键的空格数set autoindent " 自动缩进set softta

2020-08-21 00:15:32 178

原创 QT 与OpenCV 配置的问题与方法-QT5.7+OpenCV3.4.0+Cmake-3.18.1

使用版本:QT5.7OpenCV3.4.0Cmake-3.18.1第一部分:系统环境变量设置首先在本机上装好CMake、QT、OpenCV源码。然后配置环境变量。E:\Qt\Qt5.7.1\5.7\mingw53_32\binE:\Qt\Qt5.7.1\Tools\mingw530_32\binE:\cmake-3.18.1-win64-x64\bin【P.S.不要直接复制哦!具体路径请根据自己安装位置,自行修改】第二部运行CMake运行cmake-gui.e

2020-08-10 05:10:32 476

原创 C++ 文件读取 & 写入实例

ofstream 该数据类型表示输出文件流,用于创建文件并向文件写入信息。 ifstream 该数据类型表示输入文件流,用于从文件读取信息。 fstream 该数据类型通常表示文件流,且同时具有 ofstream 和 ifstream 两种功能,这意味着它可以创建文件,向文件写入信息,从文件读取信息。 要在 C++ 中进行文件处理,必须在 C++ 源代码文件中包含头文件 <iostream> 和 <fstream>。#include <...

2020-08-08 16:18:25 8427

原创 C++ 实例 - 求两数最小公倍数

闲来无事写两个小程序#include <iostream>using namespace std; int main(){ int n1, n2, max; cout << "输入两个数: "; cin >> n1 >> n2; // 获取最大的数 max = (n1 > n2) ? n1 : n2; do { if (max % n1 == 0 &a

2020-08-08 16:11:25 1302

原创 C++ 实例 - 求两数的最大公约数

闲来无事写两个小程序。#include <iostream>using namespace std; int main(){ int n1, n2; cout << "输入两个整数: "; cin >> n1 >> n2; while(n1 != n2) { if(n1 > n2) n1 -= n2; else

2020-08-08 16:10:00 231

原创 C++ 实例 - 判断闰年

闲来无事写个小程序。#include <iostream> using namespace std; int main() { int year; cout << "输入年份: "; cin >> year; if (year % 4 == 0) { if (year % 100 == 0) { //这里如果被 400 整数是闰年 if (year % 400 == 0) cout << y

2020-08-08 16:06:52 1283 2

原创 软件架构设设计模式学习笔记

1.结构模式1.1. 适配器模式 把一个错误的接口转换为所希望的形式,基于类的适配器继承了需要适配的类,以此得到这个类的接口, 同时适配器还继承了它并不需要的包袱,基于对象的适配器通过聚集得到需要适配的类,它基于类的适配 器一样,是专门为需要适配的类所写,但并不继承包袱1.2. 桥梁模式 把对客户所提供的接口抽象于实现接口相互分离,抽象的类的层次于它的实现部分通过桥梁进行链接,以此达到双方单独修改 或者扩展的目的。1.3. 装饰模式可以在运行时候动...

2020-07-26 12:46:37 113

原创 物联网嵌入式系统:FreeRTOS任务挂起和恢复

任务挂起和恢复要使用着些API则需要使能宏定义:INCLUDE_vTaskSuspend、INCLUDE_xTaskResumeFromISR任务挂起任务挂起:将任务控制块、堆栈保存,然后将任务停止,当任务需要开始运行的时候,则继续之前的状态开始运行,无需重新创建。任务删除:那么就是将当前的任务控制块、堆栈都释放掉,然后停止运行。如果需要再次运行则需要重新创建任务控制块等信息。void vTaskSuspend( TaskHandle_t xTaskToSuspend ) PRIV

2020-07-25 10:13:45 373

原创 物联网嵌入式系统:FreeRTOS任务创建框架

1.动态任务创建和删除1.1任务创建#if( configSUPPORT_DYNAMIC_ALLOCATION == 1 )BaseType_t xTaskCreate( TaskFunction_t pxTaskCode, /*Pointer to the task entry function. */ const char * const pcName, /* A descriptive name for the task.*/ const uint16_t us

2020-07-19 16:40:41 429

原创 STM32单片机中断管理

中断介绍cortex-m3支持256个中断,其中包含了16个内核中断,240个外部中断 stm32只有84个中断,包括16个内核中断和68个可屏蔽中断 stm32f103上只有60个可屏蔽中断,f107上才有68个中断也可以在相应的startup_stm32f10x_hd.s 中查看中断向量表查看当前芯片的中断源数。我当前看的这个一共是60个外部中断,也可以在参考手册查找Interrupt and exception vectors 有详细的对应寄存器地址。__Vectors

2020-07-19 15:20:24 2222

原创 STM32单片机通信-串口通信编程实例学习(1)

STM32串口编程参考官方文档串口常用的相关寄存器USART_SR 状态寄存器USART_DR数据寄存器USART_BRR波特率寄存器串口波特率配置波特率计算公式fPCLKx:串口的时钟,从手册中Memory map和Clock tree可得知,fpclkx分为:fpclk1用于AHB1中USART2、USART3、USART4、USART5 ,fpclk2 用于AHB2中USART1 Baud Rate:需要设定的波特率USARTDIV...

2020-07-01 00:56:28 4236

原创 STM32单片机通信-串口通信学习(0)

1.串口通信串行接口(Serial Interface) 是指数据一位一位地顺序传送,其特点是通信线路简单,占用芯片引脚资源少,只要一对传输线就可以实现双向通信(可以直接利用电话线作为传输线),从而大大降低了成本,特别适用于远距离通信,但传送速度较慢。一条信息的各位数据被逐位按顺序传送的通讯方式称为串行通讯。串行通讯的特点是:数据位的传送,按位顺序进行,最少只需一根传输线即可完成;成本低但传送速度慢。串行通讯的距离可以从几米到几千米;根据信息的传送方向,串行通讯可以进一步分为单工、半双工和全双工三种.

2020-06-29 01:11:09 1237

原创 STM32 位带操作 Bit-band operation详解

1.STM32位带区和位带别名区参考书籍《The Defi nitive Guide to the ARM Cortex-M3》Bit-band operation support allows a single load/store operation to access (read/write) to a single data bit. In the Cortex-M3, this is supported in two predefi ned memory regions called bi

2020-06-25 13:29:04 2225

原创 STM32单片机通信-SPI总线学习

SPI总线介绍第一:SPI 是英语Serial Peripheral interface的缩写,顾名思义就是串行外围设备接口。是Motorola首先在其MC68HCXX系列处理器上定义的。第二:SPI,是一种高速的,全双工(发送和接收是独立的信号线),同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局上节省空间,提供方便,主要应用在 EEPROM,FLASH,实时时钟,AD转换器,还有数字信号处理器和数字信号解码器之间。第三:通常由一个主模块和一个或多个从模块组

2020-06-21 23:08:45 3634 1

原创 STM32单片机通信-IIC总线学习

1.IIC总线介绍第一:I2C(IIC,Inter-Integrated Circuit),两线式串行总线,由PHILIPS公司开发用于连接微控制器及其外围设备。第二:IIC是半双工通信方式,只有2根链接线,一根是双向的数据线SDA,可发送和接收数据,I2C总线上的主设备与从设备之间以字节(8位)为单位进行双向的数据传输。半双工:意思一根线有收发功能叫双工,但是一根线只能在一个时刻收或者发,则就时办双工。另一根是时钟线SCL,两条线可以挂多个设备,每个设备都可以作为主机也可以作为从机,但是在同一

2020-06-17 01:33:41 1822

原创 STM32通用IO口原理和八种IO口模式学习

1.GPIO基本结构来自官网数据书册介绍:Each of the general-purpose I/O ports has two 32-bit configuration registers (GPIOx_CRL,GPIOx_CRH), two 32-bit data registers (GPIOx_IDR, GPIOx_ODR), a 32-bit set/resetregister (GPIOx_BSRR), a 16-bit reset register (GPIOx_BRR) an

2020-06-15 23:35:30 3632

原创 linux系统编程-SOCKET通信基础编程-UDP编程实现文件下载

TCP编程实现文件下载基础模板可以参考:linux系统编程-SOCKET通信基础编程(0)-UDP编程linux系统编程-SOCKET通信基础编程(1)-UDP编程服务端程序linux系统编程-SOCKET通信基础编程(2)-UDP编程客户端程序程序原理:就是增加了文件的读写操作服务端程序#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sy.

2020-05-31 19:39:10 197

原创 linux系统编程-SOCKET通信基础编程(2)-UDP编程客户端程序

UDP编程客户端程序#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <errno.h>#include <netinet/in.h>#include <unistd.h>#include <fcntl.h>#

2020-05-31 19:30:22 250

原创 linux系统编程-SOCKET通信基础编程(1)-UDP编程服务端程序

linux系统编程-SOCKET通信基础编程(0)-UDP编程UDP编程服务端程序#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/socket.h>#include <string.h>#include <errno.h>#include <netinet/in.h>#include <u...

2020-05-31 19:28:44 174

原创 linux系统编程-SOCKET通信基础编程(0)-UDP编程

1.UDP简介UDP是一种基于IP协议,(1)无连接的,(2)不保证可靠(3)数据报传输协议。无连接:通信双方在传输数据之前不需要建立连接。(也可以选择连接connect)不保证可靠:不保证接收的数据包顺序与发送的数据包顺序一致,也不能够发送的内容与接收到的内容一致。数据报:数据是分包的,有头有尾。发送一次接收方需要接收一次,这样UDP则就是有边界的数据包,而TCP数据则是连续的。发送一次,接收方需要接收一次。2.UDP基本程序介绍3.服务器端创建流程3.1创建socke

2020-05-31 19:25:55 380

原创 linux系统编程-SOCKET通信基础编程-TCP编程实现文件下载

TCP编程实现文件下载基础模板可以参考:linux系统编程-SOCKET通信基础编程(0)-常用数据结构linux系统编程-SOCKET通信基础编程(1)-TCP客户端创建linux系统编程-SOCKET通信基础编程(2)-TCP服务端创建程序原理:就是增加了文件的读写操作TCP服务端代码#include <stdio.h>#include <sys/types.h> /* See NOTES */#include <sys/sock..

2020-05-31 19:10:02 352

原创 linux系统编程-tftp服务配置

1.查看是否安装tftp查看是否已经安装了tftp服务器:netstat -a | grep tftp表示已经安装:udp 0 0 *:tftp *:*1,安装tftp服务器及客户端$ sudo apt-get install tftpd-hpa tftp-hpa2.配置tftp服务2,在/home/[用户名]/路径下创建一个文件: tftpboot 修改tftp目录权限,运行命令: chmod 777 ./tftpboot 3,修改tftp的配置文件 $ sudo vi

2020-05-29 00:01:33 288

原创 linux系统编程-exec函数族介绍

1.exec函数族提供了一种在进程中启动另一个程序执行的方法。它可以根据指定的文件名或目录名找到可执行文件,并用它来取代原调用进程的数据段、代码段和堆栈段。这样exrc之后的代码段则不会再继续执行。在执行完之后,原调用进程的内容除了进程号外,其他全部都被替换了。2.如果还想继续执行exec之后的代码段功能,则我们就可以新建一个新的进程,让这个新的子进程,执行exec之后的代码段。1.这些函数都属于exec函数族,后缀不同则参数不同#include <unistd.h>int ex

2020-05-28 23:48:58 330

原创 linux系统编程-SOCKET通信基础编程(0)-常用数据结构

linux系统编程-SOCKET通信基础编程(0)-常用数据结构linux系统编程-SOCKET通信基础编程(1)-TCP客户端创建linux系统编程-SOCKET通信基础编程(2)-TCP服务端创建1.网络地址结构体struct sockaddr { unsigned short sa_family; /* address family, AF_xxx , 2 Byte*/ char sa_data[14]; /* 14 bytes of protoco...

2020-05-24 23:49:02 227

原创 linux系统编程-SOCKET通信基础编程(2)-TCP服务端创建

linux系统编程-SOCKET通信编程(1)-TCP客户端创建1.服务端创建流程1.1创建服务端scoket socket 本身就时一个整型值,相当于一个文件描述符int socket(int domain, int type, int protocol);int server_sock = socket(AF_INET, SOCK_STREAM, 0);//注意这里使用的是 SOCK_STREAM 流套接口1.2设置IP地址信息struct sockaddr_...

2020-05-24 23:35:51 306

原创 linux系统编程-SOCKET通信基础编程(1)-TCP客户端创建

1.客户端创建流程原始套接字SOCK_RAW(WinSock接口并不适用某种特定的协议去封装它,而是由程序自行处理数据包以及协议首部);两个重要的类型是 SOCK_STREAM 和 SOCK_DGRAM。 SOCK_STREAM表明数据象字符流 一样通过 socket 。而 SOCK_DGRAM 则表明数据将是数据报(datagrams)的形式。socket 本身就时一个整型值,相当于一个文件描述符1.1头文件#include <stdio.h>#include <st

2020-05-24 23:27:14 350

原创 linux系统编程-守护进程、后台进程、 精灵进程 、daemon

linux中守护进程又称:后台进程、 精灵进程 、daemon1.特点: 在后台运行的进程,生命周期长,一般情况下在系统开机的时候启动,在关机的时候结束2.作用: 周期性的处理某些事情,或者执行某些任务。3.名词: 进程:PID 父进程:创建子进程的进程PPID 进程组:同类型的进程组成的进程组。PGID 会话组:同类型的进程组成的,SID如何创建一个守护进程4.思路:确定它的人物 和终端脱离关系 确保当前守护进程的依赖目录不被卸载...

2020-05-22 21:35:09 283

原创 linux系统编程-进程间通信-有名管道(mkfifo)

有名管道: 可以实现两个无关系的进程间通信。可以用于统一PC的不同进程之间的通信。 因为在文件系统中是可见的,也就是说可以用路径来指出,因此就是有名管道,也是用的一段内存进行通信,在通信结束后,内容被清空,因此这个文件在文件系统中永远是0,不能使用 seek lseek 。也会支持读阻塞 写阻塞,没有空间写阻塞。遵循先入先出。有名管道使用步骤:创建有名管道。不能用open,因为open只能创建普通文件,不能创建管道文件,在这里使用的mkfifio来创建管道文件,这个文件是专门...

2020-05-22 21:10:46 733

Cmake_opencv_qt记录.docx

QT 与OpenCV 配置的问题与方法-QT5.7+OpenCV3.4.0+Cmake-3.18.1

2020-08-10

RT_Thread基础知识学习汇总.TXT

这个是一份RT-Thread基础知识汇总,如果不想下载也可以参考博客https://blog.csdn.net/yuupengsun/category_9996721.html 也可以参考官网:https://www.rt-thread.org/ 共同学习。勿喷!勿喷!

2020-05-17

空空如也

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

TA关注的人

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