自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(46)
  • 收藏
  • 关注

原创 git学习

提交代码:git add readme.txt 添加文件到暂存区git commit -m “message” 将暂存区文件全部提交到仓库版本回退:HEAD指向的版本就是当前版本,因此,Git允许我们在版本的历史之间穿梭,使用命令git reset --hard commit_id。穿梭前,用git log可以查看提交历史,以便确定要回退到哪个版本。要重返未来,用git reflog查看命令历史,以便确定要回到未来的哪个版本。管理修改:每次修改,如

2022-03-17 10:27:18 550

原创 共享内存demo

写共享内存的使用流程1.ftok函数生成键值2.shmget函数创建共享内存空间3.shmat函数获取第一个可用共享内存空间的地址4.拷贝数据到共享内存#include <sys/shm.h>#include <stdio.h>#include <stdlib.h>#include <string.h> // 共享内存大小#define BUFFSIZE 8//写共享内存int main(int argc, char *argv[])

2022-03-01 15:47:08 681

原创 使用dlopen打开android内置动态库.so报段错误或非法指令的问题

之前使用gcc进行编译的,运行可执行程序没问题,当用到dlopen会报错解决:需要使用android ndk中名字带android的交叉编译链进行编译,同时所依赖的库需要使用android system/lib内置的

2021-12-04 16:32:24 1109

原创 c++ dynamic_cast学习

static_caststatic_cast< new_type >(expression)static_cast相当于传统的C语言里的强制转换,该运算符把expression转换为new_type类型,用来强迫隐式转换。dynamic_castdynamic_cast< new_type >(expression)dynamic_cast运算符的主要用途:将基类的指针或引用安全地转换成派生类的指针或引用,并用派生类的指针或引用调用非虚函数。如果是基类指针或引用调用的是虚函

2021-09-02 09:48:02 169

原创 c++ inline内联函数

在大的for循环中调用一些小的函数或者算法会消耗大量的栈内存。因为调用一个任意函数都会为这个函数创建栈空间,如果频繁的调用小函数会消耗大量的栈空间,对内存造成很大的压力,甚至会导致内存枯竭。C++为了解决这个问题也就创造了内联函数,也就是inline。#include <stdio.h>//函数定义为inline即:内联函数inline char* dbtest(int a) { return (i % 2 > 0) ? "奇" : "偶";} int main(){

2021-08-30 09:27:26 115

原创 TVM中PackedFun机制学习笔记

为了便于Python和C++混合编程,TVM使用了统一的PackedFunc机制。PackedFunc可以将C++中的各类函数打包成统一的函数接口,并自动导出到Python模块中进行调用,并且也支持从Python中注册一个函数,并伪装成PackedFunc在C++和Python中调用。python调用c++c++中c++中需要调用的函数#include <tvm/runtime/packed_func.h>void MyAdd(TVMArgs args, TVMRetValue* r

2021-08-26 19:35:27 557

原创 数据结构和算法学习笔记

1.二叉树树的概念1.父节点,子节点,兄弟节点A是B的父节点;B是A的子节点;拥有同一父节点的B、C、D是兄弟节点。2.根节点,叶节点没有父节点的节点叫做根节点;没有子节点的节点叫做叶节点。3.高度,深度,层数节点的高度:节点到叶子节点的最长路径所包含的边数(数线段)节点的深度:根节点到节点的路径所包含的边数节点的层数:节点的深度+1(根节点的层数是1)树的高度:等于根节点的高度如下所示:二叉树:每个节点最多只有2个子节点的树,这两个节点分别是左子节点和右子节点,如图1所示。

2021-08-06 15:27:20 91

原创 C++面向对象学习笔记

1.访问修饰符一个类可以有多个 public、protected 或 private 标记区域,成员和类的默认访问修饰符是 private。(1)public修饰的公有成员在程序中类的外部也是可访问的;(2)protect修饰的保护成员变量或函数与私有成员相似,但protect成员在派生类(即子类)中是可访问的;(3)private修饰的私有成员变量或函数在类的外部是不可访问的,只有当前类和友元函数可以访问private成员。访问修饰符在继承的特点(1)public 继承:基类 public,p

2021-08-02 16:25:37 123

原创 Cmake学习笔记

1.安装Cmakeubuntu下使用如下命令:sudo apt-get install cmake2.在已创建好的项目中使用cmake例如项目组成如下:binbuildinclude程序头文件src程序源文件其中,bin文件夹存放项目最终输出的elf可执行文件,build文件夹存放生成的对象文件,include文件夹存放项目中程序的.h头文件,src文件夹存放项目中程序的.c源文件3.编写CMakeLists.txt文件在项目中创建并编写CMakeLists.txt,命令如下:

