- 博客(80)
- 收藏
- 关注
原创 VBA实现遍历Excel文件将指定的单元格内容拷贝到当前工作簿
选择一个文件夹,遍历其中所有Excel文件,并将每个文件指定的单元格内容拷贝到当前工作簿的目标区域。
2024-12-25 23:41:34
512
2
原创 PPT中添加多个图片
在ppt中插入多个图片并设置图片固定位置和大小在 PowerPoint VBA 中,设置图片大小和位置的单位是。1 点等于,也就是 0.352777 毫米。
2024-12-19 09:29:34
701
原创 串口使用环形缓冲
在串口通信中,使用环形缓冲(circular buffer)是一种常见的方式,用于高效地管理串口接收和发送的数据。环形缓冲的主要优点是它允许数据在缓冲区满后从头开始重新利用,而不需要额外的内存分配,从而提升了性能和资源利用率。
2024-12-04 09:55:29
467
原创 Excel中根据某列内容拆分为工作簿
将上面的内容使用VBA会在当前test1下生成5个工作簿,工作簿名分别为TEST1.xls TEST2.xls TEST3.xls TEST4.xls TEST5.xls。2.由于生成的工作簿的名字是根据筛选内容决定的,所以注意筛选的内容要符合文件的命名,否则会出错,如:筛选的内容是 \\ 这种特殊符号,给工作簿命名的时候会出错。简介:根据A列的内容进行筛选,将筛选出来的数据生成一个新的工作簿(可以放到指定文件夹下),且工作簿名为筛选内容。使用VBA操作后是不可进行撤回的!
2024-11-28 17:25:44
762
原创 printf的宏定义调试代码
如果使用 #define debug_printf(format, ...) printf(format, __VA_ARGS__) 在没有额外参数时,如调用 debug_printf("test\r\n");为了方便调试当我们调用debug_printf()函数时,打印出调用这行代码所在的行数,所以使用了__LINE__宏。在宏定义中使用 ##__VA_ARGS__,这样在 __VA_ARGS__ 为空时自动去除前面的逗号,以避免编译错误。
2024-11-01 11:08:06
216
原创 关于中断和异常的一些理解
异常向量表的理解,每个异常都有对应的异常号码即中断号,根据发生的异常号去异常向量表(数组)里面执行对应的异常服务函数。这段话的表述哪里有问题?总体上是正确的,但可以进一步澄清和细化几个方面,以增强对异常向量表的理解。
2024-09-24 16:08:33
368
原创 stm32启动文件流程
在看启动文件里的汇编代码时候有一些疑惑,这里记录一下。:这行代码通过SPACE指令分配了 512 字节的内存,这段内存的起始地址就是Heap_Mem的地址,表示堆的实际内存空间。:这个符号是在Heap_Mem之前定义的,它的值就是Heap_Mem的地址(即堆的起始地址)。:这是在堆分配的空间之后定义的符号,指向堆的末尾,即,用来表示堆的终止地址。
2024-09-24 15:45:55
414
原创 norflash和nandflash
CPU可以直接访问NOR Flash,并且能够从中执行代码。这使得NOR Flash在嵌入式系统中,特别是在需要高可靠性和快速启动的应用场景中,成为一种理想的存储器选择。与NOR Flash不同,NAND Flash 的访问方式和特性有所不同。尽管NAND Flash在存储容量和成本方面具有优势,但其访问方式与CPU的直接访问存在一些区别。NAND Flash的特点:适合大容量、低成本的数据存储,但不能直接被CPU访问或执行代码。它需要通过控制器管理,并且系统启动时通常需要将代码加载到RAM中运行。
2024-08-26 14:23:14
650
原创 程序计数器(PC)
作用:PC(Program Counter)是一个专用寄存器,用于存储当前正在执行的指令的地址。不过在ARM架构中,它通常指向下一个要取指令的地址,而不是当前正在执行的指令。 ARM7的PC行为: 在ARM7中,由于使用了三级流水线结构(取指Fetch、译指Decode、执行Execute),所以PC的值等于当前执行的指令地址加8。这是因为在执行当前指令时,下一条指令和再下一条指令已经在流水线中被取指和译指。 在ARM7中,PC通常映射到寄存器R15。
2024-08-23 14:50:43
836
原创 excel合并工作博
方法允许选择.xls.xlsx, 和.csv文件。允许一次选择多个文件。.xls.xlsx:在处理完每个文件后,源文件将被关闭以释放资源。
2024-08-14 10:53:28
556
原创 根据某列的数据计算平均值
代码读取K列的值,假设这些值代表行号(例如,K1表示开始行号,K2表示结束行号)。:对于每一对K列的值,计算从起始行到结束行之间的B列的平均值。endRow - 1用来确保范围正确,因为通常计算的是从startRow到endRow - 1的数据。:将计算的平均值输出到D列的相应行中。:如果startRow和endRow是相同的,代码将计算那一行B列的值(避免错误的范围选择)。
2024-08-14 10:52:22
409
原创 excel查找某列包含 | 的行号
Sub FindRowsWithPipeToArray() Dim ws As Worksheet Dim lastRow As Long Dim i As Long Dim outputRow As Long Dim cellValue As Variant Dim results() As Long Dim resultCount As Long On Error GoTo ErrorHandler ' 错误处理
2024-08-14 10:51:17
481
原创 Cortex-M3复位序列
举例来说,如果你的堆栈区域在 0x20007C00‐0x20007FFF 之间,那么 MSP 的初始值就必须是。向量表跟随在 MSP 的初始值之后——也就是第 2 个表目。在此之前初始化 MSP 是必需的,因为可能第 1 条指令还没执行就会被 NMI 或是其。因为 CM3 使用的是向下生长的满栈,所以 MSP 的初始值必须是堆栈内存的末地址加 1。态下执行,所以向量表中的每个数值都必须把 LSB 置 1(也就是奇数)。对于不同的开发工具,需要使用不同的格式来设置 MSP 初值和复位向量——有些则由。
2024-08-01 10:56:07
250
原创 简单滤波算法伪码
限副滤波法 由于单片机系统中可能存在随机脉冲干扰 ,或 由于变送器不可靠而将脉冲干扰引入输入端 , 从而 造成测量信号的严重失真。其基本方法是比较相邻 (n 和n -1 时刻的两个采样值 yn 和 yn -1。然后根 据经验确定两次采样允许的最大偏差。如果两次采 样值yn 和yn -1 的差值超过了所允许的最大偏差 范围 ,则认为发生可随机干扰 ,并认为后一次采样值 yn 为非法值 ,应予删除 ,删除 yn 后,可用yn -1 代替 yn。若未超过所允许的最大偏差范围 , 则认为本次 采样值有效。
2024-07-10 11:06:32
266
原创 git从master分支创建分支
git checkout mastergit checkout -b developgit push origin developgit branch --set-upstream-to=origin/develop develop
2024-06-19 16:46:19
939
1
原创 4.6 继承
C++中的继承是一种面向对象编程的重要特性,允许一个类(派生类/子类)使用另一个类(基类/父类)的成员和行为。关键字,基类的公有成员和保护成员在派生类中仍然是公有和保护的,基类的私有成员在派生类中不可访问。关键字,派生类的所有成员在派生类中都变为私有的,基类的私有成员在派生类中不可访问。关键字,派生类的公有和保护成员在派生类中仍然是保护的,基类的私有成员在派生类中不可访问。从基类继承过过来的表现其共性,而新增的成员体现了其个性。一类是从基类继承过来的,一类是自己增加的成员。下面图示就解释了上面的代码案例。
2023-12-21 21:53:16
893
原创 4.4 友元
Tom类的成员函数,访问了Person类内的私有属性的成员(p_age)所以函数要定义在Person类定义之后。再由于上面1的原因,就造成了Tom类成员函数的类外实现。类的成员函数可以在类的定义之后定义,但是不能在类的定义之前声明为友元。在程序里,有些私有属性 也想让类外特殊的一些函数或者类进行访问,就需要用到友元的技术。因为要在Person类内将Tom类的成员函数做一个友元函数声明。将一个类声明为另一个类的友元。友元函数的声明在类内,但定义在类外。1.要将Tom类的定义放在Person类的定义之前。
2023-12-21 15:15:27
421
原创 4.3 C++对象模型和this指针
this指针是一个常量指针,可以看做const type * this ,指针的指向不能修改,this = NULL这样是错的。每一个非静态成员函数只会诞生一份函数实例,也就是说多个同类型的对象会共用一块代码。C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针。在类的非静态成员函数中返回对象本身,可使用return *this。c++通过提供特殊的对象指针,this指针,解决上述问题。this指针是隐含每一个非静态成员函数内的一种指针。在C++中,类内的成员变量和成员函数分开存储。
2023-12-20 17:29:23
1020
原创 C++知识 抽象基类
抽象基类通常包含至少一个纯虚函数,即一个没有具体实现的虚函数,通过在基类中声明纯虚函数,它强制派生类提供这个函数的具体实现。抽象基类的目的是为了提供一个通用的接口,使得不同的派生类能够共享相似的行为,并通过多态性实现对这些不同派生类的统一处理。初始化来创建纯虚函数,这样的类就成为抽象基类。就是一个抽象基类,它包含一个纯虚函数。通过在类的声明中使用。
2023-12-09 22:57:01
267
原创 C++的继承语法
C++中的继承是构建灵活且可扩展代码的强大工具。通过了解和熟练使用继承语法,开发者可以更好地利用面向对象编程的优势,实现代码的重用和组织。在设计类层次结构时,合理运用访问修饰符、多重继承以及虚函数和多态等概念,将有助于构建高效且易于维护的代码结构。
2023-12-08 22:44:38
166
原创 Qtcreator使用的简单记录
在创建项目的时候,对于基类有3种类型,分别为QWidget、QMainWindow、QDialog。QWidget是它们两个的父类,这个比较简单。Qtcreator使用的简单记录。
2023-12-07 11:58:54
477
原创 busybox制作根文件系统1
由前面了解到,根文件系统里面就是一堆的可执行文件和其他文件组成的,那么其实需要一种工具,负责“收集”这些文件,然后将其打包,给开发者可以直接拿来用。BusyBox就是实现了这样的功能。BusyBox是一个集成了大量的Linux命令和工具的软件,像ls、mv、ifconfig等命令BusyBox都会提供。BusyBox就是一个大的工具箱,这个工具箱里面集成了Linux的许多工具和命令。
2023-11-22 11:29:10
221
原创 uboot移植-野火imx6ull
野火imx6ull pro开发板tftp服务的搭建IMX6ULL开发板参考的是NXP官方的I.MX6ULL EVK开发板做的硬件。Linux的移植要复杂的多,在移植Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动Linux 内核,bootloader有很多,常用的就是 U-Boot。
2023-11-22 11:27:11
684
原创 linux上交叉编译qt库
Qt程序从X86平台Linux移植到ARM平台Linux需要做什么1.在ubuntu上使用qt的源码交叉编译出Qt库2.将编译好的库拷贝到开发板上并设置相应的环境变量(库路径啥的)前两步一劳永逸,做一次就行3.X86上写好程序代码,通过交叉工具链进行程序的交叉编译,(动态)链接交叉编译的Qt库,或者厂商提供的Qt-sdk(友善),总之不能直接用开发板文件系统里的Qt库,那个是在arm上运行的4.程序拷贝到开发板上运行。
2023-11-20 15:07:41
1631
4
原创 linux上安装qt creator
下载地址为:http://download.qt.io/archive/qt/根据自己的需求选择Qt Creator版本,这里我下载的是5.12.9,如下图所示:在ubuntu上可以使用wget命令下载安装包:2 Qt Creator 的安装2.1 给安装包添加执行权限输入下面命令给安装包添加执行权限。输入以下命令进行Qt Creator安装,默认会将qt安装在/opt目录下出现下面这种错误:是由于我在vscode编辑器中安装qt遇到的,直接在Ubuntu上执行,就条命令执行上面的命令会出现如下
2023-11-20 14:42:55
2545
4
原创 git diff相关命令
git diff此命令比较的是工作目录中当前文件和暂存区中的文件差异,也就是修改之后还没有暂存起来的变化内容。因为后续要将工作目录中的文件添加到暂存区。
2023-11-18 21:39:40
343
原创 执行make menuconfig问题的解决
在终端输入以下命令执行。在终端输入上面命令执行时,没有成功运行,出现了如下的问题。出现这个错误提示意味着在运行命令时,系统找不到 ncurses 库。ncurses 是一种文本用户界面(TUI)库,提供了开发和使用 TUI 界面所需的工具和功能。在 Linux 系统上,很多命令行工具和系统管理工具都依赖于 ncurses 库来实现 TUI 界面。
2023-10-12 13:40:23
2573
原创 什么是读写锁
读写锁有3 种状态:读模式下的加锁状态、写模式下的加锁状态和不加锁状态,一次只有一个线程可以占有写模式的读写锁,但是可以有多个线程同时占有读模式的读写锁。因此可知,读写锁比互斥锁具有更高的并行性!
2023-09-22 20:43:24
167
原创 报式套接字通讯实例
被动端(先运行)1、取得SOCKET2、给SOCKET取得地址3、收/发消息4、关闭SOCKET主动端1、取得SOCKET2、给SOCKET取得地址(可省略)3、发/收消息4、关闭SOCKET。
2023-09-22 18:02:20
195
原创 令牌桶C语言代码实现
cps 每秒钟传输字节数burst 令牌桶内最多能传输的字节数,token的最大值token 令牌的个数之前是一个令牌(token)对应一个字节,现在将一个token变为一个cps,cps是解码速率,每攒到一个令牌,就token+=cps如果需要不同的速率,使用不同的令牌桶,将令牌桶存储在一个数组中。
2023-08-23 20:56:02
441
gcc-linaro-4.9.4-2017.01-x86-64-arm-linux-gnueabihf
2023-10-25
gcc-arm-8.2-2018.08-x86-64-arm-eabi.tar.xz 适用于linux 64位
2023-06-01
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人