自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 9.互斥量的使用

rtt有两个获取互斥量的函数,一个释放互斥量函数:rt_mutex_take() 获取互斥量,rt_mutex_trytake() 无等待、尝试获取互斥量,rt_mutex_release() 释放互斥量。删除互斥量时,如果有线程在等待该互斥量,则内核会先唤醒这些线程(线程返回值是 - RT_ERROR),然后再释放互斥量使用的内存,最后删除互斥量对象。删除/脱离:不再使用一个互斥量时:删除它:rt_mutex_delete(),脱离它:rt_mutex_detach()​ 互斥量是一种特殊的二值信号量。

2024-04-10 16:45:56 411

原创 8.信号量的使用

删除信号量时,如果有线程正在等待该信号量,则内核会先唤醒这些线程(线程返回值是 - RT_ERROR),然后再释放信号量使用的内存,最后删除信号量对象。获取/释放:RT-Thread 有两个获取信号量的函数,一个释放信号量函数:rt_sem_take() 获取信号量,rt_sem_trytake() 无等待、尝试获取信号量,rt_sem_release() 释放信号量。信号量的创建有两种方法:动态分配内存rt_sem_create()、静态分配内存rt_sem_init(),

2024-04-10 16:45:24 382

原创 7.信号的使用

​ 信号的发送者、接收者都是线程,线程对收到的信号,有三类处理方式:第一类:类似中断处理程序,对于需要处理的信号,线程可以指定处理函数,由该函数处理;第二类:忽略某个信号,对该信号不处理;如果线程1在挂起状态收到信号:线程 1 被唤醒,线程 1 先调用信号处理函数,再继续运行之前的代码。如果线程1在就绪状态收到信号:线程 1 再次运行时,先调用信号处理函数,再继续运行之前的代码。屏蔽/使能:如果屏蔽该信号,就该信号不会传达给安装该信号的线程。安装:如果线程需要处理某一个信号,就需要现在线程中安装该信号。

2024-04-10 16:44:54 326

原创 6.邮箱的使用

