自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++中的显式类型转换

能用。

2025-12-10 16:07:22 935

原创 双指针总结

非常简单的题,一遍过,给出我的丑陋代码;第一种是我的做法,第二个是官方的,两个算法都做到了。感觉我的代码和官方给的题解差不多。似乎都是O(N)。毕竟j是从头到尾走完的,i也是,没有N2这种复杂度,就是我的判断逻辑过于复杂了,没有官方的逻辑那么清晰。你的算法只有在遇到0时才交换,非零之间不会乱序;官方算法将非零按出现顺序写入前面,也不改变顺序。

2025-12-10 14:27:54 769

原创 最长连续序列

开一个容纳最大元素的数组,对于每一个元素,放到这个数据的时候,看左右侧元素是否已经存在,如果单侧存在则加单侧的目前的长度,都存在的话说明自己已经连上了,就加上左右两侧的长度和自己。比如4,1,3,2就是会如图所示。但是边界条件有点麻烦,比如0元素的话,就不用判断左侧元素,只用处理右侧,还有可能最大的元素也不用判断左侧元素。话说可以这样,如果放置的元素可以把两端连接起来的话,新的连续序列的两端依旧去存放这个序列的长度。再放置5的话,5不能看到左侧的连续序列的长度是多少,好像也没办法可以解决这个问题。

2025-12-09 15:19:49 103

原创 C++并发编程(4)——死锁问题

场景一:互斥锁的嵌套获取导致死锁。解决方法是使用std::lock同时锁定多个互斥量。场景二:在持有锁时调用用户代码可能导致死锁。解决方法是在持有锁时避免调用可能获取其他锁的代码。场景三:固定顺序获取锁不一致导致死锁。解决方法是确保所有线程以相同的顺序获取锁。层次锁。

2025-12-09 11:40:27 627

原创 C++并发编程(3)——资源竞争下的安全栈

继承自。重写了what()函数,返回错误信息。const:保证这个函数不会修改对象状态。throw():老式的异常说明,表示函数不会抛出异常(C++11 之后用noexcept,这里是书上经典写法)。以后当栈为空却调用pop时,就会抛出这个异常。

2025-12-09 10:46:19 799

原创 C++并发编程

