- 博客(39)
- 收藏
- 关注
原创 FreeRTOS队列好在哪里?--全局变量、环形缓冲区、队列
环形缓冲区作为生产者(producer)和消费者(consumer)之间的一个中间层,解耦了它们之间的直接依赖。比如:从汇编的角度来讲(num++分成三步:读取到寄存器R0,R0进行自加运算,内存再读取回去),一旦在这三步中间被打断,这就是不安全的数据传输。我们可以在这个c文件下定义一个全局变量,多个函数都可以获取这个变量的状态,从而完成自己的功能逻辑。因此,我们引入环形缓冲区(RingBuffer),它的核心是使用双指针w和r表示下一个读/写位置,写操作只对w指针进行修改,这样就是安全的。
2024-07-25 21:00:46
657
原创 【Leetcode笔记】406.根据身高重建队列
时间复杂度要大于O(nlogn + n ^ 2),首先C++里的sort函数的时间复杂度就是O(nlogn),这个排序函数内部并不是单一的快速排序或者是其他的,而是动态改变的,可能一开始数据量较大时先快速排序对半分,等分到后面则使用插入排序;C++的vector是一个动态数组,插入操作是先考虑原来的数组大小够不够,如果不够那就二倍扩容,然后把原数组拷贝到新数组再插入新的元素,所以时间复杂度要大于O(n^2)。首先,按照每个人的身高属性(即people[i][0])来排队,顺序是从大到小。
2024-07-05 20:18:25
444
原创 simplicity studio 5 修改设备电压
工装板的soc额定输入电压为1.5v,而常态下ttl高电平为5v/3.3v,所以需要设定烧录程序时的设备电压。烧录.hex文件快捷方法。
2024-06-05 20:52:03
238
原创 【Leetcode笔记】40.组合总和II
这道题目和39.组合总和不一样的地方在于:数组中含有相同的元素。同样地,结果不能含有重复组合。拿第一个示例来看,如何去重?卡哥使用了两种办法,第一种引入了used数组,在深度搜索中将上一个使用过的元素的used位置置一(即used[i]==true),这样当出现 candidates[i] == candidates[i - 1] 并且 used[i - 1] == false 就可以说明上面提到的第一个path已经完成;
2024-06-01 12:34:43
419
原创 心理应用工具包 psychtoolbox 绘制小球走迷宫
psychtoolbox 是 MATLAB 中的一个工具包,对于科研人员设计实验范式来说是不二之选,因为它可以操作计算机的底层硬件,精度可以达到帧的级别。
2024-05-11 18:20:41
1357
原创 PATH环境变量
例如,如果你安装了一个新的软件,通常需要将该软件的可执行文件路径添加到PATH环境变量中,这样你就可以在任何位置通过命令行启动它。当你在命令行中输入一个命令时,系统会在这些路径中查找对应的可执行文件。总的来说,PATH环境变量在Windows系统中起着至关重要的作用,它确保了用户能够在不同位置执行命令,而无需记住每个程序的具体安装路径。此外,如果系统在所有PATH中的路径都未找到对应的可执行文件,那么系统会显示“命令未找到”的错误信息。当在命令行中输入一个命令时,系统会在这些路径中查找可执行文件。
2024-05-04 09:00:09
670
原创 【Linux-I.MX6ULL裸机学习】中断向量表
代码来自于正点原子阿尔法Linux开发板光盘比如在中断向量表中规定了:在某个地址0x80000A对应着某个中断服务函数,那么在产生这个中断时,就会从0x80000A这个地址去读取中断服务函数,并执行。如果想改变这个地址,也就是要设置地址偏移。具体要做的:需要修改SCB的 VTOR 寄存器为新的中断向量表起始地址。ARM-A7 的中断向量表:你可能会问了:啊?!我的那些外设所需要的外部中断就只有“IRQ interrupt”这一个中断吗?这够吗?
2024-05-04 08:47:21
359
原创 【无线通信开发应用】nRF905数据手册深度解读
希望通过两个stm32、两个nRF905无线通信模块、串口来实现两机通信。但是网络上鲜有NRF905模块的深层解读,故引出此文,主要解读NRF905的官方英文文档,以及部分重要的库函数封装,不涉及功能逻辑,不上传整个工程。
2024-05-01 23:02:55
1377
1
原创 Keil中使用模拟器调试
首先在“魔术棒”选项 -> “Debug” -> 勾选"use simulator"。工程最好存放在英文路径下,否则退出调试时会报错,需要强制退出keil。在 for 循环里执行几次,也就是在buf里写入几个字母。可以看到,buf 的起始地址为0x20000004。来看看 buf 里面现在是什么。打上断点,并且“一路执行”查看变量 buf。
2024-04-29 19:46:15
288
原创 【Leetcode笔记】236.二叉树的最近公共祖先
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。测试代码中 p、q 的定义,不能简单地定义一个根节点,本题适合从下往上遍历,所以使用。
2024-04-22 12:00:12
385
原创 【Leetcode笔记】501.二叉搜索树中的众数
首先,传入的是 a 和 b 的引用,这样可以提高效率,避免复制操作产生临时变量;另外,因为在排序过程中,sort函数会频繁地访问这些参数,通过将参数声明为const,可以保证这些参数在函数执行过程中不会被修改,增强安全性和可读性。给你一个含重复值的二叉搜索树(BST)的根节点 root ,找出并返回 BST 中的所有 众数(即,出现频率最高的元素)。虽然题目对于BST的定义已经违背常识  ̄へ ̄,但依据题意扩展解题思路是有意义的。而全局范围定义的函数就可以不用创建类的实例而直接调用,其次就是只要求出现频次。
2024-04-22 11:30:22
445
原创 【备战蓝桥杯】考前快速大纲
题目要求“使用USB转串口功能完成查询功能:PC端通过串口调试助手向设备发送字符‘X’返回当前频率参数,串口通信波特率设置9600”(13th国赛)。除了要安装串口调试助手,我们还要在CubeMX中打开任意一个USART。EEPROM可以简单理解为是一个掉电不丢失的存储模块,相对于g431,它是一个从机,所以呢,需要用软件IIC来进行主从机的通信。在之前的文章《软硬件对按键消抖》中有提到两种消抖方法:逻辑运算消抖和定时器中断消抖。,可以同时实现按键消抖、长短按以及双击单击(当然,要搭配定时器中断来使用)。
2024-04-02 23:10:00
612
原创 【LeetCode笔记】巧妙写出二叉树前中后序遍历
一条根本原则:一根线从二叉树的根的左部不间断地画到根的右部,要绕整个二叉树一圈。前序遍历,就让每个节点拥有一个左侧的“句柄”;中序遍历,就让每个节点拥有一个底侧的“句柄”;后续遍历,就让每个节点拥有一个右侧的“句柄”。
2024-04-02 11:30:54
530
1
原创 【LeetCode笔记】347.前 K 个高频元素
给定一个非空的整数数组,返回其中出现频率前 k 高的元素。示例 1:输入: nums = [1,1,1,2,2,3], k = 2输出: [1,2]示例 2:输入: nums = [1], k = 1输出: [1]提示:你可以假设给定的 k 总是合理的,且 1 ≤ k ≤ 数组中不相同的元素的个数。你的算法的时间复杂度必须优于Onlogn, n 是数组的大小。题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的。你可以按任意顺序返回答案。
2024-03-31 10:01:57
364
1
原创 【Linux笔记】解读Makefile
在对整个工程进行BSP工程管理之后,驱动、始终、延时等函数的源文件和头文件都放置在了不同的文件夹下,这样在编写 Makefile 的时候每次都需要编写路径,很麻烦。
2024-03-28 16:48:10
324
1
原创 Ubantu安装VS Code失败
不想再折腾更新 glibc 了,既然是库的版本过低,那不妨。3. 进入 root 模式,继续执行第2步。如上图,可以下载历史版本的 VS Code。,即可安装 VS Code。
2024-03-26 21:05:18
930
2
原创 【LeetCode】栈溢出报错
在计算机中,整数类型(如int、long等)有一定的取值范围。当进行加法运算时,如果两个整数的和超过了该类型的取值范围,就会发生溢出,导致结果不正确。为了避免这种情况,可以使用强制类型转换将其中一个或多个操作数转换为更大的整数类型,以确保运算过程中不会发生溢出。这个问题很常见,就是访问到非法内存,一般就是数组越界了。,试图去访问nums[-1]了。,将其强制转换成 long 类型。我们在nums[k]前面加一个。上面这段代码执行出错,这里改完之后继续报错,
2024-02-27 10:37:48
380
原创 windows复制的文件无法粘贴到虚拟机
另外,以上命令均使用了 sudo,sudo(super user do)也就是权限很高。所以首次使用 sudo 时需要输入密码,在一段时间内可能无需再次输入密码。【解决办法】转自博主From now on…【问题描述】windows复制的文件无法粘贴到虚拟机。
2024-02-03 20:25:07
1488
1
原创 下载的KEIL工程打开失败?
【问题描述】从网上下载的keil工程打开失败,显示“read only”。【解决方法】路径不应包含中文 or 该文件夹未解压缩。
2024-01-21 23:58:26
361
1
原创 软硬件对按键消抖
选择哪种方法取决于具体的应用需求和系统资源的限制。在一些简单的嵌入式系统中,逻辑运算的方法可能足够满足要求。在对按键响应时间、稳定性等要求较高的系统中,使用定时器结合中断的方法可能更为合适。在t1产生中断,这时不马上确定按键,而是复位定时器,假设周期时20ms,超时时间为"t1+20ms"由于抖动,在t2再次产生中断,再次复位定时器,超时时间变为"t2+20ms"由于抖动,在t3再次产生中断,再次复位定时器,超时时间变为"t3+20ms"在"t3+20ms"处,按键已经稳定,读取按键值。
2024-01-15 20:26:18
475
原创 【FreeRTOS学习笔记】CHA3 - 任务管理
滴答中断的频率由 configTICK_RATE_HZ 决定,一般情况下,这个值设置为100比较多,对应的时间片就是10毫秒。main() 函数在启动调度器之前创建任务。具体实现如清单3 所示。代码如清单8, 9所示。1.3. 滴答中断(任务调度器)1.0. 相关的 API函数。
2024-01-14 10:11:39
441
1
原创 【备战蓝桥杯】蓝桥杯十四届省赛真题
首先,在时钟树中配置了systick的频率为80MHz;其次,我们需要知道systick的重装载值,也就是下面的SysTick_Type ->LOAD。在HAL库中,会默认生成1ms触发中断。追踪HAL库代码。文件位置“stm32g4xx_hal.c”./***/= 0U)elseelseelse如果想手动调整中断触发间隔,需要修改的是uwTickFreq,stm32g4xx_hal.c中默认设置为1KHz。
2023-12-18 21:59:00
1252
3
原创 【备战蓝桥杯】STM32CubeMX生成代码时报错
配置STM32CubeMX时,由于比赛训练板使用的是STM32G4XX系列,所以需要下载对应的固件库。
2023-11-27 21:13:05
1866
原创 【基础概念】字长为8/16/32/64位?
【基础概念】看到“通用寄存器”章节中,有一句话“通用寄存器包括R0~R12。R0 ~ R7 也被称为低组寄存器。它们的字长全是32位。所有指令(包括16位的和32位的)都能访问它们。” … 一直不太明白‘位、字、字长、字节’等等吧,这些概念的区别,查一查以便后续复习。【基础概念】位、字节、字、字长。
2023-11-16 14:05:24
176
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人