发邮件有三个函数:rt_mb_send() 发送邮件,rt_mb_send_wait() 等待方式发送邮件,rt_mb_urgent() 发送紧急邮件。收邮件的函数为rt_err_t rt_mb_recv,当邮箱有邮件时,使用收邮件函数,可以从邮箱接收邮件。删除邮箱的函数为rt_mb_delete(),它会释放内存删除邮箱时,如果有线程在等待该邮箱,则内核先唤醒这些线程(线程返回值是 -​ 同样邮箱的删除/脱离也有两种方法:rt_mb_delete(),rt_mb_detach()

2024-04-10 16:44:21 396

原创 5.消息队列

​ 发送消息有三种函数:rt_mq_send() 发送消息,rt_mq_send_wait() 等待方式发送消息,rt_mq_urgent() 发送紧急消息。发送消息时,如果消息队列已满,并且有多个发送线程同时等待发送,这时当接收线程接收一个消息时,就会有一个空闲的位置,如果该消息队列是RT_IPC_FLAG_FIFO,那么就由等待最久的发送线程发送消息,如果该消息队列是RT_IPC_FLAG_PRIO,那么谁优先级高谁先发。rtt使用拷贝值的方法。​ 当队列有消息时,使用收消息函数,可以从队列接收消息。

2024-04-09 22:44:11 841 1

原创 4.调度相关

这个函数非常简单,就是将我们传进去的函数入口当作rt_scheduler_hook,是调度器执行时进入我们的钩子函数,在调度器的钩子函数中有两个参数from_thread和to_thread,前者是调度时上一个线程的名称,后者时调度时下一个线程的名称。系统中可能有多个线程,它们的优先级可能相同、可能不同,RT-Thread 采用的调度策略是:可抢占:高优先级的就绪线程会“立刻”抢占低优先级的线程;​ 在rtt运行中,会不断的切换线程,这由rt_schedule()来实现。

2024-04-09 21:40:22 256

原创 3.空闲线程及其钩子函数

空闲线程及其钩子函数

2024-04-09 21:39:43 295

原创 2.线程的创建

线程的创建

2024-04-09 21:28:23 251

原创 1.RT-THREAD启动流程

RT-THREAD启动流程

2024-04-09 21:24:05 1138

原创 2023.7.8每日一题

因为此题是有序数组,所以可以使用双指针O(n)过,维护两端的双指针,如果总和大于target,右指针左移;小于target左指针右移即可。

2023-07-08 18:08:34 89

原创 2023.7.6每日一题

要求我们把数字拆分成若干个正偶数,且拆分出的数目最多,我们可以从2,4,6开始拆,沿正偶数递增拆,可以保证拆得数目最多,在每拆出一个偶数时,将总数减去它,直到当前数字小于当前所剩最小偶数+当前最小偶数加2就拆不出来了。因为我们从小到大拆的偶数,题目要求是互不相同,记当前所剩最小偶数为i,当前所剩数字为x。如果不能拆相同的数字,就要保证当前数字能拆成i和i+2,所以只要满足x=i+i+2,就可以继续拆。另外如果当前数字是奇数,必不可能全拆成偶数,直接返回即可,否则必能全部拆成偶数相加。

2023-07-08 15:51:23 74

原创 2023.7.5每日一题

可以看出我们是将每个区间的start按照升序在数轴上画出来的,如果此区间的start比上一个区间的end小,即可合并,在合并时start不动,end变成此区间的end和上一个区间的end的最大值(因为会出现此区间被包含于上一个区间包含的情况)。(可以证明一下正确性,我不会证明hhh)ans的最后一行的end=max(ans最后一行的end,当前end)第一步排序还是比较好想的,比较麻烦的就是第二步合并的步骤,还是要多想一下的。先思考一下如果给我们一串终点和起点,如何手算出来。将此区间pushback即可。

2023-07-05 01:06:43 67

原创 2023.7.4每日一题

先对每行排序,再将每行的所有列取最大值,一直加到ans里就行。

2023-07-04 23:54:44 60

原创 2023.7.1每日一题

遍历O(n^2)能过,但可以O(n)过, 维护一个map,如果当前map中没有当前数字,就将target-当前数字和下标存入map中,否则返回当前数字下标和target-当前数字的下标。

2023-07-04 23:49:29 64

原创 2023.6.30每日一题

【代码】2023.6.30每日一题。

2023-07-04 23:45:09 223

原创 2023.6.29每日一题

先处理第一行,先把有2所在的列填上1,如果不够再在任意不为1的位置补1,直到1的个数和upper相等即可。在每次填1的时候记得colsum--。因为第一行每次填完后colsum--,现在只需要在colsum=1的列填1即可。满足这三个条件即可重构此矩阵,但是题目要求输出满足的矩阵,现在就要考虑怎么处理1的位置合理。因为只有2行,所有如果列中有2,那两行中必须都出现1才能凑2。2.colsum中2的个数小于等于upper。在2行n列的矩阵中,所有行相加=所有列相加。

2023-07-04 23:15:55 41

原创 2023.6.26每日一题

当r==k,自然成立,每次都取不同的指数。r>k,无论怎么取,都不可能有r个1。r<k,两个1可以进位为一个1,所以当k>r时,也成立。此时题中有num2,我们不妨从小到大枚举次数k,一次将所有次数的num2减去,再计算1的个数。假设此题没有num2的影响,那么就可以计算num1二进制的1的个数,就是要操作的次数。综上从小到大枚举答案,如果满足t>k且k>=r则k次操作就可以达到。t<k:即使每次取最小2的0次方,k个1加起来都大于t,无解。此时再计算t中二进制1的个数,记为r。t<0:则不可能有解。

2023-06-26 22:59:48 62

原创 2023.6.25每日一题

观察公式可得出,要想使d最小,只需找出最小的(x-x0)和(y-y0)。判断矩形是否和圆有公共点,只需判断矩形上是否存在一点(x,y)满足点(x,y)到圆心的距离大于等于半径,如果满足则说明有公共点,不满足则说明没有公共点。求出最小的(x-x0)和(y-y0)即可得出矩形上的点到圆的最短距离,再与半径比较即可。1.如果x1<=x0<=x2:则(x-x0)min=0。2.如果x1>x0:则(x-x0)min=x1-x0。3.如果x2<x0:则(x-x0)min=x0-x2。同理可求得最小的(y-y0);

2023-06-25 22:50:38 50

原创 2023.6.23每日一题

本题有个小坑点,在max比较时不能直接和strs[i].size()比较,max比较只能比较两个相同类型的,vector.size()是unsigned long long无法直接比较需要强转。

2023-06-23 00:48:08 71

原创 2023.6.22每日一题

dfs模板题,向八个方向搜索,越界或不是水域则返回,为了避免计算重复,搜过的水域置-1class Solution {public: vector<int> pondSizes(vector<vector<int>>& land) { int n=land.size(); int m=land[0].size(); vector<int>ans; fo

2023-06-23 00:01:28 53

原创 20223.6.21每日一题

此题可以通过维护一个栈,将到过的每个房间的钥匙push进去,每次访问栈顶的房间并标记,防止重复进入一个房间,在访问时再将用过的钥匙pop出去即可。其实此题也可以用bfs递归遍历,不过本质上和用栈维护是一个道理。

2023-06-21 23:58:04 209

原创 2023.6.19每日一题

此数要选,因为选了一个x,导致现在模3余数为j,这里的j是怎么来的,记上一次选完后的余数为q,j=(q+x)%3->q=(j-x)%3,防止j-x为负数%3出错,先对x%3再加上3后再%即可。在初始化时,dp[0][0]为0,dp[0][1]和dp[0][2]为-∞,因为这两种是不合法的,没有选数,自然不可能有余数。此数不选,所以此次状态dp[i][j]和上次状态dp[i-1][j]一样。选:dp[i][j]=dp[i-1][(j-x+3)%3]+x;不选: dp[i][j]=dp[i-1][j];

2023-06-19 22:20:52 40

原创 2023.6.18每日一题

此题可以用dfs搜索,以当前位置为0向上下左右四个方向搜索,当前位置为0时,只有当前位置处于矩阵边界时,不满足此岛屿为封闭岛的条件,否则此岛必为封闭岛,现在要做的是去找和它相连的0,把这个最大的封闭岛找出来,并标记,防止在下一次更新当前位置时重复计算。此题只要当前位置是0且不为边界,答案肯定要+1,dfs的作用是将与当前位置相连的所有0标记,防止下次搜索时重复计算。

2023-06-18 20:05:37 40

原创 2023.6.17每日一题

观察得出规律,要切偶数份的切割次数=n/2,要切奇数份的切割次数=n,当n=1时,不用切。

2023-06-17 22:47:46 65

原创 2023.6.14每日一题

因为每次只能填一个数字,在第i步想要前i个都被填过,说明在这一步的所有填过最大的下标等于i,如果大于i,就说明i后面的数字被填过,一步只能填一个,那么必定前i个存在没有被填过的数字。

2023-06-14 22:57:55 53

原创 2023.6.12每日一题

②移动短板:下一次得到的宽度会缩小,但是最短的板子有可能会>当前的最短的板子,所以下一次的储水量可能会>当前储水量。①移动长板:下一次得到的宽度会缩小,并且最短的板子只会<=当前的最短的板子,所以下一次的储水量必定<=当前储水量。现在的问题是,利用什么样的策略去移动双指针呢,既然和板长有关系,就以板子长短来定。由此得出,在移动双指针时,将短板移动,一直去更新ans的最大值即可。现在就是去找出l,r,利用双指针遍历,l=0,r=n-1。和木桶效应有点像,储水量由宽度和最短的那个板决定。

2023-06-12 21:29:07 40

原创 2023.6.11每日一题

题目要求连续节点总和为0,这也就是说对这个链表做前缀和处理时这些连续节点的前后节点的前缀和相同。反过来想,如果有一个节点的前缀和和后面某个节点的前缀和相同,说明中间的和为0,可以删掉。

2023-06-11 23:31:54 41

原创 2023.6.10每日一题

对words提前做好处理,在每个queries中去和整个words对比,模拟即可。

2023-06-10 23:26:27 45

原创 2023.6.8每日一题

先确定当前正方形的起点,循环枚举他的最大边长(边长不超过任一总长且此正方形所在位置还未被覆盖)。循环中,如果满足刚才的条件,就把正方形所在位置填1,并找到下一个还未被填的起点继续dfs。经过观察和样例和数据范围,发现此题不太好找规律,数据范围小,故可以用dfs+回溯解决。2.如果没在1处返回并且当前铺的面积已经等于总面积n*m,便记录答案,返回。1.如果当前的使用的地砖数大于存的最小答案,就可以回溯,不再向下搜。在回溯中,只需要将上一步填过1的地方填0释放即可。

2023-06-08 22:20:57 53

原创 2023.6.7每日一题

假设所有的奶酪都让第二个老鼠吃掉,计算第二个老鼠的总得分sum。因为第一个老鼠还要吃掉k个替换第二个老鼠吃的k个,所以此时就要考虑替换哪k位数可以使sum最大,替换只能是第一只老鼠用第i位去替换第二只老鼠的第i位(一一对应),所以将n位都做差存入differ中,再排序找出最大的前k位数加入sum中即可。更新sum最大值:sum=sum+(max(differ)前k个)

2023-06-07 17:59:51 65

原创 2023.6.6每日一题

同样模拟,遍历之后比较即可。

2023-06-06 20:35:23 80

原创 2023.6.5每日一题

纯模拟,直接上代码吧。

2023-06-05 00:42:09 54

原创 2023.6.4每日一题

其次unique去重并不是删除重复元素,而是把重复的元素放在vector中的最后,unique返回的去重后的尾地址,再将去重后的尾地址~去重的前的尾地址erase。再用size可以获得去重后vector中的元素个数。此题思路很简单,排序后取第一个数和最后一个数的平均值保存,在将第一个数和最后一个数删除,一直循环到数组为空。再统计平均值中不相同的个数(去重)即可。因为unique是去除相邻元素中重复的,所以要先将待去重的vector排序。

2023-06-04 14:24:08 49

原创 2023.6.3每日一题

二:在统计完当前字串长度后,就要开始判断后面是否有相隔一个且相同的字串,如果有且后一个串不为结尾(即后一个串末尾-前一个串开头< 该字母出现的总次数),就用④更新;一:在统计完当前子串长度后,判断此字母出现的总次数和当前字串长度的大小,如果前者大于后者,先用②更新一下(如果有此串后面有串且中间隔一个在后面会再更新一次覆盖掉);④:"aaabaaaba"这种有两组且中间隔一个且后一组不为结束的,更新当前答案为两串之和+1;③:"aaabaaa"这种有两组且中间隔一个且后一组为结束的,更新当前答案为两串之和。

2023-06-04 00:57:54 76 1

原创 2023.6.2每日一题

定义每个words下标如果是以元音开头和结尾的字符串为1,否则为2,那么每个下标的值为0或1,根据题目要求判断区间内所有下标加起来有多少个,因为是多组数据判断,所以可以用前缀和处理从0~n之间的和,在查询时两个区间做差即可。在面对对一组数据需要加和在给定区间中多次读取数据时,前缀和可以大大减小时间复杂度。

2023-06-02 23:27:15 41

原创 2023.6.1每日一题

check中:因为此题给定k,所以要在price中找到k个值满足相邻两个价格>=mid,首先以第一个price为基准向后查找第一个差值>=mid的价格,找到后计数+1,再以此price为基准向后查找,最后判断cnt和k的关系,cnt<k即不满足,甜蜜、度大了;在二分之前首先对price进行升序排序,在二分初始化中:left=0,right=price[n-1]-price[0],mid=(left+right+1)/2,然后在left和right中搜索最大甜蜜值。

2023-06-01 19:17:49 59

原创 嵌入式学习——stm32(3.2)定时中断

因为我们想要的效果是一秒钟记一次数,所以我们的计数频率要为1,也就是说要让要设置ARR和PSC,使得72MHZ/(ARR+1)/(PSC+1)=1,这里ARR和PSC的值可以随意调整,只需要保证两值都在0~65535范围内即可。因为我们的时基单元配置的是1秒钟进入一次中断,所以我们在每次进入中断的时候让num++,就可以达到每秒钟更新一次,按秒计时的功能了,剩下的只需要在主函数里extern num,不断的在oled上更新num的值即可。配置NVIC没什么好说的,选择好对应的通道就可以了。

2023-04-11 17:57:06 265

原创 嵌入式学习——stm32(3.1)定时器基础

从字面来看,定时器就是用来计时的机器, 可以通过计时来触发中断或者事件。定时器的结构看起来很复杂,但在我们应用的时候相对会简单一些,只需要进行一些简单的计算,修改PSC,ARR,CCR的值就可以达到我们想要的效果。

2023-04-11 15:28:37 1960

原创 嵌入式学习——stm32(2.2)中断实验

在上一篇说到了配置外部中断需要依次配置GPIO->AFIO->EXTI->NVIC,现在我们以按键通过外部中断控制灯的亮做例子。

2023-04-10 20:42:19 299 2

原创 嵌入式学习——stm32(2.1)中断基础

在主程序运行过程当中,接到特定的中断触发条件(中断源),就会使CPU停止当前的工作,转而先去中断服务程序,在做完后返回主程序继续执行。如果同时有多个中断触发,为了防止混乱,会根据中断优先级一步一步去完成所有中断服务程序。优先级包括响应优先级和抢占优先级,响应优先级决定谁先进入中断,而抢占优先级决定当前中断是否能被另一个同时挂起的中断抢占。当一个中断正在进行时,如果触发了一个中断优先级高于此中断的中断,会将此中断挂起,去执行更高等级的中断。1.中断当前程序并保护断点2.转入中断服务入口。

2023-04-08 22:36:03 244 2

空空如也

空空如也

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

TA关注的人

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