自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 资源 (1)
  • 收藏
  • 关注

原创 C语言贪吃蛇

C语言贪吃蛇

2022-07-22 09:18:23 388 1

原创 CMake 简明教程

CMake基本使用

2022-07-09 22:47:41 930

原创 Qt警告:Missing reference in range-for with non trivial type (QString) [clazy-range-loop]

Qt编程中遇到Missing reference in range-for with non trivial type (QString) 的警告,感到莫名其妙,原始代码如下, QStringList fileList = QFileDialog::getOpenFileNames(this, title, curPath, filter); for (QString i : fileList) { ui->plainTextEdit->appe.

2021-12-16 20:31:48 2673 1

原创 C++虚函数实现原理和虚函数表

C++规定了虚函数的行为,但将实现方法留给了编译器作者。通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针。这种数组称为虚函数表(virtual function table, vtbl)。虚函数表中存储了为类对象进行声明的虚函数的地址。例如,基类对象包含这样一个指针,该指针指向基类中所有虚函数的地址表。派生类对象将包含一个指向独立地址表的指针。如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址;如果派生类没有重新定义虚函数,该vtbl将保.

2021-12-09 21:16:14 769

原创 Linux 服务器socket关闭,客户端为什么还能调用一次send

Linux 服务器socket关闭,客户端为什么还能调用一次send

2021-11-24 19:04:23 2994

原创 fread, fwrite和fflush

fread和fwrite是标准IO,在调用文件IO的基础上封装了用户空间缓冲区。这样可以减少系统调用的次数,在频繁使用IO的场景中减少系统开销。因此,调用fwrite向文件中写入数据时,数据不会立即被写入到文件中,而是先被写入到内存中的缓冲区,当缓冲区满或者调用fclose()或者调用fflush()后才会将内存缓冲区中的数据写入到目标文件中。其实,在调用fflush()后,再次调用fsync()方能保证fwite写入的数据写入到磁盘中。调用fread()会一次性从文件中读出相当多的数据到用户.

2021-11-20 16:07:41 1508

原创 Linux 无名管道使用示例

/** * @file pipe_no_name.c * @author your name (you@domain.com) * @brief 无名管道 * 无名管道用于具有亲缘关系的进程间通信 * @version 0.1 * @date 2021-11-20 * * @copyright Copyright (c) 2021 * */#include <stdio.h>#include <unistd.h>#include <sys/typ.

2021-11-20 15:43:22 290

原创 Linux父子进程的地址空间

Linux不同进程拥有独立的虚拟地址空间。即使是父子进程也是如此。当父进程创建一个子进程时,子进程会复制父进程地址空间中的大部分数据资源,包括代码段、变量和文件描述符等(采用写时复制机制)。因此会有下面有趣的现象,#include <stdio.h>#include <unistd.h>#include <sys/types.h>#include <wait.h>int main(){ char buffer[64] = {0

2021-11-20 14:06:06 3760

原创 VSCODE C/C++最小配置

平台:Ubuntu使用VSCODE 编写C/C++ 代码,需要至少配置好以下三个文件:c_cpp_properties.json, launch.json, tasks.jsonc_cpp_properties.json 用来配置头文件路径,编译器路径,以及使用的C/C++ 标准等。当VSCODE没有生成该文件时,可以使用"Ctrl + Shift + P" 调出命令搜索,输入"C/C++:Edit", 然后点击第一个选项即可打开该json配置文件。{ "configurati

2021-09-10 10:07:47 66667

原创 curl源码编译安装

平台:Ubuntu 20方法一:apt-get使用内置的apt下载工具进行安装,sudo apt-get install curl方法二:从官网下载压缩包在官网可以找到curl的多个版本,http://curl.haxx.se/download/wget https://curl.haxx.se/download/curl-7.55.1.tar.gztar -xzvf curl-7.55.1.tar.gzcd curl-7.55.1./configurema

2021-09-09 15:08:26 70208

原创 C语言实现简单HTTP 服务器

开发平台:Microsoft Visual Studio Community 2019#include <stdio.h>#include <winsock2.h>#include <string.h>#include <io.h>#pragma comment(lib, "ws2_32.lib")/** 网络编程 包含头文件: winsock2.h* 引用库文件: ws2_32.lib*/char r

2021-09-08 18:30:18 69774

原创 sprintf 函数详解

printf函数大家都熟悉,但是printf一般打印到标准输出,在需要整理、格式化字符串时,sprintf就大显身手了。例如,在处理传感器数据时,为了将得到的数据整合成特定的格式通过网络发送出去,char buffer[100] = { 0 };sprintf(buffer, "temperature: %f; humidity:%f\r\n", tempData, humiData);send(clientSocket, buffer, strlen(buffer));又例如,在进行HT

2021-09-08 17:16:16 89639 1

原创 C语言 extern使用

如果在a.c文件中定义了int a全局变量,并且需要在b.c中使用该变量,可以通过在b.c中用extern 声明 int a变量的方式实现,如下,a.cint a;a = fun();b.cextern int a;

2021-06-20 19:35:54 66879

原创 字符串数组与指针 sizeof/strlen 大小区别

#include<stdio.h>#include<stdlib.h>#include<string.h>int main(void){ char ss1[] = "ABCDEFGHIGKLMN"; printf("The contend is:%s\r\n", ss1); printf("The num of mystr is(strlen):%d\r\n", strlen(ss1)); printf("The num of .

2021-06-20 19:29:01 66497

原创 C语言文件读取 判断fopen结果时 犯的小错误

if( (fp = fopen("./demo","r") == NULL ) ){ printf("Fail to open file!\n"); exit(0); }

2021-06-19 13:10:48 66815

原创 将C文件改为CPP,头文件不识别问题

在项目中需要将一个C文件重命名为CPP文件,但是修改名称后缀后,编译器就无法找到头文件中定义的函数了。这是由于编译器对C代码和C++代码的函数名称处理方式不同导致的,使用以下方法le

2021-06-14 15:05:42 69020

原创 RT-Thread 开启软件IIC

使用RT-Thread Studio,点亮软件IIC,

2021-06-14 09:31:29 68160

原创 STM32 PWM 输出绑定与解除 GPIO电平的变化

STM32b

2021-06-03 12:36:52 68245

原创 STM32 PWM输出极性的实验

在PWM模式2中,CNT<CCR时输出无效电平,CNT>CCR时输出有效电平。PWM的有效输出电平在TIMx_CCER寄存器设置。

2021-06-01 13:14:54 3033

原创 STM32 PWM CCR配置解析

在原子哥的PWM输出例程中,感觉对捕获/比较寄存器(CCR)的设置不太合理。原子哥de

2021-06-01 11:53:41 16614 2

原创 VSCODE编写STM32代码配置

VSCODE提供了丰富实用的插件,可以大幅提升编写代码的体验和效率。下面简单说明如何使用VSCODE编辑Keil中导出的代码(仅编辑),消除恼人的报错,将上述Keil目录结构拖动到VSCODE打开,在main函数中,如果添加2、3行的宏定义,下面的代码会提示找不到定义。但是在Keil中我们确实没有2、3行的宏定义,为什么可以成功编译呢?原因是在stm32f10x.h头文件中,当定义了“USE_STDPERIPH_DRIVER”宏定义时,便会引入"stm32f10x_conf.h"头文

2021-04-16 09:41:05 68140

原创 Excel计算BOM物料数量的公式

公式如上。原理为将C2的全部长度减去替换掉逗号后的长度,得到的是逗号的数量,再加1即可。

2021-03-19 09:54:19 6948

原创 Windows与Linux下动态链接库的区别

本文所述基于以下两点,使用CMake进行项目的构建 Windows下使用MinGW32 g++,Linux下使用GNU g++一、WindowsWindows的动态链接库的命名格式为lib*.dll。使用CMake创建动态链接库时,会生成两个文件,比如下面代码是在CMakeLists.txt中描述的依赖关系,在cmake构建过程中,会在上下文规定的路径中寻找“libcurldll.a”、“libbase64.a”,即在前后分别自动添加上“lib”和“.a”。libcurldll.

2021-02-27 19:24:31 67029

原创 MinGW g++与GNU g++的区别——memcpy

#pragma once#include <cstdint>#include <string>memcpy( _base64, cache, 4);在Windows下使用MinGW编译上述代码,没有问题。在Ubuntu Linux下使用GNC g++编译时报错如下,memcpy函数未声明。添加<cstring>头文件即可解决,看来MinGW的函数库与GNU是有差别的。...

2021-02-27 17:09:26 66175

原创 C++自动生成设计资料目录

#include <iostream>using namespace std;int main(){ string folderPath1 = ".\\设计资料\\BOM"; string folderPath2 = ".\\设计资料\\gerber"; string folderPath3 = ".\\设计资料\\silk"; string command; command = "mkdir " + folderPath1; .

2021-02-25 10:46:25 902

原创 记录一个C++头文件包含顺序的小bug

// A simple program that computes the square root of a number#include <cmath>#include <iostream>#include <string>#include "TutorialConfig.h"#ifdef USE_MYMATH#include "MathFunctions.h"#endif如上代码,由于“USE_MYMATH”的宏定义在“TutorialConfi.

2021-02-24 22:25:08 66121

原创 pads的ECO勾选属性对比

如下,在利用网表使用对比/ECO工具时,需要勾选“对比属性”,才能将网表中元件属性的更改信息导入到ECO中。

2021-02-06 18:12:38 67996

原创 STM32F103固件库源码解析——RCC_APB2PeriphClockCmd

RCC_APB2PeriphClockCmd函数用来开启或关闭APB2外设时钟,该函数总览如下,/** * @brief Enables or disables the High Speed APB (APB2) peripheral clock. * @param RCC_APB2Periph: specifies the APB2 peripheral to gates its clock. * This parameter can be any combination o

2021-02-06 15:54:18 18667 1

原创 STM32F103固件库源码解析——GPIO配置

首先,需要熟悉下一些重要的杂散的知识。上图是一个标准的GPIO配置过程。GPIO_InitTypeDef是一个结构体,可以看出,CRL寄存器的每4位控制一个GPIO的工作状态。上面的枚举类型设计得很巧妙,其用低四位代表具体输入/输出模式,低四位右移两位即是对应的寄存器配置,如下:(GPIO_Mode_AIN & 0X0F) >> 2 = 00B(GPIO_Mode_Out_PP & 0X0F) >> 2 = 00B(G

2021-02-06 14:23:45 67566

原创 关于三极管Ube在电路中变化的疑问

主要疑问:如图1,在分析静态工作状态的时候认为Ube是不变的(一般为0.7V),从而求得IBQ,ICQ,UCEQ的值,进而确定电阻元件的参数。但是,江湖上又流传着这样一句话:ui变化引起uBE变化,uBE变化引起iB变化,从而引起iC变化。那么可怕的矛盾来了,不是说Ube是不变的吗,那么交流信号叠加上来后,Ube的电压会改变吗。并且在分压式偏置放大电路的稳定静态工作点的分析中,也存在这样的疑问,Ube为什么会减小。图1 基本共射放大电路图2 分压式偏置放大电路的直流工作电路图3 分压

2020-11-09 18:38:08 14227 7

原创 OpenCV使用Mat创建矩阵并输出

#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>#include <iostream>using namespace std;using namespace cv;//包含cv命名空间int main(){ Mat r = Mat(10, 4, CV_8UC2); randu(r, Scalar::all(0), Scalar::all(255)).

2020-08-21 15:28:31 66999

原创 C++的头文件包含问题

此处记录一个小知识。这是练习代码的项目结构:在Hero.h中包含了#include <string>#include <iostream>当在Hero.cpp与main.cpp中包含Hero.h时,就不用再次包含上述两个头了。(就是不知道这样规范不规范...)...

2020-07-08 21:17:18 66014

原创 C++ 类成员函数可以访问所有类对象的私有数据

在学习C++ Primer Plus的过程中,遇到一个有趣的问题。众所周知,类的私有变量是无法在类外直接访问的,只能通过类的成员函数访问。且看下面一段代码:class Stock{private: double total_val;//这是私有的哦~public: Stock();//默认构造函数 Stock(const char* co, int n = 0, double pr = 0.0); ~Stock();//析构函数 const Stock& topval(

2020-06-22 15:25:29 6228 3

原创 OpenCV入坑--003

贴一下鼠标绘制矩形的代码和效果图。#include <opencv2/opencv.hpp>using namespace cv;#define WINDOW_NAME "【程序窗口】" //为窗口标题定义的宏//---------------【全局函数声明部分】--------------------// 描述:全局函数的声明//-------------------------------------------------------void on_MouseHand

2020-06-13 23:39:34 65992

原创 OpenCV入坑--002

配置好环境后,试一下书中提供的例程代码:#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"using namespace cv;int main(){ Mat srcImage = imread("23.jpg"); imshow("【原图】", srcImage); Mat dstImage; blur(srcImage,dstImage,Size(7,7)); imshow

2020-06-12 14:42:21 66093

原创 OpenCV入坑--001

准备入坑OpenCV,完全是个人兴趣,买了本毛星云老师的《OpenCV3编程入门》,一边学习,一边记录。====================================================================================我下载的是Visual Studio2019,OpenCV版本是3.4.10。开发环境并不是跟书中的一样,所以需要自己做一些调整。我下载的OpenCV没有X86文件夹……所以在配置的时候只能选择X64文件夹里的lib。下载的

2020-06-12 11:28:32 66145

LCD汇编驱动程序

LCD屏幕的汇编版驱动程序,包括了蓝牙控制流水灯的闪烁方式,并有外部中断终止流水灯闪烁,外部按键控制闪烁方式等功能

2018-05-25

空空如也

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

TA关注的人

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