自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ETAS AUTOSAR工具链的作用

为了实现应用程序和硬件模块之间的分离,AUTOSAR架构被抽象成四层,由上至下依次为:应用层(Application Layer)、运行时环境层(Run Time Environment,即RTE)、基础软件层(Basic Software,即BSW),以及微控制器层(Microcontroller)。AUTOSAR的目标是为汽车电子系统提供一个统一的、开放的、标准化的平台,从而促进汽车制造商和供应商之间的合作,降低系统开发和维护成本,并加速新功能的引入和部署。

2024-06-17 14:40:23 401

原创 C++复习 - String

自己实现String类。

2024-03-06 11:09:52 513

原创 935. 骑士拨号器

象棋骑士有一个,它可以垂直移动两个方格,水平移动一个方格,或者水平移动两个方格,垂直移动一个方格(两者都形成一个的形状)。象棋骑士可能的移动方式如下图所示:我们有一个象棋骑士和一个电话垫,如下所示,骑士(即蓝色单元格)。给定一个整数 n,返回我们可以拨多少个长度为 n 的不同电话号码。你可以将骑士放置在上,然后你应该执行 n - 1 次移动来获得长度为 n 的号码。所有的跳跃应该是的骑士跳跃。因为答案可能很大,109 + 7。

2024-02-24 16:37:34 332

原创 C语言复习 - 数据在内存中的存储格式

大端存储模式中,数据的高位保存在内存的低地址处,而数据的低位保存在内存的高地址处。这意味着在内存中,最高有效字节(Most Significant Byte,MSB)位于最低的地址处,而最低有效字节(Least Significant Byte,LSB)位于最高的地址处。小端存储模式中,数据的低位保存在内存的低地址处,而数据的高位保存在内存的高地址处。这意味着在内存中,最低有效字节(LSB)位于最低的地址处,而最高有效字节(MSB)位于最高的地址处。

2024-02-23 11:18:30 846

原创 HC595级联原理及实例 - STM32

存储寄存器是直接和8个输出引脚相通的,将移位寄存器的数据转移到存储寄存器后,Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 就可以接收到我们开始输入的一个字节的数据。所谓存储寄存器,就是数据可以存在这个寄存器中,并不会随着一次输出就消失,只要595不断电,也没有新的数据从移位寄存器中过来,数据就一直不变且有效。首先我们要介绍这个引脚的作用,当一个新的位数据要进来时,已经进入的位数据就在移位寄存器时钟脉冲的控制下,整体后移,让出位置。: 根据输入的输出引脚编号和状态,更新移位寄存器中对应引脚的状态,并通过。

2024-02-22 14:01:30 2834 1

原创 97. 交错字符串

给定三个字符串s1s2s3,请你帮忙验证s3是否是由s1和s2组成的。两个字符串s和t的定义与过程如下,其中每个字符串都会被分割成若干a + b意味着字符串a和b连接。

2024-02-19 00:09:30 850 1

原创 560. 和为 K 的子数组

给定数组 nums 和目标值 k,要找到子数组的数量,使其元素之和等于 k。为了解决这个问题,可以使用一个哈希表来存储之前出现的前缀和,并统计出现次数。遍历数组过程中,不断更新前缀和,并检查之前的前缀和中是否存在 sum[i] - k,如果存在,则说明找到了一个子数组的和为 k,累加相应的计数。检查当前位置之前是否存在前缀和为 sum - k 的情况,若存在,则累加相应的计数到 ret 中。初始化变量 sum 为 0,用于记录当前位置的前缀和。时间复杂度: O(n)空间复杂度: O(n)

2024-02-18 23:29:45 314

原创 C语言复习 - 操作符

因此,这个表达式是未定义的行为(UB),在不同的编译器和不同的情况下,可能会产生不同的结果。这段代码中的第一个 + 在执行的时候,第三个++是否执行,这个是不确定的,因为依靠操作符的优先级和结合性是无法决定第一个 + 和第三个前置 ++ 的先后顺序。在 C 语言中,整型提升是一种类型转换规则,它确保在进行整型算术运算时,所有参与运算的值都至少被转换为普通整型(int)的精度。需要注意的是,对于负数的右移,有些编译器可能使用算术右移(将符号位扩展到高位),有些编译器可能使用逻辑右移(在高位补零)。