if (!在单线程empty()为真 ⇒top()一定有元素、不会 UBtop()和pop()连续执行,中间没有别的线程来插刀所以这是安全的代码。

2025-12-07 17:20:36 736

原创 C++之“虚”篇

菱形继承问题发生在多重继承中,当一个派生类同时继承两个类的相同基类时,会导致该基类的成员变量和函数被多次继承,形成多余的冗余数据和不必要的复杂性。虚基类是虚继承的基础。当一个类通过虚继承继承另一个类时,继承的那个类就被称为虚基类。它允许通过基类的指针或引用调用派生类中的重写函数,而不管指针或引用的类型是什么。如果基类有纯虚函数,派生类必须提供一个实现,否则派生类也会变成抽象类,不能实例化。虚继承要求虚基类的构造函数只能由最派生类的构造函数调用。如果派生类没有重写该函数,它会继承基类的实现。

2025-12-02 12:58:05 237

原创 stm32入门(9)

按数据传送方式:按数据传送方向:按数据同步方式:同步传输异步传输:显然同步传输的数据率更高第一部分是引脚:用于发送数据的输出引脚。:该引脚负责将数据发送到外部设备,例如传输给串口外设。:用于接收数据的输入引脚。:该引脚接收来自外部设备的数据,通常用于接收串口数据。:数据接收引脚,仅在单线和智能卡模式下使用。:在这两种模式下,它作为接收数据的引脚。它是一个内部引脚,并没有对应的外部引脚。:请求发送引脚,低电平有效。:在启用硬件流控制的情况下,接收器准备好接收新数据时,nRTS 会变为低电平。

2025-12-01 16:40:41 617

原创 stm32入门(8)

定的外设的优先级低。如果当两个的软件优先级都配置成一样,那么就比较他们在中断向。的 时 候 , 产 生 中 断 , 可 知 中 断 一 次 的 时 间TINT。的中断没啥意义,整个程序的重心都花在进出中断上了,根本没有时间处理其他的任务。的中断优先级分组不仅对片上外设有效,同样对内核的外设也有效。属于单片机内部的外设,不需要额外的硬件电路,剩下的只需一个。当我们比较内核外设和片上外设的中断优先级的时候,定时器的计数器是向下递减计数的,计数一次的时间。量表中的硬件编号,编号越小,优先级越高。

2025-11-24 16:07:53 798

原创 stm32入门篇(7)

GPIO_EXTILineConfig() → 把某个 GPIO 引脚“映射”到 EXTIx 线路,EXTI线路在NVIC初始化中进行了连接配置,至此全套流程打通。NVIC来自EXTI的中断源,有几个是共用一个中断号,在ISR中要做区分。如果允许中断且信号为 1 → EXTI_PR 对应位被置 1。如上代码,先进行全局的优先级分组设置,再进行每个组的赋值!它不是某个中断专用,也不能给不同中断设置不同的分组。→ 输出 1 给后面的中断路径和事件路径。→ 屏蔽中断(即使有边沿也不会产生中断)

2025-11-24 13:40:42 750

原创 stm32入门篇(6)

它的“时钟”可以理解为紧跟系统总线时钟,一直在工作;你做的只是给它配置“访问时间参数”(Latency)和“预取功能”。是一个定时器,用 SYSCLK(或其分频)作为计时源,经常被 RTOS 用来当“系统滴答”。图上 HSE 块只是“接口 + 控制电路”,真正的振荡元件在芯片外。是“独立的日历/时间计时模块”,通常用低速时钟、可掉电保持。:要在板子上焊“石英石头”(晶振)或有源模块 → 外部时钟。:在芯片“肚子里”的 RC,什么都不用接 → 内部时钟。是“时钟和复位管理模块”;真正的“时钟产生器件”在。

2025-11-24 10:51:08 687

原创 stm32入门篇(4)

访问位带别名区的这些字时,就可以达到访问位带区某个比特位的目的。位才有效,所以干脆就把高三位屏蔽掉来达到减去起始地址的效果,初始化结构体赋值,把引脚初始化成浮空输入模式,其中的。对于片上外设位带区的某个比特,记它所在字节的地址为。从按键的原理图可知,这些按键在没有被按下的时候,地址的序号,因为一个位经过膨胀后是四个字。为什么是屏蔽高三位?位带区的某个比特,记它所在字节的地址为。有自己的位带别名区,位带别名区把这。中,有两个地方实现了位带,一个是。的空间的每一个位膨胀成一个。是外设位带别名区的起始地址,

2025-11-23 15:50:35 961

原创 stm32入门(3)

Libraries。

2025-11-23 13:26:35 818

原创 RT-thread(2)

1.1。

2025-11-20 20:34:55 273

原创 stm32入门篇2

这是C语言头文件,包含了STM32F10x系列的所有外设寄存器定义。/* GPIO 寄存器结构体 *//* 外设基地址定义 *//* 外设指针定义 *//* GPIO 配置寄存器位定义 *//* RCC 时钟使能寄存器 */

2025-11-19 20:28:48 1124

原创 stm32入门篇1

进行“对话”。这个协议是ST公司规定好的,Bootloader和上位机软件都必须遵守。

2025-11-19 19:10:14 833

原创 天体赛之座位分配

【代码】天体赛之座位分配。

2025-01-18 22:18:34 128

原创 蓝桥之砝码称重

暴力过了百分之40的数据(心满意足)

2024-12-03 19:54:01 163

原创 Linux网络问题

网卡无法使用:无法解析域名:

2024-10-08 17:33:14 153

原创 Makefile

AR:归档程序,默认值为ar、CC:C编译器的名称。

2024-09-19 09:26:52 313

原创 程序员的自我修养(1)

rela.text是对.text段的重定位表,一个重定位表也是ELF的一个段,这个段的类型就是sh_type就是SHT_REL类型(显然这里我的机器上叫RELA),这里的32机器上,sh_link表示符号表的下标,sh_info表示其作用于哪个段。) 正如前面所说的,段的名字只是在链接和编译过程 中有意义,但它不能真正地表示段的类型。) 段的标志位表示该段在进程虚拟地址空间中的属 性,比如是否可写,是否可执行等。函数签名用于识别不同的函数,就像签名用于识别不同的人一样,函数的名字只是函数签名的一部。