2021-07-13 21:58:39 368

原创 Git学习笔记

首先熟悉Linux的常用命令cd 路径 // 进入该路径cd .. // 返回上一级目录pwd //显示当前所在路径ls //列出当前目录下的文件ls -a //列出当前所有文件,包括隐藏的touch 文件//新建一个文件mkdir 文件夹//新建一个文件夹rm 文件/文件夹//删除文件1.安装Gitubuntu下输入sudo apt-get install git有可能出现无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无

2021-06-22 23:25:10 89 1

原创 修改endnote参考文献输出格式

1.选择输出样式模板https://cnzhx.net/dl/other/ZZ_MODIFIED_GEEBINF.ENS.zip点击下载,将解压得到的 ZZ_MODIFIED_GEEBINF.ENS 文件放到 EndNote 安装目录的 Styles 文件夹里就可以了。一般为D:\Program Files (x86)\EndNote X7\Styles2.添加到使用中将下载的文件打勾,名字有变化是因为有问题经过了修改,文件安装失败时可以试试下面的解决方法,1)关闭 Office;2)双击

2021-01-04 17:39:11 6351

原创 C语言实现三次样条插值

#include <stdio.h># define MAX_N 20 // 定义(x_i,y_i)的最大的维数 typedef struct tagPOINT // 点的结构 { double x; double y;} POINT; int main ( ) { int n; int i, k; POINT points[MAX_N + 1]; double h[MAX_N + 1], b[MAX_N + 1], c[

2021-01-01 14:59:17 2147 1

原创 c语言指针*和&的使用

&(取地址运算符)是用来取变量的地址。例:&i 为取变量 i 的地址。对于常量表达式、寄存器变量不能取地址(因为它们存储在存储器中,没有地址)。指针运算符*(间接寻址符)与&为逆运算,作用是通过变量的地址,获取存储的内容。例:int i = 1; //定义一个整型变量i,值为1int* x; //定义一个整数类型的指针变量xx = &i; //&i表示取变量i的地址,然后把这个地址赋值给指针变量x,即指针变量x存储着整型变量i的地址printf("d

2020-12-22 17:35:05 2992

原创 Linux字符设备驱动开发流程

1.驱动模块的加载和卸载模块的加载和卸载注册函数如下:module_init(xxx_init); //注册模块加载函数module_exit(xxx_exit); //注册模块卸载函数module_init 函数用来向 Linux 内核注册一个模块加载函数,参数 xxx_init 就是需要注册的具体函数,当使用“insmod”命令加载驱动的时候,xxx_init 这个函数就会被调用。module_exit()函数用来向 Linux 内核注册一个模块卸载函数,参数 xxx_exit 就是需要注

2020-12-17 20:10:48 182

原创 C语言const,static,volatile关键字学习

使用const关键字声明变量还是声明参数,其目的都是为了告诉使用者这个变量或者参数的应用目的。合理地使用关键字const 可以使编译器有效地保护那些不希望被改变的变量或参数,防止其无意中被代码修改。所以使用const关键字可以避免一些不必要的错误。1.使用const关键字修饰的变量可以认为有只读属性const int a=10;int b=0;b=a; (正确)a=b; (错误,编译错误,因为a具有只读属性)2.使用const关键字修饰的变量,在声明时必须进行初始化const int a=

2020-08-21 21:12:37 137

原创 c语言中两整数相除保留小数的方法

今天在stm32编程中遇到两整数相除需保留小数的问题,如下passiveData[1]=upData[1]/360*REDUCTION36;上面这种情况upData[1]/360无法保留小数,导致相乘数据差距太大,需要对其保留小数,解决方法如下:passiveData[1]=(float)upData[1]/360*REDUCTION36;使用float修饰被除数,若要求保留小数点位数多的话可尝试使用double。...

2020-06-07 21:26:07 16901 1

原创 stm32外部中断无法进入问题,单独调试正常

今天用到了外部中断,且要初始化的功能较多,如下图所示。其他功能正常,而添加外部中断初始化后外部中断无法进入,外部中断单独运行正常。解决办法:将外部中断初始化函数放在前面,串口后面,即可正常运行。如下图所示:...

2020-06-01 10:42:07 4185 8

原创 stm32与上位机进行串口通信问题

