<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[tyustli]]></title><description><![CDATA[]]></description><link>https://blog.csdn.net/tyustli</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; tyustli]]></copyright><item><title><![CDATA[ZYNQ MPSOC 启动流程]]></title><link>https://blog.csdn.net/tyustli/article/details/163782847</link><guid>https://blog.csdn.net/tyustli/article/details/163782847</guid><author>tyustli</author><pubDate>Sat, 15 Aug 2026 19:34:09 +0800</pubDate><description><![CDATA[本文总结了Zynq UltraScale+ MPSoC在不同复位场景下的启动流程。重点分析了POR冷启动、System Reset、PS-only Reset和看门狗恢复等场景的执行路径。详细说明了PMU ROM、CSU BootROM、PMUFW和FSBL等核心模块的分工协作，以及它们在各种复位模式下的行为差异。特别强调了不同复位类型对PL状态的影响，并解析了看门狗超时后子系统级恢复的流程和注意事项。文章通过流程图和表格清晰呈现了ZynqMP的启动层次和复位处理机制。]]></description><category></category></item><item><title><![CDATA[ZYNQ Alternate Boot Mode 设置]]></title><link>https://blog.csdn.net/tyustli/article/details/163701062</link><guid>https://blog.csdn.net/tyustli/article/details/163701062</guid><author>tyustli</author><pubDate>Wed, 12 Aug 2026 16:26:46 +0800</pubDate><description><![CDATA[文章摘要 本文详细介绍了Zynq UltraScale+ MPSoC的Alternate Boot Mode机制及其应用。主要内容包括： 区分三种复位方式（寄存器写入、系统复位和上电复位）的不同作用 Alternate Boot Mode寄存器的位域结构和常用编码 实际使用中的操作时序和注意事项 提供XSCT命令脚本和Vitis IDE操作方法 实测案例展示SD和QSPI启动模式的对比 必须使用上电复位的场景说明 常见误区的澄清 重点强调：写入Alternate Boot Mode不会立即生效，必须配合系统]]></description><category></category></item><item><title><![CDATA[从 0 到 1 搭建 Kconfig 配置系统]]></title><link>https://blog.csdn.net/tyustli/article/details/159473190</link><guid>https://blog.csdn.net/tyustli/article/details/159473190</guid><author>tyustli</author><pubDate>Wed, 25 Mar 2026 18:49:02 +0800</pubDate><description><![CDATA[本文介绍了从零搭建Kconfig配置系统的过程。通过分析开源项目中常见的宏定义管理方式存在的问题，提出了使用Kconfig系统进行集中配置管理的方案。详细说明了基于Python kconfiglib库的环境搭建步骤，包括文件结构组织、Kconfig脚本编写、Makefile配置等关键环节。针对实际使用中出现的&quot;Symbol对象无origin属性&quot;错误提供了解决方案，并展示了系统运行后生成的.config配置文件和autoconfig.h头文件等产物。最后介绍了如何扩展多目录Kconfig]]></description><category></category></item><item><title><![CDATA[ARMv7上分散加载实现多 bin 运行]]></title><link>https://blog.csdn.net/tyustli/article/details/159319719</link><guid>https://blog.csdn.net/tyustli/article/details/159319719</guid><author>tyustli</author><pubDate>Sat, 21 Mar 2026 16:17:38 +0800</pubDate><description><![CDATA[摘要 本文介绍了多bin运行方案，针对Flash容量有限的芯片，将代码和变量分配到NVM（非易失性存储器）中。通过定义特殊section属性（.nvm_code、.nvm_rodata等）实现四种存储方式：代码段直接存放、只读常量存放、可读写变量XIP访问（nocopy）和可读写变量运行时拷贝到SRAM（copy）。文章提供了C语言测试示例，展示了变量和函数的地址分配验证。链接脚本配置了FLASH、NVM和RAM三个存储区域，并定义了各section的加载地址和运行地址，最后计算了生成的bin文件大小。该方]]></description><category></category></item><item><title><![CDATA[CAN 帧]]></title><link>https://blog.csdn.net/tyustli/article/details/158846084</link><guid>https://blog.csdn.net/tyustli/article/details/158846084</guid><author>tyustli</author><pubDate>Mon, 09 Mar 2026 16:55:51 +0800</pubDate><description><![CDATA[本文介绍了CAN通信中使用的5种帧类型及其结构。重点分析了数据帧和遥控帧的标准/扩展格式差异，包括帧起始、仲裁段、控制段等7个组成部分的功能特性。详细说明了错误帧、过载帧和间隔帧的结构与作用机制，阐述了CAN总线的仲裁原理和位填充规则。通过对比不同帧类型的字段组成，揭示了CAN协议实现优先级控制、错误检测和流量管理的技术原理，为理解CAN通信机制提供了系统性的框架。]]></description><category></category></item><item><title><![CDATA[CAN 与 CAN FD 区别]]></title><link>https://blog.csdn.net/tyustli/article/details/158845724</link><guid>https://blog.csdn.net/tyustli/article/details/158845724</guid><author>tyustli</author><pubDate>Mon, 09 Mar 2026 15:45:59 +0800</pubDate><description><![CDATA[摘要： CAN FD是对标准CAN的升级版本，核心改进包括：1) 数据长度从8字节扩展至64字节，减少分包需求；2) 采用双速率机制（仲裁段≤1Mbps，数据段可达2-8Mbps），提升带宽利用率；3) 新增FDF、BRS、ESI等控制位优化协议；4) 增强CRC校验（CRC-17/21）保障长帧可靠性。两者电气层兼容，但CAN FD对信号完整性要求更高。这些改进使CAN FD在汽车、工业等领域实现更高传输效率与实时性，同时保持向下兼容性。]]></description><category></category></item><item><title><![CDATA[CAN 总线拓扑]]></title><link>https://blog.csdn.net/tyustli/article/details/157726984</link><guid>https://blog.csdn.net/tyustli/article/details/157726984</guid><author>tyustli</author><pubDate>Wed, 04 Feb 2026 11:29:09 +0800</pubDate><description><![CDATA[CAN总线采用差分信号传输，通过CAN_High和CAN_Low的电位差表示总线电平。显性电平（逻辑0）电位差约2V（3.5V-1.5V），隐性电平（逻辑1）电位差为0V（2.5V-2.5V）。显性电平具有优先权，只要有一个节点输出显性电平，总线即为显性；隐性电平需要所有节点都输出隐性电平才成立。这种&quot;线与&quot;逻辑使显性电平能覆盖隐性电平，确保总线仲裁机制正常工作。]]></description><category></category></item><item><title><![CDATA[CAN 总线速度]]></title><link>https://blog.csdn.net/tyustli/article/details/157726874</link><guid>https://blog.csdn.net/tyustli/article/details/157726874</guid><author>tyustli</author><pubDate>Wed, 04 Feb 2026 11:25:45 +0800</pubDate><description><![CDATA[ISO11898 和 ISO11519-2 标准对于数据，链路层的定义相同，但物理层不同。]]></description><category></category></item><item><title><![CDATA[CAN 状态]]></title><link>https://blog.csdn.net/tyustli/article/details/157654135</link><guid>https://blog.csdn.net/tyustli/article/details/157654135</guid><author>tyustli</author><pubDate>Mon, 02 Feb 2026 17:18:20 +0800</pubDate><description><![CDATA[CAN总线单元有三种工作状态：主动错误状态（可正常通信，检测错误时输出主动错误标志）、被动错误状态（受限通信，检测错误时输出被动错误标志且需延迟重发）和总线关闭态（禁止通信）。状态转换由发送/接收错误计数值决定，各状态对应不同的错误处理机制和总线访问权限。]]></description><category></category></item><item><title><![CDATA[CAN 基本概念和特点]]></title><link>https://blog.csdn.net/tyustli/article/details/157654013</link><guid>https://blog.csdn.net/tyustli/article/details/157654013</guid><author>tyustli</author><pubDate>Mon, 02 Feb 2026 17:11:09 +0800</pubDate><description><![CDATA[本文介绍了CAN（Controller Area Network）总线协议的基本概念和特点。CAN是国际标准化的串行通信协议，由博世公司1986年开发，现广泛应用于汽车电子和工业自动化领域。其特点包括多主控制、消息优先级仲裁、系统扩展灵活性、可调通信速度、远程数据请求功能等。CAN总线具有强大的错误检测、通知和恢复机制，能隔离故障单元，支持多设备连接。这些特性使其成为分布式控制系统中可靠的数据通信解决方案。]]></description><category></category></item><item><title><![CDATA[ARMv7-A 上 malloc 功能实现]]></title><link>https://blog.csdn.net/tyustli/article/details/155454160</link><guid>https://blog.csdn.net/tyustli/article/details/155454160</guid><author>tyustli</author><pubDate>Mon, 01 Dec 2025 22:15:00 +0800</pubDate><description><![CDATA[堆内存在 bss 段的后面，在 stack 段的前面。当两者相遇时，堆内存和栈内存就会重叠。堆往高地址增长，栈往低地址增长。上述代码执行结果如下。]]></description><category></category></item><item><title><![CDATA[库文件符号解析规则]]></title><link>https://blog.csdn.net/tyustli/article/details/153646664</link><guid>https://blog.csdn.net/tyustli/article/details/153646664</guid><author>tyustli</author><pubDate>Tue, 21 Oct 2025 01:15:00 +0800</pubDate><description><![CDATA[库文件编译完成之后可以查看对应的符号属性，看看库中符号是强（T）还是弱（W）。你要加 my_plus_lib.a，只需在这条命令后面添加库路径即可。从打印结果可以看到，此时库函数的实现已经被改为自己源码的实现了。这样重新定义的强符号会自动覆盖 .a 中的函数，所以添加完库之后的 makefile 如下。同名的全局符号在链接时只允许出现一个。原始的 makefile 文件如下。如果在其他文件中重新实现这两个接口。如果库文件中的函数加了。文件清空，函数实现在。链接符号解析总体规则是。]]></description><category></category></item><item><title><![CDATA[ARMv7-A 移植 FreeRTOS 中断处理]]></title><link>https://blog.csdn.net/tyustli/article/details/153634859</link><guid>https://blog.csdn.net/tyustli/article/details/153634859</guid><author>tyustli</author><pubDate>Tue, 21 Oct 2025 00:15:00 +0800</pubDate><description><![CDATA[FreeRTOS 运行需要有一个心跳时钟，这里时钟选择为 ARMv7-A 内核的 Generic Timer 定时器， Generic Timer 定时器的使用参考。但别忘了如果 r4 原值需要保持（ABI 要求），要先把原 r4 保存到栈（push）再覆盖，或选用其它寄存器。所以这条指令执行完成之后 ulPortInterruptNesting 的值就恢复为中断发生前的值。所以 Generic Timer 中断，或者其他外设的中断，均会进入IRQ_MODE 的中断。当可以进行任务切换的时候首先判断。]]></description><category></category></item><item><title><![CDATA[ARMv7-A 移植 FreeRTOS 上文保存和下文恢复]]></title><link>https://blog.csdn.net/tyustli/article/details/153583737</link><guid>https://blog.csdn.net/tyustli/article/details/153583737</guid><author>tyustli</author><pubDate>Mon, 20 Oct 2025 01:15:00 +0800</pubDate><description><![CDATA[上文保存其实就是将当前模式的 CPSR，PC，R14(LR), R12, R11…从 log 可以看到 task1 和 task2 交替运行。指向 sys 模式的栈顶，保存的是 R0 寄存器的值。指向 sys 模式的栈顶，保存的是 R0 寄存器的值。从前面的上文保存和下文恢复可以总结出。找到当前任务的 TCB 之后，在 SWI 中断中有如下处理。的适配其实就是触发一次。新建两个优先级相同的任务。]]></description><category></category></item><item><title><![CDATA[ARMv7-A 移植 FreeRTOS 启动调度和任务恢复]]></title><link>https://blog.csdn.net/tyustli/article/details/153583547</link><guid>https://blog.csdn.net/tyustli/article/details/153583547</guid><author>tyustli</author><pubDate>Mon, 20 Oct 2025 00:45:00 +0800</pubDate><description><![CDATA[align 2.arm.align 2将代码对齐到 4 字节边界（2^2 = 4），保证 ARM 指令按 32 位对齐，提高执行效率。.arm指示汇编器生成 ARM 指令，而不是 Thumb 指令。声明这个符号为弱符号，如果别处有同名全局符号，会被覆盖。声明这是全局符号，可以被其他文件调用。告诉链接器这是一个函数类型的符号，而不是变量。函数入口这是函数入口标签。]]></description><category></category></item><item><title><![CDATA[ARMv7-A 移植 FreeRTOS 栈帧初始化]]></title><link>https://blog.csdn.net/tyustli/article/details/153582954</link><guid>https://blog.csdn.net/tyustli/article/details/153582954</guid><author>tyustli</author><pubDate>Sun, 19 Oct 2025 19:54:32 +0800</pubDate><description><![CDATA[函数会对 TCB 初始化，并将 pxStack 指向栈数组的起始地址。函数会判断栈的增长方向，如果是满减栈，那么就找到栈顶的地址，并更新。此时就执行任务栈的栈顶，也就是栈数组的尾部。由于 ARMv7-A 是满减栈，所以。函数返回值为当前栈顶地址，并赋值给。任务，任务创建完成之后我们把任务。dump 出的 stack 内容如下。指向数组结束地址，也就是栈顶。为系统移植需要实现的接口。初始化完成之后栈的布局如下。这里以静态任务创建为例。所以当函数返回的时候。至此，任务栈就构造完成。这里的函数调用关系为。]]></description><category></category></item><item><title><![CDATA[ARMv7-A 移植 FreeRTOS 中断和临界区管理]]></title><link>https://blog.csdn.net/tyustli/article/details/153582927</link><guid>https://blog.csdn.net/tyustli/article/details/153582927</guid><author>tyustli</author><pubDate>Sun, 19 Oct 2025 19:53:28 +0800</pubDate><description><![CDATA[的 API，以及中断嵌套管理等。临界区管理主要是借助中断管理。]]></description><category></category></item><item><title><![CDATA[ARMv7-A 移植 FreeRTOS 编译环境搭建]]></title><link>https://blog.csdn.net/tyustli/article/details/153476664</link><guid>https://blog.csdn.net/tyustli/article/details/153476664</guid><author>tyustli</author><pubDate>Sat, 18 Oct 2025 01:15:00 +0800</pubDate><description><![CDATA[从以下网站下载  源码
当前使用的版本可以在  中找到
编译环境搭建
头文件包含
将  目录加入工程头文件将根目录下 ，  等文件加入工程编译将  文件加入工程编译 内存管理参考文章 FreeRTOS 内存管理将  作为默认配置头文件配置文件中是一个模版，适配到具体的板子上需要修改
初始移植的时候暂时不使用回调，所以改为 0同样，为了后面移植任务切换函数的时候方便调试，将 timer 任务默认关掉
默认配置文件中是 64bit CPU 使用的，改为 32bit CPU
模板文件 copy 过来之后，修改上面]]></description><category></category></item><item><title><![CDATA[ARMv7-A 移植 FreeRTOS 几种特殊的指令]]></title><link>https://blog.csdn.net/tyustli/article/details/153476537</link><guid>https://blog.csdn.net/tyustli/article/details/153476537</guid><author>tyustli</author><pubDate>Sat, 18 Oct 2025 00:15:00 +0800</pubDate><description><![CDATA[CPS = Change Processor State，是 ARMv7 里专门用来快速操作中断屏蔽位和处理器模式的指令。CPSIE <if>CPSID <if>IE = Interrupt Enable（使能 = 打开中断）ID = Interrupt Disable（禁止 = 屏蔽中断）参数 = 哪个中断类型：i → IRQ 中断（普通中断）f → FIQ 中断（快速中断）a → Asynchronous abort (外部数据中止)]]></description><category></category></item><item><title><![CDATA[FreeRTOS 内存管理]]></title><link>https://blog.csdn.net/tyustli/article/details/153476486</link><guid>https://blog.csdn.net/tyustli/article/details/153476486</guid><author>tyustli</author><pubDate>Fri, 17 Oct 2025 19:22:18 +0800</pubDate><description><![CDATA[FreeRTOS 提供了多种内存分配方案，使用不同的  文件来管理内存。每个  文件实现了不同的内存管理策略，旨在适应不同的应用需求。以下是常见的  文件及其区别和应用场景。 实现了一个非常简单的内存分配器。它使用一个固定大小的内存块，通过静态分配的内存池来管理内存。分配的内存块之间没有链接，因此不支持释放内存块。适用于以下场景：
heap_2.c
功能
heap_2.c 提供了一个更复杂的内存分配器。它支持内存块的分配和释放，并且通过链表来管理空闲内存块。每次释放内存时，都会合并相邻的空闲内存块，从而减少]]></description><category></category></item></channel></rss>