2024-09-18 21:39:12 946

原创 有向图的强连通分量

然后搜索领点,如果领点还没有搜索过,那么就递归进入,然后等到回溯的时候用领点的追溯值更新自己的追溯值(因为领点可以达到的点自己也已i的那个可以达到)。下面的代码就是你在搜索的过程中如果一个点的领点都搜索完了,且这个点的追溯值和时间戳相等,那么这个点就是极大连通子图的代表点了。然后就是极大连通子图的数量加一,通知这个极大连通子图的点都出栈且标号,因为这个点是代表点,所以这个点在栈的最下面,所以循环走到这个点的时候结束,到这个点之前的其他点都是这个极大连通子图的点,这些点也需要标号,标志他们属于哪个点。

2024-07-20 17:15:59 1304

原创 C++之lamda表达式(1)

:lower引用的是<cctype>头文件中的,是全局命名空间中的,而std::lower是std命名空间的,也不是个函数指针。所以在这里就是错误的。这里第四个参数接收一个函数指针,写lamda表达式是对的,下面这样写也是对的。刷CCS-CSP的时候碰到字符串全部转小写的问题,下面给出了它的实现。

2024-07-14 11:14:34 169

原创 资源类dp

假如我们对这些个资源进行分配,分配2和分配4的资源是可以放到分配序列的最后。这里是就是说GPU和CPU1的时间,以及GPU和CPU2的时间之和是小于CPU1或CPU2占用的总时间。这点很好理解,你可以将GPU和CPU1用的总时间加上GPU和CPU2用的总时间中的GPU占用的时间排在一起,这样剩余的CPU所占的时间一定不会有冲突。若已采用分配1和3的任务中,CPU1占的总时间是i,CPU2占用的时间总是j,GPU占用的总时间是k,那么这些任务的所有分配方式中最优分配方式的时间是max(i,j,k)。

2024-07-14 10:58:49 343

原创 C++11新特性(1)

委托构造函数通过成员初始化列表直接调用另一个构造函数,不需要构造函数体内的代码,更为简洁和直接。而在构造函数内部调用其他构造函数则需要在函数体内明确调用其他构造函数或者其它初始化代码。委托构造函数通常更清晰和易读,因为初始化过程集中在初始化列表中;而在构造函数内部调用其他构造函数则可以在构造函数体中执行更复杂的逻辑,但可能会使构造函数变得更加复杂和冗长。委托构造函数是 C++11 标准引入的新特性,而在构造函数内部调用其他构造函数则是更早期就可以使用的技术。

2024-07-12 10:02:31 370 1

原创 整数因子分解

举个很简单的例子,如果n=6 dp[0]=1;因为数的所有因子均被列出,根据算数基本定理,n的一个可以被分解的因子分解出来的因子,一定仍然是n的因子,且这个因子比被分解之前小(显然)。由于每个质数因子都有1和它本身,所以就是dp[0]=1,在循环的过程中,质数的dp数组只会被初始化为1,而合数的dp数组则会被拆解。也就是说,每个合数的本身分解(1和自身,而且这个拆解都是由dp[0]转移过来的,而不是dp[本身],内层循环到j=i就终止了,也就是它本身不会与本身作除法)和拆解在循环过程中都会求到。

2024-07-12 09:09:33 583 1

原创 鱼塘钓鱼问题

这句话就是为了优化,找到第一个大于等于t的下标,因为在池塘间转移的时间不可能大于总的钓鱼时间吧,那还钓啥鱼呀,都去走路吧 这里举个简单的例子吧,假设i从2开始转移,也就是从第二个池塘开始转移,因为第一个池塘c[i]为0,以这个为例子讲转移不够清楚。··这里的f[i & 1][j] = f[(i - 1) & 1][j - c[i]];··第二层循环终止条件是j>c[i],因为对消耗转移时间的池塘来说,j<=c[i]的话收益一定是0,不会再有状态转移,一定要有给下一个池塘分配的时间。

2024-07-12 09:05:10 1811

原创 最大多子段和问题

