<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[zzzlearning的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/zzzlearning</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; zzzlearning]]></copyright><item><title><![CDATA[C/C++柔性数组]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/151832879</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/151832879</guid><author>zzzlearning</author><pubDate>Thu, 18 Sep 2025 16:20:12 +0800</pubDate><description><![CDATA[柔性数组允许你在一个结构体的末尾定义一个没有指定大小的数组。这个数组的大小可以在运行时动态确定。int length;// ... 其他成员 ...// 柔性数组成员data[]也可以写成data[0]（某些老编译器可能只支持这种形式，但 C99 标准推荐使用[]柔性数组是 C 语言中一种非常优雅和高效地处理可变长结构体的方法。它通过将元数据和实际数据存储在单块连续内存中，带来了性能提升和管理便利。]]></description><category></category></item><item><title><![CDATA[内存页和TLB缓存]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150975488</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150975488</guid><author>zzzlearning</author><pubDate>Fri, 29 Aug 2025 10:01:01 +0800</pubDate><description><![CDATA[摘要： 内存页是操作系统管理内存的最小单位（通常4KB），用于虚拟内存映射和进程隔离。TLB是CPU内部的硬件缓存，用于加速虚拟地址到物理地址的转换，减少访问主存页表的开销。内存页支持高效内存管理（如共享、按需加载），而TLB通过缓存常用地址映射提升性能，其命中率显著影响程序速度。两者协同工作，优化现代计算机的内存访问效率。]]></description><category></category></item><item><title><![CDATA[子进程、父进程、僵尸进程和孤儿进程]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150975267</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150975267</guid><author>zzzlearning</author><pubDate>Fri, 29 Aug 2025 09:54:16 +0800</pubDate><description><![CDATA[本文介绍了操作系统中父进程、子进程、孤儿进程和僵尸进程的核心概念及相互关系。父进程通过fork()创建子进程，子进程继承父进程资源并独立运行。僵尸进程是已终止但未被父进程回收的子进程，会占用系统资源；孤儿进程是父进程终止后仍在运行的子进程，会被init进程自动回收。文章通过比喻和对比表格清晰解释了这些概念，并提供了防止僵尸进程和孤儿进程的策略，如父进程调用wait()或捕获SIGCHLD信号，以及正确处理子进程终止后的资源回收。]]></description><category></category></item><item><title><![CDATA[C/C++ 指针与函数]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150774316</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150774316</guid><author>zzzlearning</author><pubDate>Mon, 25 Aug 2025 17:02:31 +0800</pubDate><description><![CDATA[技术优点缺点适用场景返回值指针灵活易产生悬挂指针一般不推荐动态内存控制生命周期需手动管理内存需要长期存在的数据静态变量简单安全全局状态，线程不安全单线程简单场景参数传递最安全需要预先定义变量推荐使用函数指针实现回调语法复杂策略模式、回调机制推荐优先使用参数传递和直接返回值的方式，避免不必要的指针操作。]]></description><category></category></item><item><title><![CDATA[文件IO和标准IO]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150760144</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150760144</guid><author>zzzlearning</author><pubDate>Mon, 25 Aug 2025 09:47:10 +0800</pubDate><description><![CDATA[文件I/O与标准I/O是两种不同的输入输出机制。文件I/O（Unbuffered I/O）是操作系统提供的底层无缓冲接口，通过文件描述符操作，实时性强但效率较低；标准I/O（Buffered I/O）是C标准库提供的高级带缓冲接口，通过文件指针操作，利用缓冲区减少系统调用，效率更高但实时性较差。标准I/O适合大多数普通文件操作，而文件I/O适用于需要精细控制或实时性要求的场景。两者可通过fdopen()和fileno()相互转换。]]></description><category></category></item><item><title><![CDATA[串行通信协议(UART、I2C、SPI)]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150640578</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150640578</guid><author>zzzlearning</author><pubDate>Sat, 23 Aug 2025 14:13:33 +0800</pubDate><description><![CDATA[文章摘要： 本文介绍了三种常见的串行通信协议(UART、I2C、SPI)及其工作原理。重点解析了I2C协议的地址读写位规则、上拉电阻的必要性以及SCL/SDA的时序配合机制。通过Arduino与电脑的UART通信实例，展示了串口在设备间数据交换中的应用，包括硬件连接方式和软件实现代码。这些通信协议作为微控制器与外设交互的&quot;语言&quot;，在嵌入式系统中扮演着重要角色。文章还对比了串行与并行通信的优缺点，解释了现代系统更倾向于使用高速串行通信的原因。]]></description><category></category></item><item><title><![CDATA[进程间通信]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150618166</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150618166</guid><author>zzzlearning</author><pubDate>Fri, 22 Aug 2025 20:47:50 +0800</pubDate><description><![CDATA[本文介绍了操作系统中的进程间通信（IPC）机制。首先解释操作系统作为管理硬件和软件资源的系统软件角色，以及进程与线程的区别。重点阐述了6种主流IPC方式：管道（Pipe）、消息队列（Message Queue）、共享内存（Shared Memory）、信号量（Semaphore）、信号（Signal）和套接字（Socket），分析其原理、特点及适用场景。通过对比表格直观展示各机制差异，并给出选择建议，如共享内存+信号量的高性能组合。最后提供了匿名管道的C++代码示例，展示父子进程通过管道通信的实现过程。线程]]></description><category></category></item><item><title><![CDATA[虚拟内存与物理内存的映射关系]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150585815</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150585815</guid><author>zzzlearning</author><pubDate>Thu, 21 Aug 2025 16:22:16 +0800</pubDate><description><![CDATA[页 (Page)是虚拟内存的单位。页框 (Page Frame)是物理内存的单位。页表 (Page Table)负责把虚拟页号映射到物理页框号，从而让进程用虚拟地址就能访问到真实的物理内存。虚拟内存和物理内存通过“页表”这个中间数据结构联系起来。页表存储了“虚拟页”到“物理页框”的映射关系。当程序使用虚拟地址访问内存时，CPU中的MMU硬件会自动查阅页表，找到对应的物理地址，从而访问到真正的物理内存。这个过程对应用程序是完全透明的。]]></description><category></category></item><item><title><![CDATA[Linux 进程调度]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150561768</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150561768</guid><author>zzzlearning</author><pubDate>Wed, 20 Aug 2025 20:34:01 +0800</pubDate><description><![CDATA[实时进程使用SCHED_FIFO或SCHED_RR策略，拥有最高优先级，总是优先于普通进程运行。普通进程由CFS管理，其核心思想是通过vruntime和红黑树来实现按权重（nice值）公平分配 CPU，同时兼顾响应性和吞吐量。CFS 的成功在于它用简单而优雅的数学模型（公平分配）取代了之前调度器中复杂且容易出错的启发式规则。VIP客人->实时进程-> 必须立刻满足。大厅客人->普通进程-> 要讲公平。厨师换锅->上下文切换-> 有开销。愚蠢策略->FIFO, SJF-> 会导致有人饿死。]]></description><category></category></item><item><title><![CDATA[Buildroot（二）]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150229700</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150229700</guid><author>zzzlearning</author><pubDate>Mon, 11 Aug 2025 22:37:19 +0800</pubDate><description><![CDATA[Buildroot构建嵌入式Linux系统的固件通常包含以下核心组件：Bootloader（如U-Boot）、Linux内核（zImage/uImage）、设备树文件（.dtb）和根文件系统（rootfs.ext4等）。这些组件按特定布局打包，如Bootloader位于存储介质起始位置，内核紧随其后。Buildroot通过工具（如genimage）按照配置文件将这些组件整合为最终镜像（如sdcard.img）。具体组成和布局由目标硬件和Buildroot配置决定。]]></description><category></category></item><item><title><![CDATA[Buildroot（一）]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/150229510</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/150229510</guid><author>zzzlearning</author><pubDate>Mon, 11 Aug 2025 22:36:08 +0800</pubDate><description><![CDATA[Buildroot│├── 编译 U-Boot → 提供 bootloader├── 编译 Linux 内核 → 提供 OS 核心├── 编译设备树（DTS → DTB）→ 描述硬件└── 生成根文件系统（rootfs）→ 包含用户应用│└── 最终打包成固件（如 sdcard.img）U-Boot加载Linux 内核设备树。Linux 内核使用设备树初始化硬件，并挂载rootfs。用户应用运行在 Linux 系统上，通过驱动访问硬件。这样，Buildroot。]]></description><category></category></item><item><title><![CDATA[解决cursor每次ssh连接远程都要下载vscode-server]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/149180797</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/149180797</guid><author>zzzlearning</author><pubDate>Mon, 07 Jul 2025 20:17:34 +0800</pubDate><description><![CDATA[摘要：本文介绍了在VS Code中关闭自动更新的方法。首先使用快捷键Ctrl+Shift+P打开命令面板，选择&quot;Open Settings(UI)&quot;进入设置界面；然后在设置中找到更新相关选项，取消勾选所有自动更新功能。通过这两步简单操作，即可禁用VS Code的自动更新功能。]]></description><category></category></item><item><title><![CDATA[解决docker pull镜像慢的问题]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/148761512</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/148761512</guid><author>zzzlearning</author><pubDate>Thu, 19 Jun 2025 11:30:14 +0800</pubDate><description><![CDATA[本文介绍在Ubuntu23.04上优化Docker使用的方法。首先通过修改daemon.json将镜像存储路径设置为/disk5/docker，并解决权限问题；其次配置网络代理加速镜像拉取；最后演示hello-world镜像测试流程。注意事项包括：权限管理（避免频繁使用sudo）、容器退出方式、数据持久化策略（仅-v挂载目录可持久化）以及定期清理未使用资源的方法。文末还提供了磁盘空间监控和权限修复等实用命令。
]]></description><category></category></item><item><title><![CDATA[【C/C++】从源码到执行：程序运行的完整生命周期解析]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/147516450</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/147516450</guid><author>zzzlearning</author><pubDate>Fri, 25 Apr 2025 17:07:34 +0800</pubDate><description><![CDATA[从代码到运行，计算机通过分层处理将人类可读的指令转化为物理硬件能执行的电平信号。理解这一过程有助于调试程序（如链接错误、符号未定义）和优化性能（如减少编译依赖、选择JIT策略）。C/C++静态库和动态库（共享库）]]></description><category></category></item><item><title><![CDATA[TensorFlow]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/147074097</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/147074097</guid><author>zzzlearning</author><pubDate>Wed, 09 Apr 2025 08:45:11 +0800</pubDate><description><![CDATA[张量是多维数组的泛化。在数学中，张量可以看作是向量和矩阵的高维推广。在机器学习和深度学习中，张量是用于表示数据和模型参数的基本数据结构。标量（0维张量）：一个单独的数值，例如 5。向量（1维张量）：一维数组，例如 [1,2,3]。矩阵（2维张量）：二维数组，例如12341&2\\3&413​24​高维张量：超过二维的数组，例如一个三维张量可以表示为123456781&2\\3&45&6\\7&8​13​24​57​68​​​。]]></description><category></category></item><item><title><![CDATA[嵌入式开发领域常见的专业术语及其解释]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/145757742</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/145757742</guid><author>zzzlearning</author><pubDate>Thu, 20 Feb 2025 16:50:25 +0800</pubDate><description><![CDATA[在嵌入式开发领域一些常见的专业术语及其解释。]]></description><category></category></item><item><title><![CDATA[RAM和ROM的区别]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/145637735</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/145637735</guid><author>zzzlearning</author><pubDate>Fri, 14 Feb 2025 17:12:15 +0800</pubDate><description><![CDATA[内存影响的是设备同时运行多个应用程序的能力，而存储则决定了你可以安装多少应用程序以及保存多少个人文件。所以，当手机重启后，手机重启前运行的程序（例如微信聊天界面）会被清除。而图片、聊天记录之类的数据还在。“内存”和“存储”是计算设备中的两个不同概念，它们各自有着不同的功能和用途。]]></description><category></category></item><item><title><![CDATA[使用kendryte官方的C SDK 和toolchain 对k210进行开发]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/144909556</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/144909556</guid><author>zzzlearning</author><pubDate>Fri, 03 Jan 2025 14:44:44 +0800</pubDate><description><![CDATA[那么现在就得到三个文件：kendryte-toolchain、kendryte-standalone-sdk、kendryte-standalone-demo。清空当前build、将demo文件里面的face_detect复制到sdk的src文件夹中、编译face_detect。2、硬件环境：Sipped 的 Maix Ⅰ系列开发板 Maix bit（k210）1、获取的工具链放在/opt 路径下（也可以是其它路径，看自己的习惯）三、获取C Demo （自己根据 c sdk写一个demo也行）]]></description><category></category></item><item><title><![CDATA[MaixBit k210学习记录]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/144789597</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/144789597</guid><author>zzzlearning</author><pubDate>Sat, 28 Dec 2024 15:09:08 +0800</pubDate><description><![CDATA[唯一需要注意的一点是，如果你使用的是Maix bit开发板（Maix-I K210）的话，最新版本的MaixPy v4 是不支持的，所以克隆仓库的时候不要克隆。想要快速上手还是推荐使用Window+MaixPy IDE或者Linux + MaixPy IDE进行开发，后续再使用c。目标实现：在虚拟机（Ubuntu）中，实现对Maix bit（k210）开发板的开发。以上是关于使用MaixPy IDE对开发板进行开发的方法，使用。]]></description><category></category></item><item><title><![CDATA[NFS和Samba环境搭建及交叉编译指南]]></title><link>https://blog.youkuaiyun.com/zzzlearning/article/details/144762452</link><guid>https://blog.youkuaiyun.com/zzzlearning/article/details/144762452</guid><author>zzzlearning</author><pubDate>Fri, 27 Dec 2024 11:03:21 +0800</pubDate><description><![CDATA[Ubuntu 同时作为 Samba 和 NFS 服务器，Windows 作为 Samba 客户端，而嵌入式设备作为 NFS 客户端。这将允许 Windows 用户通过 Samba 访问 Ubuntu 上的数据，同时让嵌入式设备通过 NFS 进行高效的数据交换。]]></description><category></category></item></channel></rss>