自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 删除有序链表中重复的元素

给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。例如:给出的链表为1→2→3→3→4→4→5, 返回1→2→5.给出的链表为1→1→1→2→3, 返回2→3数据范围:链表长度 0≤n≤10000,链表中的值满足 ∣val∣≤1000要求:空间复杂度 O(n),时间复杂度 O(n)进阶:空间复杂度 O(1),时间复杂度 O(n)

2025-04-01 18:41:31 162

原创 U-Boot 链接脚本 u-boot.lds 详解

u-boot.ldsU-Boot 的链接脚本u-boot.lds是控制 U-Boot 镜像内存布局的关键文件。它定义了各个段(如.text.data.bss等)在内存中的位置,以及程序的入口点。通过分析u-boot.lds,我们可以了解 U-Boot 的启动流程以及内存布局。

2025-01-05 11:02:29 972

原创 Uboot顶层Makefile文件分析

当执行这个命令会调用,并传递和作为参数。make默认目标_allmake命令的默认目标是_all,它依赖于all。目标allall依赖于ALL-yALL-y包含了需要生成的所有文件,如u-boot.bin。生成u-boot.binu-boot.bin依赖于。依赖于u-boot。u-boot依赖于和u-boot.lds。链接过程:通过链接和中的目标文件,生成u-boot。最终文件:生成u-boot.bin和其他相关文件。

2025-01-04 18:10:51 773

原创 Uboot工程目录分析

以下是 U-Boot 源码解压后的主要目录和文件:未编译的 U-Boot 源码目录结构如下:编译后的 U-Boot 目录编译后的 U-Boot 目录会生成一些新的文件和文件夹,例如:路径:作用:U-Boot 的配置文件,由 生成。重点关注:包含所有配置选项,例如: 文件路径:作用:链接脚本,定义 U-Boot 的内存布局。重点关注:

2025-01-04 10:35:58 399

原创 链表中的倒数第K个节点

输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。如果该链表长度小于k,请返回一个长度为 0 的链表。数据范围:0≤n≤1050≤na**ik≤109要求:空间复杂度 O(n)On),时间复杂度 O(n)On进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)On。

2024-12-06 09:33:55 340

原创 查找链表中环的入口节点

给一个长度为n链表,若其中包含环,请找出该链表的环的入口结点,否则,返回null。≤10000,1<=结点值<=100001<=结点值<=10000。假设链表的非环部分长度为a,环的长度为b。我们可以使用快慢指针法检测链表是否有环。(1),时间复杂度 O(n)数据范围: n≤10000。要求:空间复杂度 O(1)

2024-12-05 10:50:31 971

原创 数列的极限

极限的定义设an{a_n}an​是一个数列,如果存在一个数LLL,使得对于任意给定的正数ϵϵϵ,总存在一个正整数NNN,使得当nNn>NnN时,有∣an−L∣ϵ∣a_n−L∣<ϵ∣an​−L∣<ϵ,则称数列an{a_n}an​收敛于LLL,记作lim⁡n→∞anLlim⁡n→∞​an​L。

2024-12-04 17:04:39 708

原创 映射与函数

映射文章目录映射基本概念映射的类型映射的表示单射、双射、满射单射(Injective)定义示例满射(Surjective)定义示例双射(Bijective)定义示例逆映射与复合映射逆映射(Inverse Mapping)定义示例复合映射(Composite Mapping)定义示例复合映射的性质示例函数函数的基本概念初等函数类型函数的性质函数的运算线性函数线性函数的基本概念线性函数的性质线性函数的公式斜率的计算公式截距的计算公式线性方程的解法指数函数指数函数的基本概念指数函数的性质指数函数的公式对数函数对

2024-12-04 15:18:35 2494

原创 判断链表中是否有环

它的基本思想是使用两个指针,一个慢指针和一个快指针,慢指针每次移动一步,快指针每次移动两步。第一部分{3,2,0,-4}代表一个链表,第二部分的1表示,-4到位置1(注:头结点为位置0),即-4->2存在一个链接,组成传入的head为一个带环的链表,返回true。第一部分{1}代表一个链表,-1代表无环,组成传入head为一个无环的单链表,返回false。初始时,慢指针(slow)指向节点1(数字3),快指针(fast)指向节点2(数字2)每次移动,快指针比慢指针多走一步,所以它们之间的距离会减少一步。

2024-12-04 09:41:02 847

原创 集合的相关性质与定义