定义以此为结尾的集合数组,dp[i]指的是以a[i]结尾的最大字段和。个人觉得是因为没有单调性,就像例子中给出来的子序列,我想维护这个连续序列和但是这个值不是单调的,比如和从11走到-4的时候,和会被更新,但是紧接着又增大了。这就破坏了双指针的单调性。这里一直搞混了更新的过程,不是res在降低(遇到负值)的时候就更新res,而是在新的元素假如序列比单独的一个元素的和要小的时候才要更新元素。例如,给定序列 {−2,11,−4,13,−5,−2},它的最大子序列为 {11,−4,13},其各元素之和为 20。

2024-07-12 09:01:10 373

原创 边权并查集之奇偶游戏

可以看出每个点此时维护的都只是和父亲结点的奇偶性,而在路径压缩之后,就是对根节点(此时也就是每个结点的父节点)的奇偶性质(图中未给出)。比方说,假如1是奇,2到它的距离为1,所以2是偶数,3在路径压缩之前是偶数(到2的距离是2),3作完路径压缩之后到1的距离是3,与压缩之前和1结点的奇偶性是一致的。图中也给出了解释,是+=d[fa[x]],因为递归得到的根结点,而d[fa[x]]表示父节点到根节点的距离,加上根节点的距离是没有意义的。最重要的一点是,矛盾一定产生于已经给出的条件,也就是已有的一个集合。

2024-07-12 08:56:56 754

原创 递归路径问题

最近写一个矩阵连乘的问题,在打印括号的时候遇到了难题,不知道括号和序列怎么输出才能得到标准的加括号序列,在网上查到了一个博客发现是对的,在此记录一下,顺便和floyed打印路径的方式作对比,以此来加深对二叉树遍历的理解。记住遇到叶结点的时候直接返回了,不会深入叶结点的空间,而且每个叶结点只遇见一次,所以在叶节点打印值是最合理的。这里给每个中序的地方加上了左括号和右括号,也是对的,但是出现了很多的冗余,因为即使有一个元素也被加上了括号。二是左括号和右括号的时机,分别是在第一次遇到结点,和离开结点的时候加上。

2024-07-12 08:53:06 225

原创 ResNet代码精读

这里提一下一直以来都比较困惑的一个点:虚线残差块有两个作用,一个是改变矩阵深度,如resnet50,101,152的conv_2x的第一层,都是改变输入矩阵的深度,而不改变输入矩阵的宽高。因为输入输出矩阵的宽高是一致的。而且虚线残差块仅出现在每个conv_··x的第一层,因为经过第一层之后,矩阵的深度和宽高都被调整为对应的输出矩阵的宽高,所以后面的都是实线残差结构。这也就是为什么下面的for循环可以直接将剩下的残差块压入。这个残差块和第一个残差块我觉得唯一的区别就是这个残差块多了一层。

2024-07-12 08:45:18 295

原创 acwing排列树

刷acwing的算法进阶指南的时候,看到递归实现排列性枚举,刚好最近也是在上这一块的内容,于是想不看y总的代码敲一遍书上的代码,最后发现书上的排列树代码无法实现“其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。”仔细想想,书上的代码确实只是可以实现排列树的功能,但是和y总的dfs的思想还是有点不同的。答案是对的,但是输出顺序有点差别,算法思想有所不同,暂时未想到把书上的代码转换到答案要求的思路。搜索思想都不同,应该做不到吧。显然对于3,题目要求的输出是。而这个程序最后的输出是。

2024-07-12 08:40:24 293

原创 操作系统的引导

(磁盘文件都是我们写进去的,一开始的引导程序是在磁盘第一个区,加载到内存以后主导权就是在在内存的程序中了,然后执行这段程序,这段程序将读磁盘将loader_entry加载到内存8000处的位置,接着跳转到8000处的位置开始执行,也就是说磁盘第2到第2+64(由代码推断,实际可能没这么大),都是loader_entry的程序。_start标号处的代码就是做了一些简单的初始化。.global symbal的意思是symbal地址处的内容对文件外是可见的,也就是此文件外的程序也可以引用这个标号对应的位置。

2024-07-11 17:20:38 415

USB-RS485 ModBus RTU Helper

USB-RS485 ModBus RTU Helper

2025-12-11

空空如也

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

TA关注的人

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