2024-02-17 22:19:18 806 1

原创 STM32H750VB核心开发板

复刻了大佬的开源STM32H750VB/H7B0VB核心板 ,核心板兼容正点原子屏幕,但我没有,直接购买又太贵,就画了一版。

2024-02-17 19:59:35 1059 1

原创 44. 通配符匹配

这个问题是一个动态规划问题。我们惊奇的发现, dp[i][j] 的状态转移方程里面除了第一项以外,其余的都可以用 dp[i -1][j] 替代。因此,我们优化我们的状态转移方程为: dp[i][j] = dp[i - 1][j] || dp[i][j - 1]。当 p[j] == '*' 时,状态转移方程为: dp[i][j] = dp[i][j - 1] || dp[i - 1][j - 1] || dp[i - 2][j - 1]......空间复杂度: O(mn)O(mn)O(mn)

2024-02-17 10:59:47 331 1

原创 C语言复习 - 初识C语言

C/C++语言中的基本数据类型,其中: 二、变量、常量 变量(Variable):变量是指在程序执行过程中可以改变其值的存储位置。它们用于存储各种数据类型的值,比如整数、浮点数、字符等。在大多数编程语言中,变量必须先声明后使用,并且可以在声明时初始化。变量名通常是一个标识符,用来引用存储在内存中的值。 常量(Constant):常量是在程序执行过程中其值不会改变的存储位置。常量可以是字面值(literal),也可以是通过变量定义的符号常量。在许多编程语言中,常量通常在程序

2024-02-16 17:48:46 787 1

原创 面试题 17.19. 消失的两个数字

先将数组中的数和 [1, n + 2] 区间内的所有数「异或」在⼀起,问题就变成了:有两个数出现了「⼀次」,其余所有的数出现了「两次」。第一个 for 循环中,通过对数组中的所有元素进行异或操作,找出数组中所有元素的异或结果,因为相同的数异或结果为0,而缺失的两个数则会留下。第二个 for 循环中,从 1 到数组长度加 2(因为缺失了两个数),对这些数进行异或操作,得到的结果包含了缺失的两个数。然后通过异或结果中不同比特位的位置,将数组中的元素分成两类。对于每一类,分别异或操作,即可得到缺失的两个数。

2024-02-15 21:53:41 314 1

原创 1312. 让字符串成为回文串的最少插入次数

我们可以定义一个二维数组 dp,其中 dp[i][j] 表示将子串 s[i...j] 转换为回文字符串所需的最小插入次数。然后,我们可以利用动态规划的思想来填充这个数组。= s[j],则需要进行插入操作。此时,我们可以取左边或上边的最小插入次数,并加上1,即 dp[i][j] = min(dp[i + 1][j], dp[i][j - 1]) + 1。如果 s[i] == s[j],则不需要进行插入操作,因为 s[i] 和 s[j] 已经匹配,所以 dp[i][j] = dp[i + 1][j - 1]。

2024-02-11 21:59:53 365 1

原创 T12 电烙铁主控屏幕-基于 STC8H1K17 控制的兼容PD快充便携式T12电烙铁

主控屏幕显示是main在函数中死循环执行的,主屏幕负责显示:设定温度、实际温度、PD诱骗电压。同时开机回显示自定义的开机画面,我会分享开机画面的定制过程。然后长按“设置键”即可进入设置页面,分为:休眠(自定义休眠时间)、电压(自定义诱骗电压)、校准(设定校准温度)、陀螺(显示三轴加速度)、显示(切换显示方向和反显)、版本(显示版本信息)。

2024-02-11 19:24:52 1454 1

原创 1745. 分割回文串 IV

动态规划: 我们首先使用动态规划来填充一个二维数组 dp,其中 dp[i][j] 表示字符串从索引 i 到 j 的子串是否为回文串。具体来说,如果字符串从 i 到 j 是一个单字符或者两个字符的回文串,则 dp[i][j] 为 true;如果字符串从 i 到 j 的首尾字符相同并且字符串 i+1 到 j-1 也是一个回文串,则 dp[i][j] 也为 true。具体地,我们遍历所有可能的分割位置 pos1 和 pos2,并检查是否存在合适的分割点,使得分割后的三个子串都是回文串。

