- 博客(308)
- 资源 (29)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 值得推荐的C/C++框架和库,包含很多开源项目 (真的很强大)
值得学习的C语言开源项目-1. WebbenchWebbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。 下载链接:http://home.tiscali.cz/~cz2...
2019-01-16 16:18:48
4449
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 sizeof用法总结
由于不同位数的操作系统计算结果可能不同,下面是在32位的win7 下计算的。 1 对于直接的调用sizeof,如果是数组首地址,sizeof会输出数组所占地址空间的大小(字节为单位)。如果是一个指针的话,则输出在该系统中地址的字节宽度,即(位宽/8)。#include <stdio.h>int main(){ char a[25]; char *b;...
2018-09-21 08:46:31
1257
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 TCP、UDP数据包大小的限制
1、概述首先要看TCP/IP协议,涉及到四层:链路层,网络层,传输层,应用层。 其中以太网(Ethernet)的数据帧在链路层 IP包在网络层 TCP或UDP包在传输层 TCP或UDP中的数据(Data)在应用层 它们的关系是 数据帧{IP包{TCP或UDP包{Data}}} 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络...
2018-09-04 12:10:55
6289
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 数组元素为0的说明
最近在看UVC摄像头驱动,发现了这几段代码:for (j = 0; j < npackets; ++j) { urb->iso_frame_desc[j].offset = j * psize;//iso是实时的意思 urb->iso_frame_desc[j].length = psize; }跟踪iso_frame_d...
2018-06-08 16:10:25
4236
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 OneNET学习资料汇总帖(2018年5月16日)
OneNET接入例程资源汇总:(一)介绍学习资料汇总1.老司机告诉你OneNET3.0是什么http://open.iot.10086.cn/bbs/forum.php?mod=viewthread&tid=667&extra=page%3D12.OneNET3.0私有协议设备接入快速入门(一)http://open.iot.10086.cn/bbs/thread-710-1-1....
2018-05-14 19:11:10
2485
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 在虚拟机里新建一个20G的硬盘,如何把他挂载在 /work 目录上
目的:在虚拟机里新建一个20G的硬盘,然后想把他挂载在 /work 目录上/dev/sda (系统盘)/dev/sdb (数据盘)/dev/sdc (数据盘)/dev/sdd (数据盘)/dev/sde (数据盘)1、查看文件系统是否已挂载:df -lFilesystem 1K-blocks Used Available Use% Mo
2018-01-01 19:37:50
3544
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 C语言中 || 和 &&
|| 或操作,|| 为界将表达式分为两部分,他会先算前一部分,如果前一部分为真,他将停止运算,如果为假,他才会算第二部分,你这里第一部分就为真了,第二部分当然也就不会算了。例如: a || b ,只有在前一个条件a为假,才会去判断条件b ;若条件a为真,则条件b不会执行&&且操作 ,&&为界将表达式分为两部分,他会先算前一部分,如果前一部分为假,他将停止运算,如果为真,他才会算第
2017-12-21 21:36:05
66654
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 ubuntu版本很老,apt-get update更新失败时(W: Failed to fetch ...)------如何创建新的sources.list
在这个网站创建新的sources.listhttp://repogen.simplylinux.ch/1. 选择国家2.选择相邻的ubuntu版本3.选择"Ubuntu Branches"4. 生成sources.list5. 把得到内容替换到/etc/apt/sources.list6. sudo apt-get update
2017-12-09 13:31:19
994
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 apt-get update 更新失败----如何清除破损而且陈旧的PPA仓库 (W: Failed to fetch http://ppa.launchpad.net/jonathonf/pyt)
问题:我试着通过运行apt-get update命令来再次同步包索引文件,但是却出现了“404 无法找到”的错误,看起来似乎是我不能从先前添加的第三方PPA仓库中获取最新的索引。我怎样才能清除这些破损而且陈旧的PPA仓库呢?Err http://ppa.launchpad.net trusty/main amd64 Packages 404 Not FoundErr http://
2017-12-08 18:39:16
11665
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 自旋锁和互斥锁的区别
自旋锁和互斥锁的区别POSIX threads(简称Pthreads)是在多核平台上进行并行编程的一套API。线程同步是并行编程中非常重要的通讯手段,其中最典型的应用就是用Pthreads提供的锁机制(lock)来对多个线程之间的共享临界区(Critical Section)进行保护(另一种常用的同步机制是barrier)。Pthreads提供了多种锁机制:Mutex(互斥量):pthread_m...
2017-11-25 21:21:50
7956
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 二级指针如何分配动态内存并赋值
//二级指针如何分配动态内存并赋值#include #include int main(void){ int **p = NULL; //最好是显式初始化这个二级指针 以防不测 int m, n, i, j; printf("请输入数组的行数和列数:\n例如格式:5,6 :代表5行6列\n"); scanf("%d,%d", &m, &n); p
2017-10-21 16:44:34
3306
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 TIM_GetCounter与TIM_GetCapture1的区别
/** * @brief Gets the TIMx Input Capture 1 value. * @param TIMx: where x can be 1 to 17 except 6 and 7 to select the TIM peripheral. * @retval Capture Compare 1 Register value. */uint16_t T
2017-07-11 14:33:43
30757
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 STM32的ADC1采集多条通道,可以不使用DMA功能吗?
类似的问题为什么我采集5条通道的电压,而采集到的值却都是第一条的呢?我什么时候需要使用DMA功能?Ⅰ关于ADC的一些知识STM32的ADC是一种12位逐次逼近型的模拟数字转换器。它有多达18条通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次、连续、扫描或间断模式执行。 ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器
2017-07-07 17:20:02
9776
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 STM32 输入捕获的脉冲宽度及频率计算
输入捕获模式可以用来测量脉冲宽度或者测量频率。STM32 的定时器,除了 TIM6 和 TIM7,其他定时器都有输入捕获功能。以下是对脉冲宽度及频率的计算。1、脉冲宽度如下图所示,采集该高电平脉冲的宽度,只需要进入输入捕获上升沿检测,记录当前的发生上升沿时的CNT值,再进行输入捕获下降沿检测,也记录当前发生下降沿时的CNT值,两次CNT值的差值再根据计数的频率就可以算出脉冲的宽度。
2017-06-29 15:01:43
53031
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 单片机串口通信原理和控制程序
我们前边学串口通信的时候,比较注重的是串口底层时序上的操作过程,所以例程都是简单的收发字符或者字符串。在实际应用中,往往串口还要和电脑上的上位机软件进行交互,实现电脑软件发送不同的指令,单片机对应执行不同操作的功能,这就要求我们组织一个比较合理的通信机制和逻辑关系,用来实现我们想要的结果。本节所提供程序的功能是,通过电脑串口调试助手下发三个不同的命令,第一条指令:buzz on 可以让蜂鸣
2017-06-17 16:35:15
6756
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 linux getline()函数
getline()函数是什么?百度百科这样解释: getline不是C库函数,而是C++库函数。它会生成一个包含一串从输入流读入的字符的字符串,直到以下情况发生会导致生成的此字符串结束。1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。linux标准C中使用条件:#define _GNU_SOURCE#include 函数声明:ssize_t ge
2017-06-16 20:47:14
4311
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 strcpy()与strncpy()的区别
头文件:#include <string.h>strcpy() 函数用来复制字符串,其原型为:char *strcpy(char *dest, const char *src);【参数】dest 为目标字符串指针,src 为源字符串指针。注意:src 和 dest 所指的内存区域不能重叠,且dest 必须有足够的空间放置 src 所包含的字符串(包含结束符NULL)。【返回值】成功执行...
2017-06-16 17:37:13
29889
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 getenv、setenv函数(获取和设置系统环境变量) 与 环境变量
1、getenv()函数名: getenv功 能: 从环境中取字符串,获取环境变量的值头文件: stdlib.h用 法:char *getenv(char *envvar);函数说明:getenv()用来取得参数envvar环境变量的内容。参数envvar为环境变量的名称,如果该变量存在则会返回指向该内容的指针。环境变量的格式为envvar=value。
2017-05-25 19:57:51
18905
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 C语言itoa()函数和atoi()函数详解(整数转字符C实现)
C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串。1.int/float to string/array:C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。● itoa():将整型值转换为字符串。● ltoa():将长整型值转换为字符串。● ultoa()
2017-04-13 20:56:15
13745
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 linux获取文件大小的函数fstat()
C语言fstat()函数:由文件描述词取得文件状态头文件:#include #include 定义函数:int fstat(int fildes, struct stat *buf);函数说明:fstat()用来将参数fildes 所指的文件状态, 复制到参数buf 所指的结构中(struct stat). fstat()与stat()作用完全相同,
2017-03-03 09:11:27
15430
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 函数指针和指针函数的区别
一、【函数指针】 在程序运行中,函数代码是程序的算法指令部分,它们和数组一样也占用存储空间,都有相应的地址。可以使用指针变量指向数组的首地址,也可以使用指针变量指向函数代码的首地址,指向函数代码首地址的指针变量称为函数指针。 1、函数指针定义 顾名思义,函数指针说的就是一个指针,但这个指针指向的函数,不是普通的基本数据类型或者类对象。函数类型(*指针变量名)(形参列表
2017-01-03 16:04:41
558
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 整数拆分 整合算法
转载请注明出处:// 整数分解然后再整合.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"/** 第一个参数 num :要被分解的整数* 第二个参数 a[] :把整数分解后,存在这个数组里* 函数返回值 : 被拆的整数 的位数*/int myRevert(int num, int a[]) //把整数
2016-06-25 19:12:15
1421
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
转载 什么是C语言结构体字节对齐,为什么要对齐?
一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访问数据的效率问题。假设上面整型变量的地址不是自然对齐,比如为0x00000002,则CPU如果取
2016-06-13 18:48:03
6343
原创 error: unknown type name ‘lv_anim_deleted_cb_t‘; did you mean ‘lv_anim_start_cb_t‘?
出现这个问题,主要原因是lvgl版本不匹配。如果仅仅只有这一个错误,可以在代码里增加下面的定义即可。
2024-08-14 16:25:56
110
原创 usock: No such file or directory
因为运行 ubusd 时,会在 /var/run/ 目录下创建 ubus.sock 套接字文件,而本系统中,/var目录下没有 run目录,故而无法创建 ubus.sock 套接字文件。在搭建T113的tina系统时,运行ubusd报错,“usock: No such file or directory”解决方法:新建文件夹 “/var/run/”,然后再运行。欢迎大家关注我的微信公众号,不定期分享嵌入式开发的相关知识。
2024-06-07 15:16:14
192
原创 遍历 QByteArray 里的每一个元素(一个元素由2各字节构成)
请注意,此示例假设字节数组的长度是偶数,以确保每个元素由两个字节组成。如果字节数组的长度不是偶数,您可能需要根据实际情况进行适当的处理。上述代码通过循环以步长为2遍历字节数组,并使用。方法获取两个字节的子数组。函数将这两个字节转换为相应的类型,例如。还可以使用 Qt 提供的。函数进行字节顺序转换。
2023-07-22 13:47:10
1253
原创 c++构造函数是 protected 属性,如何实例化
请注意,上述方法都是通过绕过 protected 访问控制来实例化对象。在使用这些方法时,需要谨慎考虑设计和安全性,确保只在必要的情况下使用。1. 在派生类中实例化:由于派生类可以访问基类的 protected 成员,因此可以在派生类的构造函数中调用基类的构造函数来创建对象。2. 使用工厂函数:可以在类的友元或其他类中编写静态工厂函数,该函数可以访问受保护的构造函数并返回类的实例。
2023-07-19 15:10:28
551
原创 c++类里有纯虚函数,那么这个类就不能实例化
抽象类的主要目的是作为其他类的基类,为派生类提供接口和规范,并强制要求派生类实现特定的功能。因此,抽象类只能作为基类来使用,提供一种抽象的概念。抽象类不能直接实例化(即不能创建抽象类的对象),因为它们存在未实现的纯虚函数。纯虚函数是在基类中声明的没有具体实现的虚函数,通过将其赋值为0来定义。总结来说,包含纯虚函数的类(抽象类)不能直接实例化,但可以被作为基类,通过派生类来实现和使用。需要注意的是,在派生类中,必须实现基类中的所有纯虚函数,否则派生类仍然会被视为抽象类。
2023-07-19 14:52:11
911
原创 QT与OpenCV开发常用的图像格式转换函数:QImage转Mat、Mat转QImage、QImage转IplImage、IplImage转QImage
上述代码提供了常见的图像格式转换函数,可以在 Qt 和 OpenCV 之间进行图像格式转换。3. QImage 转 IplImage(需要包含。4. IplImage 转 QImage(需要包含。
2023-07-05 09:15:35
1558
原创 c++ lamda表达式
Lambda表达式在现代C++编程中非常常用,它能够简化代码、提高可读性,并且可以与标准库中的算法和容器等一起使用。您可以根据具体的需求来灵活地使用Lambda表达式。C++ Lambda表达式是C++11引入的一种函数对象,它提供了一种方便、灵活的方式来定义匿名函数。Lambda表达式常用于函数式编程风格和STL算法中。:捕获列表,用于指定外部变量的访问方式。:返回类型,指定Lambda表达式的返回类型。:函数体,指定Lambda表达式的执行逻辑。:参数列表,指定Lambda表达式的参数。
2023-06-30 15:34:07
292
原创 派生类赋值给基类(向上转型)
需要注意的是,基类对象只能访问派生类中基类部分的成员函数和成员变量,无法访问派生类独有的成员。如果需要访问派生类独有的成员函数或成员变量,需要进行向下转型(downcasting)操作,并确保类型的安全性。在面向对象编程中,派生类是基类的扩展或特化。通过继承关系,派生类会继承基类的属性和方法,并且可以额外定义自己的属性和方法。在C++中,可以使用指针或引用将派生类赋值给基类类型的变量。这样做是为了保持类型兼容性和语法的一致性。
2023-06-25 13:44:49
301
原创 C++友元函数和友元类
在 C++ 中,我们可以通过使用friend关键字来将一个函数或类声明为另一个类的友元,从而获得访问该类中私有成员的权限。
2023-06-21 16:12:25
329
原创 std::is_same<T, int>::value 含义
它的返回值是一个布尔类型的常量表达式,在模板实例化时就已经确定了,它可以被用作条件编译或者对类型进行选择性编译。头文件中,提供了在编译期间对 C++ 类型进行查询和转换的功能。,它使用更为简便,可以在 C++17 及以后的版本中使用。是 C++11 引入的类型特征之一,它们都定义在。是一个 C++ 模板元编程中的类型特征,在这个代码示例中,如果调用。函数时传递的参数类型是。
2023-06-21 15:03:53
295
原创 使用std::function 来实现回调函数、委托的功能
在C#语言中,委托(Delagate)可以看做函数指针的更高级抽象,它允许方法的选择器(Selector)与特定类型安全签名相匹配的方法进行关联,从而实现动态调用、反射、事件等功能。来实现委托,我们可以将不同的函数作为可选项传递给一个类的方法,从而实现动态选项。当然,这只是一个简单的示例,实际上委托可以实现更复杂的功能,例如事件、反射等。在函数的实现中,我们打印出一条简单的消息,然后调用传递进来的回调函数,并传递给它文本参数。,这个函数接受一个字符型指针参数,并打印出这个字符串。函数,并输出计算结果。
2023-06-20 14:26:14
967
原创 c++ std::function的使用
是 C++11 引入的一个非常有用的函数对象封装类,它可以存储和调用各种类型的可调用对象,包括函数指针、函数对象、成员函数指针、Lambda表达式等等。当我们需要将一些可调用对象存储在一个容器中,或者将它们作为其他函数的参数时,,然后使用函数指针、Lambda表达式和成员函数指针分别初始化了三个。来进行引用封装,以确保被封装的对象可以在 调用时访问。注意到,函数指针和成员函数指针需要使用。在上述示例中,我们分别定义了一个普通函数。还可以用来实现回调函数、委托等功能。、一个有返回值的函数。
2023-06-20 14:21:36
448
原创 c++自定义线程类实现线程的启动与停止
的线程类,其中包含了启动线程、停止线程、运行线程等方法。在启动线程时,我们获取了一个互斥锁来保障线程安全,只有在线程没有运行时才启动线程。在停止线程时,也要获取互斥锁来保障线程安全,并且在线程运行时才进行停止操作。,也可以自定义一个线程类来管理线程的生命周期。来表示线程执行的代码,这个函数需要在自定义的子类中实现。例如,在上述代码中我们定义了一个名为。这样可以保证线程在被销毁之前一定会被停止,避免了程序崩溃等问题。对象时,我们通过判断线程是否正在运行来决定是否调用。在上述代码中,我们定义了一个名为。
2023-06-16 10:42:23
503
原创 用ffmpeg解析mp4文件得到时长、比特率、音视频信息
在实际应用中,可以将上述代码封装成一个函数,方便地在程序中调用,达到自动化处理多个视频文件的目的。等,获取MP4文件的视频流和音频流信息,并将结果存储到。结构体和FFmpeg库函数。
2023-06-16 09:45:58
2708
原创 avformat_open_input 调用失败的原因
如果你要打开的文件格式不支持,就会导致打开文件失败。你需要确保要打开的文件格式被 FFmpeg 支持,并且已经注册过相应的输入格式。是 FFmpeg 库中的一个函数,用于打开音视频文件或网络流并进行解封装操作,返回值为一个表示打开的文件或流的 AVFormatContext 结构体指针。的第一个参数是文件路径或 URL,如果路径或 URL 错误、不存在或者无法访问,就会导致打开文件失败。函数不能重复打开同一个文件或网络流,这会导致打开文件失败。如果忘记了调用此函数,就会导致打开文件失败。
2023-06-16 09:39:13
5058
2
使用 C++11 和 OpenCV 实时读取摄像头的示例代码,并通过按下 "z" 键和 "x" 键在图像中心点进行数码变焦
2023-07-12
c++11 自定义类实现对图像数据的高效入队与出队操作(线程安全)
2023-07-12
c++11使用opencv自定义类实现绘图(画点、画直线、画曲线、画园、画椭圆、画圆柱体), 绘文字
2023-07-12
Rockchip_Developer_Guide_Linux_IO_DOMAIN_CN.pdf
2021-04-19
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人