上位机:pc端使用pyqt下位机:stm32f103stm32发送数据给上位机stm32串口发送数据函数USART_SendData();一次只能发送一个字节(8位),不能超过0xff(255),因此大于255的数据需要拆成几个字节发送。函数实现:void Send_data(USART_TypeDef * USARTx,char *s){ while(*s!='\0') { while(USART_GetFlagStatus(USARTx,USART_FLAG_TC )==RESET

2020-05-18 14:15:33 4276

原创 Linux驱动中私有数据filp->private_data的作用

驱动开发中通常为设备定义一个设备相关的设备结构体,其包含该设备的cdev 、私有数据、信号量、irq等这些信息。驱动开发中通常将文件的私有数据private_data指向设备结构体,在read()、write()、ioctl()等函数通过 private_data 访问数据 设备结构体。为了在同一个驱动支持多个相同设备时,为各个设备准备的数据结构互相不冲突。...

2020-05-05 10:50:20 3765

原创 Linux platform驱动框架笔记

设备驱动的分离,会有总线(bus)、驱动(driver)和设备(device)模型,比如 I2C、SPI、USB 等总线。但是在 SOC 中有些外设是没有总线这个概念的,但是又要使用总线、驱动和设备模型该怎么办呢?为了解决此问题,Linux 提出了 platform 这个虚拟总线,相应的就有 platform_driver 和 platform_device。在使用设备树的时候,设备的描述被放到...

2020-05-04 20:47:16 421

原创 Linux中pinctrl和gpio子系统笔记

Linux驱动讲究驱动分离与分层,pinctrl和gpio子系统就是驱动分离与分层思想下的产物,驱动分离与分层其实就是按照面向对象编程的设计思想而设计的设备驱动框架。pinctrl子系统一般情况下soc的pin设置如下:(1)打开引脚所对应时钟;(2)设置这个 PIN 的复用功能;(3)设置这个 PIN 的电气属性;(4)若该pin设置为gpio,则需设置该gpio为输入或者输出功能;...

2020-05-02 23:06:30 557

原创 Linux设备树笔记

1.dtsi头文件一般.dtsi 文件用于描述 SOC 的内部外设信息,比如 CPU 架构、主频、外设寄存器地址范围,比如 UART、IIC 等等。一般都是使用 SOC 厂商提供好的.dts 文件,我们只需要在上面根据自己的实际情况做相应的修改即可。2.DTC DTS DTBDTS 是设备树源码文件,DTB 是将DTS 编译以后得到的二进制文件,DTC将.dts 编译为.dtb。3.设备...

2020-05-02 22:14:15 152

原创 mysql语句

例如对表table1进行操作选择:select * from table1 where 范围插入:insert into table1(field1,field2) values(value1,value2)删除:delete from table1 where 范围更新:update table1 set field1=value1 where 范围查找:select * from t...

2020-03-31 20:14:39 78

原创 python异常处理try except finally用法

结合finally进行使用,无论输出try语句中的正确代码,还是输出except中的错误信息,finally都会进行输出打印输出,代码示例图下图所示。

2020-03-31 20:02:54 139

转载 使用MySQL Workbench建立数据库,建立新的表,向表中添加数据

https://www.cnblogs.com/sodawoods-blogs/p/4415533.html

2020-03-31 19:36:02 212

原创 Undefined symbol ADC_Cmd referred from adc.o

在stm32工程添加adc.c驱动文件之后报错原因是因为没有添加adc的库文件,而无法具体的实现ADC_Cmd这个函数。需要在外部库中添加库文件。工程中FWLib文件夹下面存放的是 ST 官方提供的外设驱动固件库文件,需要在keil5的mange project items里面的FWLib组里面添加 ST 官方提供的ADC驱动固件库文件,名称为stm32f10x_adc.c...

2020-03-29 16:03:35 2421 1

原创 根据原厂linux内核进行移植

1.修改顶层makefile接在顶层 Makefile 文件里面定义 ARCH 和 CROSS_COMPILE 这两个的变量值为 arm 和 arm-linux-gnueabihf-ARCH ?= armCROSS_COMPILE ?= arm-linux-gnueabihf-2.配置并编译 Linux 内核和 uboot 一样,在编译 Linux 内核之前要先配置 Linux 内...

2020-03-05 20:49:21 420

原创 根据原厂uboot进行移植

1.首先编译原厂ubootmake ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6ull_14x14_evk_emmc_defconfigmake V=1 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j162.把编译得到的uboot.bin烧进板子就可以看到那些部分是支持,那些是不支持的,不支持的...

2020-03-05 19:40:19 2673 1

原创 Linux内核启动流程

Linux内核启动流程(1)内核自解压;(2)初始化静态编译进内核的驱动模块;(3)挂载根文件系统(4)执行第一个用户空间程序。包括配置用户环境和执行服务进程。...

2020-02-21 20:32:51 104

原创 u-boot启动流程

Bootloader 的启动流程一般分为两个阶段:stage1 和 stage21.stage1(1)基本的硬件初始化。包括屏蔽所有的中断、设置 CPU 的速度和时钟频率、RAM 初始化、初始化外围设备、关闭 CPU 内部指令和数据 cache 等。(2)复制 stage2 到 RAM 中。在这里要确定两点:①stage2 的可执行映像在固态存储设备的存放起始地址和终止地址;②RAM 空...

2020-02-21 20:19:49 198

原创 Linux网络编程笔记

服务器在accept()后一直阻塞到客户端connect()进行TCP三路握手。第一次握手:建立连接时,客户端发送 syn 包(tcp协议中syn位置1,序号为J)到服务器,并进入 SYN_SEND 状态,等待服务器确认;第二次握手:服务器收到 syn 包,必须确认客户的 SYN,同时自己也发送一个 SYN 包,即 SYN+ACK包(tcp协议中syn位置1,ack位置1,序号K,确定序...

2020-02-21 13:35:07 179

原创 Linux根文件系统笔记

目录 内容/bin 可执行程序/dev 块、字符设备节点文件/etc 主要配置文件和初始化执行文件/lib 基本的库文件, 茹:C 库,和内核模块(modules)/mnt 挂载点,临时挂载文件系统用/opt 附加的软件包/proc 虚拟文件系统,用于内核和进程通讯/sbin 基本的系统管理程序/tmp 临时文件目录/usr 更多的用户程序,包括X serve...

2020-02-20 23:04:27 97

原创 Linux线程相关笔记

Linux“线程”进程与线程之间是有区别的,不过linux内核只提供了轻量进程的支持,未实现线程模型。Linux是一种“多进程单线程”的操作系统。Linux本身只有进程的概念,而其所谓的“线程”本质上在内核里仍然是进程。Linux中所谓的“线程”只是在被创建时clone了父进程的资源,因此clone出来的进程表现为“线程”。1.创建线程进程被创建时,系统会为其创建一个主线程,而要在进程中创建...

2020-02-19 23:55:57 132

原创 QT UDP客户端和服务器实现步骤

一般在UDP通信中,不存在严格意义上的服务器端、客户端,因为不需要建立连接,可以理解为发送端、接收端。发送端向指定端口发送数据,接收端从指定端口读取数据,反之亦然。为了实现发送端与接收端的双向通信,在每一端需要定义两个端口:发送数据端口、接收数据端口,具体组成如下所示:上图可以看出,发送端将数据发送到指定的发送端口,接收端从制定的接收端口接收数据,这两个端口必须保持一致。反之亦然。客户端...

2020-02-19 15:28:37 3506 1

原创 invalid use of incomplete type 'class timer'

解决方案补充QTimer类的头文件声明:#include <QTimer>

2020-02-17 17:45:09 1213

原创 QT TCP服务器接收不到数据的问题

在QT中编写TCP服务器的程序时,出现了一个小问题。服务器给客户端发送数据正常,但服务器始终接收不到客户端发来的数据。readyRead信号和槽函数返回值也为true。解决办法readyRead信号需要放在nextPendingConnection()函数后面。socket = tcpserver->nextPendingConnection();connect(socket, &...

2020-02-16 21:34:43 5146 5

原创 QT信号与槽connect()函数

connect(sender, signal, receiver, slot);参数:sender:发出信号的对象signal:发送对象发出的信号receiver:接收信号的对象slot:接收对象在接收到信号之后所需要调用的函数如果信号槽不符合,或者根本找不到这个信号或者槽函数,比如我们改成:connect(tcpclient, &QTcpSocket::disconnec...

2020-02-16 17:07:33 282

原创 C++头文件互相包含导致的error: 'xxx' does not name a type

a.h和b.h相互包含头文件会出现error: ‘xxx’ does not name a type的问题解决办法在A.h文件中,声明B类。即在定义A类之前加入如下语句:#include "B.h"class B;同样,在B.h中也同样的操作#include "A.h"class A;...

2020-02-16 15:10:52 2402

原创 :-1: error: cannot open output file debug\robot.exe: Permission denied

???? error: cannot open output file debug\robot.exe: Permission denied应该考虑是否多次运行程序

2020-02-15 22:44:24 2025

原创 C++类定义和使用

c++中“::”为作用域限定符,当在类体中直接定义函数时,不需要在函数名字的前面加上类名,但是在类体外实现函数定义的时候,必须加上类名并且加上作用域限定符。class Led_Ctrl : public QWidget{ Q_OBJECTpublic: Led_Ctrl();private slots:private:};/* 在类体外实现函数定义 */void ...

2020-02-15 21:09:22 389

空空如也

空空如也

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

TA关注的人

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