两个集合的笛卡尔积设AAA和BBB是两个集合,集合AAA和集合BBB的笛卡尔积A×BA×BA×B是由所有有序对ab(a,b)ab组成的集合,其中a∈A且b∈Ba∈A 且 b∈Ba∈A且b∈B。记作A×Bab∣a∈A且b∈BA×B=\{(a,b)∣a∈A 且 b∈B\}A×B{(ab∣a∈A且b∈B。多个集合的笛卡尔积设A1A2AnA1​A2​An​是nnn。

2024-12-03 22:58:57 982

原创 合并k个已排序的链表

采用分治法,分治法就是把一个大问题分成几个小问题来解决,然后把小问题的解合并成大问题的解。在这个题目里,大问题就是合并k个有序链表,小问题就是合并两个有序链表。合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。≤5000,每个节点的val满足 ∣val∣

2024-12-03 10:41:59 583

原创 FreeRtos中断管理

嵌入式实时系统需要对整个系统环境产生的事件作出反应。例如,以太网外围部件收到了一个数据包(事件),需要送到 TCP/IP 协议栈进行处理(反应)。更复杂的系统需要处理来自各种源头产生的事件,这些事件对处理时间和响应时间都有不同的要求。FreeRTOS 并没有为设计人员提供具体的事件处理策略,但是提供了一些特性使得设计人员采用的策略可以得到实现,而实现方式不仅简单,而且具有可维护性。必须说明的是,只有以”FromISR”或”FROM_ISR”结束的 API 函数或宏才可以在中断服务例程中使用。

2024-12-03 09:32:28 1128

原创 FreeRtos资源管理

临界区和挂起调度器是两种常用的同步机制,用于保护共享资源,确保数据的一致性和完整性。临界区通过关闭中断来保护代码段,适用于需要保护的代码段非常短的情况。挂起调度器通过停止任务调度来保护代码段,适用于需要保护的代码段较长的情况。通过合理选择和使用这些同步机制,可以有效避免多任务系统中的数据损坏和竞争条件。互斥量是一种特殊的二值信号量,用于控制在两个或多个任务间访问共享资源。通过使用互斥量,可以确保同一时间只有一个任务可以访问共享资源,从而避免数据损坏和竞争条件。

2024-12-03 09:28:21 618

原创 FreeRTOS队列

队列是FreeRTOS中用于任务间通信和同步的重要机制。通过合理使用队列,可以实现高效的数据传递和任务同步。在使用队列时,需要注意内存管理和线程安全,尤其是在处理大型数据单元时。首先,定义一个大型数据结构LargeData// 假设这是一个1KB的数据块通过使用指针传递大型数据单元,可以有效地减少内存开销,并提高任务间通信的效率。在使用队列时,需要注意内存管理和线程安全,尤其是在处理大型数据单元时。

2024-12-02 15:52:34 718

原创 FreeRTOS任务管理

多任务系统(Multitasking System)是一种操作系统(OS)的功能,允许计算机在同一时间段内执行多个任务或进程。这些任务可以是不同的应用程序、服务或其他计算操作。多任务系统的主要目标是提高计算机的利用率和响应能力,使用户或应用程序能够在同一时间内执行多个操作。// 任务名称// 任务编号FreeRTOS任务的创建是通过API函数实现的。任务函数是一个永不退出的C函数,通常是一个死循环。任务的创建和调度是多任务系统中最基本的组件。

2024-12-02 11:32:47 789

原创 合并两个排序的列表

合并两个排序的列表

2024-12-02 09:57:22 493

原创 中断的具体行为

Cortex-M3权威指南 中断处理学习

2024-12-01 18:55:41 768

原创 Cortex-M3异常

Cortex-M3权威指南异常学习

2024-12-01 17:38:51 784

原创 Cortex-M3整体风景概览

Cortex-M3权威指南 整体风景学习

2024-12-01 16:45:52 650

原创 Cortex-M3存储器系统

Cortex-M3权威指南存储器系统笔记

2024-12-01 16:03:28 901

原创 Cortex-M3基础

Cortex-M3 微控制器的寄存器组包括通用寄存器和特殊功能寄存器,用于数据处理和控制处理器行为。

2024-12-01 11:25:29 1196

原创 链表内指定区间反转

将一个节点数为 size 链表 m 位置到 n 位置之间的区间反转,要求时间复杂度 O(n)给出的链表为 1→2→3→4→5→NULL1→2→3→4→5→。返回 1→4→3→2→5→NULL1→4→3→2→5→。数据范围: 链表长度 0<size≤10000<,链表中每个节点的值满足 ∣val∣≤1000∣。具体算法思路可以参考这位UP主的讲解。要求:时间复杂度 O(n)) ,空间复杂度 O(n)进阶:时间复杂度 O(n)),空间复杂度 O(1)),空间复杂度 O(1)

2024-12-01 09:46:20 800

原创 Cortex-M3概览

Cortex-M3权威指南-概览

2024-11-30 23:20:33 1201

原创 Cortex-A7中断

通过设置中断向量表偏移,可以将中断向量表放置在STM32微控制器的Flash存储器起始地址(0x08000000),从而解决中断向量表默认位置与实际存储位置不一致的问题。这种方法在Cortex-M架构中非常常见,确保了中断处理的正确性和可靠性。和STM32一样,Cortex-A7也有属于自己的中断向量表,放在代码的最前面,Cortex-A7 内核有 8 个异常中断。Cortex-A7虽然有八个中断,但实际上只有七个中断,相比于STM32看起来少了很多,难道一个能跑Linux的IC只有这么少的中断???

2024-11-30 15:46:40 910

原创 单链表的原地反转