2024-02-10 23:03:20 303 1

原创 LCP 30. 魔塔游戏

基本思路是模拟魔塔过程,遍历每个房间并记录当前的生命值,当生命值小于等于0时,需要选择一个最小的负值来补充生命值,直到遍历完所有房间或者生命值不足以继续前进。如果当前生命值小于等于0,则从小顶堆中弹出一个最小的负值,并用其补充生命值,同时记录补充次数。最终判断总生命值是否小于0,如果小于0则无法通过所有房间,返回-1,否则返回补充次数。创建一个小顶堆(优先队列),用于存储每个负值,即每次需要补充生命值的房间。更新当前生命值:将当前房间的值加到生命值上。空间复杂度:O(n)O(n)O(n)

2024-02-06 22:43:32 364

原创 T12 电烙铁简单程序逻辑

通过分析就可以知道,发热丝本身即是发热体,也是热偶的工作端。怎么可能是热电动势呢,确实,但不要忘了T12-OUTPUT端的电压是PWM波,理论上是有单片机PWM电压为0 v时的,而T12-OUTPUT端的电压此时也应为0。在T12烙铁头中,PID控制算法通过监测温度传感器的输出,计算当前温度与设定温度之间的差异,并根据这一差异调节加热功率,以实现烙铁头温度的精确控制。这段代码实现了一个简单的增量式PID控制器,通过计算当前温度与期望温度之间的差异以及历史偏差值,调节输出控制量,实现对温度的精确控制。

2024-02-06 18:03:47 2575

原创 516. 最长回文子序列

这段代码解决的问题是找到给定字符串 s 中最长回文子序列的长度。基本思路是通过填充一个二维的动态规划表 dp,其中 dp[i][j] 表示字符串 s 中从索引 i 到索引 j 的最长回文子序列的长度。在填表的过程中,通过状态转移方程处理不同情况,最终得到整个字符串的最长回文子序列的长度。返回结果: 最终的结果存储在 dp[0][n-1] 中,其中 n 是字符串的长度。填表的过程需要遍历二维表,其中每个元素的填充需要 O(1)时间。动态规划表的大小为 n×n ,占用 O(n^2)的空间。

2024-02-06 00:07:49 337

原创 1696. 跳跃游戏 VI

即,在位置 i 处的最大得分是在当前窗口内(i-k 到 i-1)找到的最大得分,加上当前位置的值。我们可以使用一个优先级队列(最大堆)来维护当前窗口内的最大得分,以优化查找最大得分的过程。题目要求在给定的数组中,从第一个位置出发,每一步可以向前跳跃最多 k 步,求能够获得的最大得分。这是一个典型的动态规划问题,需要找到状态转移方程来表示每个位置的最大得分。定义一个长度为 n 的数组 dp,其中 dp[i] 表示在到达位置 i 时的最大得分。空间复杂度: O(n)O(n)O(n)

2024-02-05 20:42:28 342

原创 T12 电烙铁

采用STC8H1K17 控制,支撑TYPE-C的PD快充供电,最高支持100 W,升温至200 ℃仅需 15s。同时支持USB下载更新固件。采用0.87寸OLED屏幕,实时显示实际温度已经预设温度。同时有一个功能键,两个温度调节及功能切换键。还支持温度过热保护,以及陀螺仪检测,长时间静止烙铁会进行休眠。话不多说,下面会提供详细的制作教程。

2024-02-04 17:45:52 694 1

STM32H750VB核心开发板

STM32H750VB/H7B0VB核心板 ,核心板兼容正点原子屏幕,同时还有自制屏幕PCB文件,可直接PVB打样。 所有资源(开发板资料,配套程序可供学习):

2024-02-17

T12 电烙铁 T12 电烙铁(PCB,3D打印,程序)

T12 电烙铁(PCB,3D打印,程序)

2024-02-04

空空如也

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

TA关注的人

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