- 博客(53)
- 资源 (1)
- 收藏
- 关注
原创 解决Qt报错:Android deploy settings file not found, not building an APK.
QT技巧
2022-09-02 10:01:48
1986
原创 单片机固件中加入“版本信息”的方法
平时我们写程序,通常都会备注软件版本,那么,怎么在单片机中保存版本信息呢?方法其实有很多,但基本原理都是在指定存储区域(Flash)中写入软件版本信息。实现方法下面就分享一个最常用,也是最基础的小技巧:在Keil MDK环境下,通过软件代码,直接映射到并存储到Flash指定地址。包含:软件版本、编译日期、编译时间,代码如下:#define VERINFO_ADDR_BASE (0x0800FF00) //存放FLASH的地址const char Software_Ver[] __attrib
2022-04-06 21:07:49
2455
2
转载 转载:malloc()详解
侯捷C++内存分配课程总结六:malloc()详解: 文章内容参照于侯捷 C++内存分配系列教程 文章目录 侯捷C++内存分配课程总结六:malloc()详解:前言一、malloc()分配出的内存空间二、内存分配1.内存管理所用到的结构层次2.内存页的划分3.内存分配...
2021-12-08 08:49:32
2383
转载 转载:TCP通信粘包问题分析和解决(完整版)
在socket网络程序中,TCP和UDP分别是面向连接和非面向连接的。因此TCP的socket编程,收发两端(客户端和服务器端)都要有成对的socket,因此,发送端为了将多个发往接收端的包,更有效的发到对方,使用了优化方法(Nagle算法),将多次间隔较小、数据量小的数据,合并成一个大的数据块,然后进行封包。这样,接收端,就难于分辨出来了,必须提供科学的拆包机制。 对于UDP,不会使用块的合并...
2021-09-20 19:42:59
531
原创 C++内存 指针越界检测机制_CrtMemBlockHeader
c++内存 指针越界检测机制_CrtMemBlockHeaderc++的new和delete操作,可以让我们在程序运行中动态的开辟内存空间,但是我们知道,一旦处理不好就会造成内存泄漏。一直有一个疑问,c++为防止(或者说检测)指针越界做了哪些工作?struct _CrtMemBlockHeader_CrtMemBlockHeader :这个结构体,存放了动态申请得到的内存块的各种信息,并且返回到你的指针上面。具体内容如下:typedef struct _CrtMemBlockHeader {
2021-07-23 14:38:08
1082
原创 C++pimpl惯用法(Point Implementation)
C++pimpl惯用法(Point Implementation)私有实现封装方法1.实现一个CSocketClient的网络通讯类SocketClient.hclass CSocketClient{public: CSocketClient(); ~CSocketClient();public: bool Init();private: void fun1();private: //这里暴露了太多与实现细节相关的成员对象 SOCKET m_hSocket;
2021-07-17 21:56:31
340
2
原创 引用,编译器的假象
引用的本质引用的本质是指针常量,指向不能变,但内容可变int x=0;int &r=x;int* const r = &x;编译器的假象下面两个是编译器提供的假像,r实际上指针,4个字节sizeof( r ) == sizeof( x )&r==&xtypedef struct tagS{ int a, b, c, d;}S;void test01(){ double x = 0; double* p = &x; doubl
2021-07-12 16:47:55
150
原创 C语言的宏定义技巧
1.防止头文件重复包含#ifndef COMDEF_H#define COMDEF_H //头文件内容#endif2.重定义类型,可以用宏或者typedef,推荐后者#ifndef BYTE #define BYTE unsigned char#endif#ifndef CHAR #define CHAR char#endif#ifndef WORD #define WORD unsigned short int#endif#ifndef INT16 #defin
2021-07-12 16:22:51
824
原创 基于双向链表的窗口消息管理框架
Manager.h#ifndef __MANAGER_H#define __MANAGER_H#include "rtdef.h"//Manager所需的参数#ifdef MAIN#define VAR_RANGE#else#define VAR_RANGE extern #endif#define configUSE_OPENWINDOW_LOG 0 //0 打开窗口不打印日志 1打开窗口打印日志#define configUSE_CLOSEWINDOW_LOG 0
2021-06-02 23:15:58
415
3
转载 C++: explicit的适用场合以及为什么要使用explicit
C++: explicit的适用场合以及为什么要使用explicitexplicit是个C++关键子,但是关注过它的人远远没有其他关键字的多,但是往往忽略了它,就会在一些不经意的地方造成错误,而花费更多的时间去寻找.看下下面这个例子:#include <iostream>using namespace std;class A{public: A(int i = 5) { m_a = i; }private: int.
2021-01-24 14:12:04
168
转载 转载:QT实用技巧
若该文为原创文章,转载请注明原文出处 本文章博客地址:https://blog.csdn.net/qq21497936/article/details/102478062 各位读者,知识无穷而人力有穷, 所以,要么改需求,要么找专业人士,要么自己研究 长期持续带来更多项目与技术分享,咨询请加QQ:21497936、微信:yangsir198...
2020-12-19 18:21:17
2357
2
原创 Qt 简单的IP输入控件
QT ip输入控件#include <QValidator>QRegExp rx("\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b"); //IP的正则表达式ui->lineEdit_host->setValidator(new QRegExpValidator(rx,this));...
2020-12-19 14:01:09
653
2
原创 Qt 打开窗体时如何回收窗体资源
QT新开窗口时如何回收资源1.QWidget 设置属性,关闭时回收,本质还是在closeEvent中实现,可适用于不需要处理回调函数的状态QWidget *win = new Qwidget(this);//建立在堆上win->setAttribute(Qt::WA_DeleteOnClose);//关闭时回收内存//Qt::WA_DeleteOnClose 55//Makes Qt delete this widget when the widget has accepted the c
2020-12-17 19:57:17
612
1
原创 支持标准Modbus的下位机程序
上位机如触摸屏采用ModbusRTU或ModbusTCP通讯协议与下位机如单片机通过串口或网络通信时,需要解析上位机报文Modbus寄存器读写的单位是字Word,读写Map表元素长度必须为字的整数倍,同时注意使用内存下标对齐时务必注意使用内存按字对齐支持功能码03/06/100x03 读保持寄存器 设备地址 功能码 起始地址 寄存器数...
2020-11-25 17:38:56
726
转载 RTThread中hardfault定位
RTThread中fault定位方法在《RTThread中HardFault_Handler分析》一文中已经分析了RTThread中对于fault中断的处理方法。接下来讲解如何根据错误输出信息对程序出现fault的位置进行定位。rtthrea...
2020-07-28 14:44:47
4759
4
原创 一次关于定时Tick的调试经历
如何使用定时触发某一时间1.先看一个简单的例子,实现LED定时1ms翻转void RefreshLED(void){ HAL_Delay(1000); /*< Do something */ HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_0);}void RefreshLED(void){ static uint32_t TickBase=0; if( HAL_GetTick() - TickBase >= 1000){ Tick
2020-07-08 23:55:31
2852
转载 右值引用、移动语义和完美转发
[c++11]我理解的右值引用、移动语义和完美转发StormZhu关注42018.08.16 20:36:02字数 4,100阅读 32,575c++中引入了右值引用和移动语义,可以避免无谓的复制,提高程序性能。有点难理解,于是花时间整理一下自己的理解。左值、右值C++中所有的值都必然属于左值、右值二者之一。左值是指表达式结束后依然存在的持久化对象,右值是指表达式结束时就不再存在的临时对象。所有的具名变量或者对象都是左值,而右值不具名。很难得到左值和右值的真正定义,但是有一个可以区分左值和右值的便捷方法
2020-05-18 00:07:41
142
转载 STL标准库用法
转载自:https://www.cnblogs.com/CnZyy/p/3317999.htmlC++合理运用STL标准库是非常方便的,对数据结构和一些算法的学习也大有裨益。事实上转载处也是转载自他处,但是感觉总结的很好,当然也同时感谢原创者。互联网就是这么神奇的分享平台……目录 一、...
2020-04-18 20:59:46
899
转载 如何转载博客
前言 对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间里面,当然有人会说我们可以收藏博客啊,就不需要转载,(⊙o⊙)… 也对。。实现 因为我自己当初想转载的时候却不知道该怎么转载,所以学会了之后就把方法写出来,帮助那些想转载却不知...
2020-04-18 20:57:58
127
原创 C++ 模板
模板C++两种模板机制函数模板类模板函数模板建立一个通用函数,函数返回值类型和形参类型可以不具体指定,有一个虚拟的类型来代表,类型参数化建议使用时采用显示指定类型来使用1.语法:template<typename T>函数声明或定义//typename和class都可以,用下面两种方式做区分template<typename T> //函数模板...
2020-04-14 20:32:58
194
原创 STM32 CAN配置
STM32 CAN 配置使用工具:CubeMX硬件:STM32F105RBT61.概述STM32F105x双can,CAN1为主,CAN2为从,使用CAN2必须使能CAN1的时钟,CAN1/CAN2使用共同的筛选器,总计28组。CAN2作为CAN1的从站,CAN1复位是否会影响CAN2?CAN总线关闭之后一定要自主恢复,自动脱离Bus-off状态,重复启动CAN总线错误...
2020-04-07 21:19:56
5663
转载 如何判断线段与矩形有交集(降维法)
如何判断线段与矩形有交集(降维法)判断线段AB是否与矩形范围有交集这里的矩形指的是边与坐标轴平行的矩形,可用x和y上最大最小值表示。判断是否相交,先快速排斥,再做跨立,通过向量的叉积判断矩形的四个顶点是否在线段的两侧,是说明有交集。(如果判断与矩形的边是否有交集的话,可判断线段是否与矩形的每条边是否有交集,线段与线段的交集判断。)这里在介绍另外一种方法,降维的方法:...
2020-01-10 10:56:13
1268
原创 指针常量与常量指针
指针常量 :本质是常量 指针类型的常量指针类型的常量(int *const p)该指针是一个常量,不可改变,必须初始化,指向某个地址之后就不能改变了,指向的地址一定但所指向的内容是可以修改的int a=10,b=20;int *const p = &a;//必须初始化*p = 15;//Rightp = &b;//Errora = 15;//Right常...
2020-01-01 17:00:40
241
原创 Printf用法详解
输入输出函数(printf 和 scanf)是C语言中非常重要的两个函数,也是学习C语言必学的两个函数。在C语言程序中,几乎没有一个程序不需要这两个函数,尤其是输出函数(printf),所以这两个函数必须要掌握。如果在程序中要使用 printf 或者 scanf,那么就必须要包含头文件 stdio.h。因为这两个函数就是包含在该头文件中的。输出函数的功能是将程序运行的结果输出到屏幕上,而输入函...
2019-12-22 19:24:17
804
原创 ASSERT断言使用优化
Assert.h#ifndef __ASSERT_H#define __ASSERT_H#define ASSERT_ENABLE 1U //使能断言检查#define ERROR 0U#if (ASSERT_ENABLE != 0U) #define ASSERT(expr) ((expr) ? (void)0 : _Assert((uint8_t *)__FI...
2019-12-22 19:21:28
154
原创 关于动态内存分配函数的优化
alloc.h#define malloc //不要直接调用malloc#define MALLOC(num, type) (type*)alloc((num)*sizeof(type))extern void *alloc(size_t size);alloc.c#include <stdioh>#include "alloc.h"#unde...
2019-12-22 19:21:03
100
原创 记一次STM32调试经历
先说结论,工程配置注意两点:1."Options for Target"-> "C/C++"->"Optimization:" 工程优化级别是不是太高,调试默认Level 0(-O0)不优化,<default>的优化等级为Level 2(-O2)2."Options for Target"-> "Target"->"IROM1:Start Size"在...
2019-12-22 19:20:48
139
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人