给定一个单链表的头结点pHead(该头节点是有值的,比如在下图,它的val是1),长度为n,反转该链表后,返回新链表的表头。数据范围: 0≤n≤10000≤n≤1000要求:空间复杂度 O(1)O(1) ,时间复杂度 O(n)On如当输入链表{1,2,3}时,经反转后,原链表变为{3,2,1},所以对应的输出为{3,2,1}。以上转换过程如下图所示:算法思路:设立三个指针,prev,next,current,指针变化如下![在这里插入图片描述](https://i-blog。

2024-11-30 09:28:49 421

原创 Makefile语法

Make 是一个用于自动化构建和编译软件项目的工具。它通过读取一个名为Makefile的文件来确定如何构建项目。Makefile中定义了一系列规则,每个规则描述了如何从源文件生成目标文件。Make 工具会根据这些规则自动执行编译、链接等操作,从而生成最终的可执行文件或库文件。

2024-11-28 17:58:49 765

原创 移植官方SDK点亮LED

通过使用和函数,可以方便地配置IO的复用功能和IO属性。这些函数简化了寄存器的直接操作,使得代码更加简洁和易读。在实际开发中,可以根据需要选择不同的宏定义来配置IO的复用功能和属性。

2024-11-24 18:00:03 684

原创 IMX6UL主频和时钟配置

默认情况下IMX6ULL的工作频率为396MHz,但是IMX6ULL系列的标准工作频率表为528MHz,甚至有些能够达到696MHz.

2024-11-24 17:07:23 680

原创 C语言LED灯实验

所有段从地址0X87800000开始分配。.text段包含start.omain.o和其他所有输入文件的.text段。.rodata段包含所有输入文件的.rodata段,4字节对齐。.data段包含所有输入文件的.data段,4字节对齐。.bss段包含所有输入文件的.bss段和COMMON段,4字节对齐。定义了和__bss_end符号,分别表示.bss段的起始和结束地址。通过这个链接脚本,链接器将按照指定的内存布局将目标文件组合成最终的可执行文件。

2024-11-23 11:29:01 1045

原创 IMX6ULL启动方式

IVT、Boot Data和DCD的总大小通常是3KByte(3072字节)。IVT:通常占用1KByte(1024字节)。Boot Data:通常占用1KByte(1024字节)。DCD:通常占用1KByte(1024字节)。

2024-11-23 10:30:40 712

原创 汇编LED实验

led.bin: 生成最终的二进制文件led.bin,依赖于led.s文件。通过编译、链接和转换生成led.bin文件,并生成反汇编文件led.dis。clean: 清理所有生成的文件,包括目标文件、二进制文件、ELF 文件和反汇编文件。

2024-11-22 23:01:06 596

原创 Cortex-A 处理器运行模型

当它不支持子程序的返回时,它也可以用作通用寄存器。R15是程序计数器,保存当前程序地址(实际上,在ARM状态下,它总是指向当前指令之前八个字节,在Thumb状态下,它总是指向当前指令之前四个字节,这是原始ARM 1处理器的三级流水线的遗留问题)。低寄存器组(R0-R7)和R15共享相同的物理寄存器地址,只是一些高寄存器组在不同的模式下有自己独有的寄存器,如FIQ模式下(R8-R14),当程序运行在FIQ模式下,假设访问的是R12,实际访问的是R12_fiq,即对它们的访问将转移到不同的物理存储、

2024-11-22 13:26:50 1046

原创 数据结构-链表、栈、动态数组、队列

不透明指针是指指向一个数据结构的指针,但该数据结构的内部细节对外部代码是不可见的。外部代码只能通过提供的接口函数来操作该数据结构,而无法直接访问其内部成员。首先,定义一个不透明指针类型,通常使用typedef关键字。这里,MyData是一个不透明指针类型,的内部细节对外部代码是不可见的。

2024-11-21 22:37:27 1731 2

原创 基本元器件学习——电阻

电阻器是电子电路中最常用的元器件之一,简称电阻。

2023-09-26 16:10:39 235

原创 【无标题】

GD32启动文件分析

2023-09-05 09:16:28 209 1

原创 GD时钟树及RCU代码

GD系统时钟源配置

2023-08-11 19:47:02 938 2

原创 GD32工程创建示例手册

1.本项目使用的是兆易创新 GD32F470IIH6 主控芯片,因此进入链接直接搜索到如下页面跳转到相应的页面搜索所使用的芯片型号且点击跳转到步骤2所示界面2.点击GigaDevice,3.点击CMSIS Packs,找到如下图所示的芯片型号,且点击75Device跳转到步骤4所示界面4.选择Version History,选择一个你想要的版本下载即可,本项目例程使用的是3.0版本的芯片包。

2023-08-11 13:06:18 1417 1

原创 GD32F4说明

GD32环境搭建1

2023-08-10 19:03:53 1275 1

原创 jupyter使用

jupyter初级使用

2023-06-08 16:20:48 76

原创 java学习之helloworld

java编程之helloworld

2023-06-01 08:56:50 73 1

空空如也

空空如也

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

TA关注的人

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