- 博客(99)
- 收藏
- 关注
原创 P8.3项目——不要一次性解决所有的矛盾
测试来数据AI读了分析了这正是这个 bug 的要害:"开始发一行"不等于"这一行的内容已经定下来了"。帧首唯一冻结的东西是长度(strlen 在调用那一刻算好),字符是一个一个回白板去取的。第 3 行的逐字节明细(实测锚点 + 推算)字节 内容 写进 DR 的时刻 说明0 T 1632 µs 实测帧首1 a ≈1634 背靠背(DR 和移位寄存器都是空的)2 s ≈1719 每字节 86.8 µs。
2026-10-15 13:43:34
28
原创 8.2 学习探索
又忘记启动Task,写完Task先启动养成习惯,再去详细代码。Task都要for(;;){ }要一直运行sprintf();#include <stdio.h>要引,这个查函数的时候明白了而不是const char *(原来想的就是什么类型发什么类型接受,但是有的是虚拟类型,涉及底层,绝对不是什么抽象思想能明白的,就像同样不变量希尔伯特的就和群论的完全不是一个东西)Transmit和PrintString只是中间类型转换,本质上是复制//HEAP_SIZE 哪里没有调大。
2026-10-11 15:07:16
80
原创 8.1项目错和思考
KeyTask for循环一直狂扫,扫到了其中对应的信息就发送信号,自己阻塞。(KeyScan因为Task已经是for循环持续运行的,1所以不用for循环也因此2不能独自有previous,要传递地址共同修改,只是返回是否检测到运行了,3有和没有都要返回状态,3是经典的模板了)MonkeyTask没接受到信号前阻塞,接受到之后开始运行把信息对应。没有启动,之前那么多都只是简单的背诵代码语句。记得养成好习惯,先声明再写函数,改动的也要一起改。任务要持续运行像进程一样,要开启运行。
2026-10-10 11:27:51
149
原创 STM32 + FreeRTOS 排错复盘:一次编译失败背后的 9 个坑
一次编译报错(2 errors, 7 warnings)引发排查,最终共挖出 9 个问题,覆盖编译错误、运行时错误、硬件配置错误三类。// 正确:前置声明。/* 错误:CarTask 在第 92 行调用,PrintString2 定义在第 115 行,中间没有原型声明 */API 命名规范不熟、凭记忆写(1、6、7、8):FreeRTOS x/v 前缀约定、HAL 函数全名、驼峰大小写。C 语言基础概念没打通(1、2、3、9):文件作用域、指定初始化器、函数原型、指针 vs 对象。// 正确:变量用 .
2026-10-09 11:28:16
182
原创 项目7.2 低级错误
const char *这的const是因为Transmit不会里面传的就是const类的。这里是“,”隔开都不知道。已全部还原,文件恢复到你编译时的原样,抱歉擅自动手。下面只解释问题,不改文件。C 里重复指定符以最后一次为准,结果是引脚号被塞进了端口指针、真正的。前两处修改当时未生效,只有第 120 行被改了,现在还原。好的,我先查看当前文件状态,再把已改动的地方还原。(对照你 34–38 行的结构体定义,字段是。等后面真正定义它时,发现定义是。
2026-10-09 11:21:08
200
原创 FreeRTOS 玄学崩溃深度复盘:任务创建顺序不同就死机?竟是 SPI DMA+栈溢出导致的隐性内存踩坑
做 STM32+FreeRTOS+SPI-LCD 项目时,我遇到了一个极其典型、网上极少讲透的玄学 Bug任务优先级完全不变、业务代码完全不变,仅仅调换两行任务创建顺序,系统就会随机卡死、LCD 死机、高优先级任务失效。关闭 SPI DMA(阻塞SPI)完全正常,开启 SPI DMA 必现崩溃。本文完整复盘根因、区别误区、拆解 DMA 触发机制、内核配置隐患,彻底根治这类 RTOS 随机死机问题。
2026-10-07 16:11:04
258
原创 FreeRTOS 玄学Bug:调换任务创建顺序,程序时而正常、时而死机(栈溢出内存踩踏深度复盘)
过小的任务栈是极度危险的,32word属于极限赌博,无任何容错空间;FreeRTOS 栈溢出大多不崩溃、不报错,只静默篡改内核对象,产生随机玄学Bug;任务创建顺序改变堆内存排布,直接决定溢出踩踏的对象,是“时而正常时而异常”的根本原因;持续运行、无阻塞的任务,栈溢出概率远大于休眠阻塞型任务;调试阶段必须开启栈溢出检测,杜绝隐性内存踩踏Bug。
2026-10-07 16:03:51
445
原创 FreeRTOS LCD
列宽 179−60+1 = 120,行高 239−80+1 = 160,正好对应 120×160 的图片(屏幕坐标系里"列=宽=120、行=高=160")。初始化代码写完,先丢了一张 100 像素的小测试图进去——红绿各半,屏幕乖乖分了两色,看起来一切正常。SPI 这种"传一个是一个"的接口,参数类型决定了天花板,天花板不撞上去是看不见的。改一个不动,会让人误以为"不是这里的问题",转头去别处找原因。实际发的是行命令,看代码的人会被名字带偏,反而觉得"逻辑没问题"。的窄化转换,GCC 默认是不警告的(要。
2026-09-15 20:28:03
160
原创 保证代码逻辑性的一些方法(1)
变化还分是不是同一个时段,同一时段的变化就是直接分。不是同一时段作用的,比如flag这类状态变化类影响下一个部分的代码,变化的时候应该即使变化。但是这里是自己前后状态的对比,pre = cur这正是变化前的状态保存,后面正式cur经历可能的变化,再检查是不是变化了。如果只是用具体的情景去理解的话,脑子太累而检查不了太多的话你就会可能吧pre = cur放在。首先是确定目标思路,这里很明显就是用前后按键状态不一样来表示。按着循序下来,按钮分按下和不按下的。后面,这样契合变化后即使保存的思想。
2026-08-16 08:23:45
222
原创 不要以为Intellij里灰色的没用到的包就不会有影响了
这里有两个我刚才写代码的时候用提示快速创建属性的时候导入的没见过的包。后面发现不是这个包,但是没有去管,以为没什么事。本来苍穹外卖写得好好的,结果突然爆出来一个没见过的错误。我查了一会发现解决问题的方法很难就没有马上去试。没有想到运行的时候给我报错了。
2025-04-29 14:02:55
216
原创 B3647 【模板】Floyd
对于 $100\%$ 的数据,$n \le 100$,$m \le 4500$,任意一条边的权值 $w$ 是正整数且 $1 \leqslant w \leqslant 1000$。接下来 $m$ 行,每行三个整数 $u,v,w$,代表 $u,v$ 之间存在一条边权为 $w$ 的边。第 $i$ 行的第 $j$ 个整数代表从 $i$ 到 $j$ 的最短路径。给出一张由 $n$ 个点 $m$ 条边组成的无向图。输出 $n$ 行每行 $n$ 个整数。# B3647 【模板】Floyd。## 输入输出样例 #1。
2025-03-29 11:15:56
248
原创 # P1873 [COCI 2011/2012 #5] EKO / 砍树## 题目描述伐木工人 Mirko 需要砍 $M$ 米长的木材。对 Mirko 来说这是很简单的工作,因为他有一个漂亮的
例如,如果一排树的高度分别为 $20,15,10$ 和 $17$,Mirko 把锯片升到 $15$ 米的高度,切割后树木剩下的高度将是 $15,15,10$ 和 $15$,而 Mirko 将从第 $1$ 棵树得到 $5$ 米,从第 $4$ 棵树得到 $2$ 米,共得到 $7$ 米木材。请帮助 Mirko 找到伐木机锯片的最大的整数高度 $H$,使得他能得到的木材至少为 $M$ 米。第 $1$ 行 $2$ 个整数 $N$ 和 $M$,$N$ 表示树木的数量,$M$ 表示需要的木材总长度。
2025-03-25 08:55:14
273
原创 P1102 A-B 数对
对于 $100\%$ 的数据,$1 \leq N \leq 2 \times 10^5$,$0 \leq a_i <2^{30}$,$1 \leq C < 2^{30}$。给出一串正整数数列以及一个正整数 $C$,要求计算出所有满足 $A - B = C$ 的数对的个数(不同位置的数字一样的数对算不同的数对)。相同的题目看多了也会有审美疲劳,于是我舍弃了大家所熟悉的 A+B Problem,改用 A-B 了哈哈!找好的老师,这次找了——会code的小金鱼——几乎是马上就学会了二分!出题是一件痛苦的事情!
2025-03-24 16:10:03
270
原创 版本管理确实包含对软件版本兼容性问题的管理
无论是API、组件还是系统,都需要通过版本控制工具、兼容性策略和自动化测试来确保新旧版本的平滑过渡。如果遇到兼容性问题,可以通过版本回退、并行支持或模块化设计快速解决。如果需要更具体的场景分析或工具配置示例,可以进一步说明!版本兼容性是指不同版本的软件、组件或系统之间能够。版本管理的核心目标之一就是。(如知识库[7]提到的。
2025-03-16 18:59:46
1520
原创 lombok不起作用
在 IntelliJ 中,打开任意 Java 文件,查看是否提示 `Lombok 需要配置`,或通过 `Ctrl + Shift + A` 搜索 **Lombok** 确认插件状态。- **关键**:通过 `<annotationProcessorPaths>` 告诉 Maven 编译器在哪里找到 Lombok 的注解处理器(即使依赖是 `provided` 作用域)。- **作用**:显式指定 Lombok 的注解处理器路径,确保编译时能够识别 `@Slf4j` 等注解。
2025-03-16 18:57:37
618
原创 P1747 好奇怪的游戏
它们得从点 $x_1,y_1$ 和 $x_2,y_2$ 走到 $(1,1)$。通过研究不难发现一个马可以绕开阻塞的同样两部走到没有阻塞情况下走的两步走到的最短路点上,最边边上的走不到,可以用上面的归谬法同样证明,因为另外一颗棋子也完全可以返回去走个点到达最短。因为达到最短路上面的一个点的本质就是从那个点可以最短的走到(1,1),但是对方在这样一个可以最短走到的点上却还要花更多的路程走到对面的点上再去走最短路,这是矛盾的,所以是不行的。注意不能走到 $x$ 或 $y$ 坐标 $\le 0$ 的位置。
2025-03-12 20:44:49
496
原创 【无标题】
已知 $n$ 个整数 $x_1,x_2,\cdots,x_n$,以及 $1$ 个整数 $k$($k<n$)。从 $n$ 个整数中任选 $k$ 个整数相加,可分别得到一系列的和。第二行 $n$ 个整数,分别为 $x_1,x_2,\cdots,x_n$($1 \le x_i \le 5\times 10^6$)。第一行两个空格隔开的整数 $n,k$($1 \le n \le 20$,$k<n$)。例如上例,只有一种的和为素数:$3+7+19=29$。## 输入输出样例 #1。**【题目来源】**
2025-03-07 17:22:55
393
原创 易错点abc
在同一个输入流上重复创建Scanner实例可能会导致一些问题,包括但不限于输入流的混乱。尤其是在处理标准输入(System.in)时,重复创建Scanner对象通常不是最佳实践,因为这可能导致某些输入数据丢失或者顺序出错。
2025-02-27 20:56:33
505
原创 子串简写1
程序猿圈子里正在流行一种很新的简写方法:对于一个字符串,只保留首尾字符,将首尾字符之间的所有字符用这部分的长度代替。给定一个字符串 SS 和两个字符 c1c1 和 c2c2 ,请你计算 SS 有多少个以 c1c1 开头 c2c2 结尾的子串可以采用这种简写?对于 100100 的数据,2≤K≤∣S∣≤5×1052≤K≤∣S∣≤5×105。c1c1 和 c2c2 都是小写字母。对于 2020 的数据,2≤K≤∣S∣≤100002≤K≤∣S∣≤10000。∣S∣∣S∣ 代表字符串 SS 的长度。
2025-02-26 14:53:11
361
原创 初学者不要死扣细节
这类不常用的方法细节就不要去探索了,快点学,学完好做项目。老韩本来想重写构造器的,但是他说没有用就演示了。细节是一个无底的黑洞,你永远都扣不完。
2024-12-03 13:58:59
254
原创 做项目要自己去分析需求
这样的好处就是可以使用抽象不仅不用再去理解代码——再去整个检查代码,前面是对的就可以了,错了只用改前面的,如果是都错了就要重新改掉全部东西了(就比如之前cs61b里面的那个实践作业233)重写的父类的但是只是在父类上面加了东西可以super.父类方法来重复使用父类的方法。所以直接用set方法就好了,更好的灵活性(虽然可以设置默认值但是构造器显然回事设置默认值的好地方)需要增加各个类特有的就行(没说重写的是输出的,返回字符串的就可以这样做)科学家的奖金也是不确定的,要自己动态去改。
2024-11-25 21:33:01
280
原创 零钱通小项目里的Java技巧
可以输出换行,并且没有长度限制(不像数组有固定长度!学东西经常会遇到还没学到但是用起来不太需要理解的东西就先用着。这是一般的做法,直接在while里面判断。一个代码块只完成一个任务。
2024-11-22 18:56:41
180
原创 编程思想)
一开始用的是 int[ ][ ]偷的values[ ][ ],后面莫名觉得Tile[ ][ ]更加方便,就用了。后来发现,Borad里面的move(int col ,int row,Tile tile)方法要实时的Tile,但是迭代器是按一定顺序的。Board里面的tile()方法!一开始是按照迭代器的顺序,强硬的凑,凑出来了一些答案,迭代器加上merged数组虽然可以防止二次merge,但是却 不能阻止后面的先合并(直接传去tile)后来右发现,move()方法只是改变了类的引用。
2024-11-02 14:37:42
314
原创 Java思想
当我在写镂空的标志时想到了是j循环在控制*的输出,所以以j的数值为依据,1和最有一个数字的j才打印*符号。这很好地展现了数学中代数学的控制思想,没想到在计算机中也有。当我们要修改程序使得它更加符合需求的时候不妨这样一步一步来拆解程序。这样就能更加清楚地了解如何解决问题。再写了加入空格的实心金字塔程序,最后写了这个镂空的金字塔。然后写了输出靠墙的1到n,n排n个的*符号输出程序。一步一步拆解需求,先写死的再写活的。首先我只是写了个输出一个*的程序。学习韩老师的java课程。
2024-11-01 17:24:08
297
原创 善于运用网络信息
但是照着做,克隆不了仓库,问了AI,AI也不会,以为完蛋了。难过了好一会,想到去查网络,去找真人。想要学CS61B,做作业,卡在这里。去网上搜,知乎还有遗产。又出问题了,又上网查了。
2024-10-26 18:47:37
247
原创 学习《啊哈,算法!》的时候的感想
就比如说我在大一看的书里面写的——写代码之前可以写一下流程图,大一升大二的暑假自学算法,我最初看代码老是错误,便想起来减少代码错误的一种大佬用的方法,写代码之前先想明白来怎么写,如何落实。但是其实提前想好相当于做了一遍了,这时候我想起来了流程图这个方法(我之前就试过流程图的方法,我当时以为这样十分麻烦,把写代码的任务给抢了),只有这个高强度的思考辅助工具可以解决我的问题。开始很慢,后面熟了,流程图、代码写的就十分的快了,有的时候甚至不需要流程图了。方法,看完要想一想怎么用到学习中来。
2024-10-07 23:19:41
460
原创 关于计算机算法设计方法的思考
想成男女配对,除了最开始最容易想到的列举全部情况的方法,我们其实还可以就是如“啊哈算法”里面描述的那样,给出一个情景。这时就可以多余的人去找有伴的人,问他能不能去找自己另外的熟人。相反的是我认为这反而是设计的根本。人能思考的逻辑问题计算机一般都可以实现,重要的是如何把问题掰碎扔给计算机解决。但是我们只要能让多余的人去找有伴的人,问他能不能去找自己另。只要配对的人中有一个人能找到自己一个没人配对的可以配对的伴侣就可以了。暴力枚举其实一般人人最开始想到的也是这个,而不是计算机的独有的。关注最后配对的情况。
2024-10-01 12:40:35
273
原创 排序算法的理解
计算机不能直接继承不等式的传递性特征,这个时候才用递归调用去人为的分成不同的部分。或者说,一部分已经大致排序好的数放在一边,另外一边再排。排序算法借鉴了数学里面的不等式的思想。
2024-10-01 08:16:03
416
原创 汉诺塔的理解
一张牌的时候放在C区域,2张若第一张放B区域了,2张的第二张就是C区域了,B区域的那张牌只能放在C区域的第一张牌上面了,不然就只能按大到小给放回牌堆了,或者无意义的乱。(还可以这样解释,堆起来空起来的位置可以是要目标大盘放置的位置,只是没有物理的把盘子给交换,所以只需要调整位置即可,圆盘 A B C,C堆起来了,把B和C交换位置A C B,如果不看标记,把A的牌堆第一张牌放到大盘B上,C再借A再放一次自己的造型到B上,就是牌堆数量为n + 1的情况了)两张牌则是B区域开始,三张又是C区域开始了。
2024-09-25 17:58:01
411
原创 减少代码错误的方法
这也是看似是,而实际上,你若去举个例子很快就能发现问题。等价是需要证明的,而不是想当然的以为然就可以的。就如下面这个求割点的。
2024-09-20 14:40:30
389
原创 C语言字符录入的一些问题
在这个例子中,当 i 等于 2 时,break 语句会被执行,循环会立即结束。因此,i++ 在最后一次迭代中不会被执行,但循环会在 i 等于 2 时提前终止,所以实际上 i 的最终值将是 2。
2024-08-20 08:45:27
250
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅
1