<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[大和尚的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/cdm_ylyml</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; cdm_ylyml]]></copyright><item><title><![CDATA[Linux kernel debug & trace: ftrace]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159547662</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159547662</guid><author>cdm_ylyml</author><pubDate>Fri, 24 Apr 2026 10:47:07 +0800</pubDate><description><![CDATA[它实际是由多个不同的追踪工具组成的框架，用于函数调用，内核事件和系统行为的追踪，调试或分析延迟，以及解决发生在用户空间之外的性能问题。Ftrace（function tracer）是内核自带的高性能tracing。]]></description><category></category></item><item><title><![CDATA[Linux kernel debug & trace: tracing机制&debugging方式]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159496396</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159496396</guid><author>cdm_ylyml</author><pubDate>Thu, 26 Mar 2026 15:03:23 +0800</pubDate><description><![CDATA[在使用各种trace方式debug时，必须要有对应的trace记录，即trace数据源（谁在产生trace）。kernel中有多种方式进行trace记录（打点），如，Tracepionts（kernel预埋事件）, Kprobe（动态插入函数）, Ftrace（函数调用）, perf events（软硬件事件）等，但在使用这些方式打点时，需要先确保tracefs文件系统已挂载。]]></description><category></category></item><item><title><![CDATA[Linux kernel debug & trace: Kprobe]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159381659</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159381659</guid><author>cdm_ylyml</author><pubDate>Mon, 23 Mar 2026 13:55:36 +0800</pubDate><description><![CDATA[kprobe是linux kernel提供的一种动态调试机制，可以在不修改内核源码，不中断系统运行的情况下，插入探针（probe）到内核函数或指令处，以便在该位置执行时获取运行信息，调试或收集性能数据。]]></description><category></category></item><item><title><![CDATA[FreeRTOS debug]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159282378</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159282378</guid><author>cdm_ylyml</author><pubDate>Fri, 20 Mar 2026 15:28:04 +0800</pubDate><description><![CDATA[FreeRTOS可以选择性收集关于每个任务所用处理时间量的信息，然后用以表格形式显示此信息。如图每个任务会显示：该任务执行占用的总abs 时间 和 所占所有任务总处理时间的百分比。注意：vTaskGetRunTimeStats()执行期间会禁用中断，它不是作为正常的应用程序运行时的工具，而是作为调试辅助工具。]]></description><category></category></item><item><title><![CDATA[FreeRTOS 事件组 & 钩子函数 & 低功耗支持 & SMP]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159208337</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159208337</guid><author>cdm_ylyml</author><pubDate>Wed, 18 Mar 2026 17:09:03 +0800</pubDate><description><![CDATA[事件主要用于实现多任务间的同步，但事件通信只能是事件类型的通信，无数据传输。与信号量不同的是，它可以实现一对多，多对多的同步。事件组是由一组事件位组成，事件组中的事件位通过位编号来引用（每个bit都是用于指示特定事件是否发生的事件位）。注意。]]></description><category></category></item><item><title><![CDATA[FreeRTOS内存管理]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159157280</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159157280</guid><author>cdm_ylyml</author><pubDate>Tue, 17 Mar 2026 14:24:36 +0800</pubDate><description><![CDATA[每次创建任务，队列，互斥锁，软件定时器，信号量或事件组时，RTOS内核都需要RAM， RAM可以从RTOS堆自动动态分配（或者指定静态分配）。当RTOS内核需要RAM时，可以调用堆分配释放标准函数 pvPortMalloc() 及 vPortFree()进行分配和释放。FreeRTOS 将内存分配 API 保留在其可移植层，可移植层在实现核心 RTOS 功能的源文件之外， 在可移植层选择适用于该系统的堆实现（合适的内存管理算法）]]></description><category></category></item><item><title><![CDATA[FreeRTOS 软件定时器]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159009476</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/159009476</guid><author>cdm_ylyml</author><pubDate>Fri, 13 Mar 2026 16:01:10 +0800</pubDate><description><![CDATA[软件定时器可以设置定时周期，在周期到期时执行定时器的回调函数，以实现让函数在未来的设定时间执行的特性。软件定时器功能很容易实现，但很难高效地实现。如下code所示，可以很容易实现最简单的定时器，但如果系统里有很多定时器，要在每个tick中断里高效管理他们就很难。FreeRTOS的软件定时器是通过tick ISR 通知定时器服务任务执行而实现的（如下所示），因而软件定时器回调函数在定时器服务任务的上下文中执行的。]]></description><category></category></item><item><title><![CDATA[FreeRTOS 任务通知]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/158880949</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/158880949</guid><author>cdm_ylyml</author><pubDate>Tue, 10 Mar 2026 17:03:58 +0800</pubDate><description><![CDATA[直达任务通知最大的优势是仅占用5个字节的RAM，与信号量相比RAM占用空间更小，因而执行速度更快。向任务发送“直达任务通知”会将目标任务通知设为“挂起”状态，而调用xTaskNotifyWait() 读取通知值会将该通知的状态清除为“非挂起”（注意：发送任务是将目标任务通知设为挂起状态，即，发送方不能再次发送通知，而不是指目标任务被设置为挂起状态，目标任务挂起状态是在take或wait时设置为挂起状态的）。任务通知接口丰富，可通过不同接口分别代替二进制信号量，计数信号量，事件组，邮箱等；]]></description><category></category></item><item><title><![CDATA[FreeRTOS 任务与协程（Co-routines）]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/158693958</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/158693958</guid><author>cdm_ylyml</author><pubDate>Thu, 05 Mar 2026 16:32:38 +0800</pubDate><description><![CDATA[中断服务函数是一种需要特别注意的上下文环境，在这个上下文环境中不能使用任何会挂起或阻塞操作，另外，ISR尽可能保持精简短小，快进快出，一般只标记事件的发生，然后通知任务，让对应任务去执行相关处理。每个任务在自己的上下文中执行，不会碰巧依赖于系统内的其他任务或RTOS调度器本身。在设计的时候对任务的运行时间，逻辑，状态等了如指掌，才能设计出好的系统。每个任务都分配有自己的堆栈。中有可能会导致：从而进入阻塞或挂起状态的高优先级任务将会永久独占CPU，永久性剥夺所有更低优先级任务的任何执行时间。]]></description><category></category></item><item><title><![CDATA[FreeRTOS 队列]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/157937319</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/157937319</guid><author>cdm_ylyml</author><pubDate>Tue, 10 Feb 2026 11:11:53 +0800</pubDate><description><![CDATA[FreeRTOS 队列。]]></description><category></category></item><item><title><![CDATA[FreeRTOS]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/157901697</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/157901697</guid><author>cdm_ylyml</author><pubDate>Mon, 09 Feb 2026 17:47:33 +0800</pubDate><description><![CDATA[实时操作系统（RTOS）是一种体积小巧，确定性强（时序可预测的执行模式）的计算机操作系统，通常用于需要在严格时间限制内对外部事件做出反应的嵌入式系统，且RTOS比通用操作系统体积更小，重量更轻，因此非常适用于内存，计算和功率受限的设备。]]></description><category></category></item><item><title><![CDATA[FreeRTOS 锁（信号量）]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/157900929</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/157900929</guid><author>cdm_ylyml</author><pubDate>Mon, 09 Feb 2026 17:45:50 +0800</pubDate><description><![CDATA[调用taskENTER_CRITICAL() 会全局禁用中断（禁止上下文切换），保持在运行状态，直到退出临界区。该方法适用于极短code段的保护，优先级高，响应快，但要注意保持时间尽可能短，否则会影响实时性(调用时，会关闭中断，因而会影响系统响应时间)可用于中断服务程序（ISR）的 taskENTER_CRITICAL() 版本，但需要注意保存进入临界区时的中断掩码状态。互斥锁具有优先级继承机制，如果另一个更高优先级任务B尝试获取相同的互斥锁，则将暂时提高任务B获取互斥锁的优先级。互斥锁不能用在ISR中；]]></description><category></category></item><item><title><![CDATA[基本宏定义]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/156641960</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/156641960</guid><author>cdm_ylyml</author><pubDate>Tue, 06 Jan 2026 11:18:17 +0800</pubDate><description><![CDATA[_user 不是c类型，而是一个宏标记，只有在静态解析（sparse）时才生效，如下code所示，指明了该指针是指向用户空间的指针，不能直接解引用，直接解引用sparse变量会报错。不同类型的指针不能比较，如果类型不一致，编译期会警告/错误（#define是编译器就确定的）非指针类型不能使用解引用。不兼容指针赋值会报错。函数指针不能隐式转换。]]></description><category></category></item><item><title><![CDATA[linux compiler宏定义]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/156416353</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/156416353</guid><author>cdm_ylyml</author><pubDate>Tue, 30 Dec 2025 11:06:58 +0800</pubDate><description><![CDATA[_builtin_expect 是GCC/Clane提供的内建函数，不是linux特有的，主要作用是给编译器分支预测提示（概率信息），告诉编译器，expr的结果更可能等于expected_value,  从而影响编译时代码布局（if分支权重：从而影响指令调度，内联决策，循环展开等）注意：__builtin_expect 影响编译时代码布局，影响的不是if判断本身，而是哪一段代码放在顺序执行路径，哪一段放在跳转路径。]]></description><category></category></item><item><title><![CDATA[CMake基本概念]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122451383</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122451383</guid><author>cdm_ylyml</author><pubDate>Fri, 14 Jan 2022 15:14:08 +0800</pubDate><description><![CDATA[Cmake基本概念]]></description><category></category></item><item><title><![CDATA[Make及Makefile基本概念]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122362580</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122362580</guid><author>cdm_ylyml</author><pubDate>Mon, 10 Jan 2022 14:08:49 +0800</pubDate><description><![CDATA[Make及Makefile基本概念]]></description><category></category></item><item><title><![CDATA[linux时间相关：RTC时间及系统时间]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122254132</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122254132</guid><author>cdm_ylyml</author><pubDate>Fri, 31 Dec 2021 13:52:51 +0800</pubDate><description><![CDATA[linux时间相关：RTC时间及系统时间]]></description><category></category></item><item><title><![CDATA[《C++并发编程实战》学习（2）：管理线程]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122133332</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122133332</guid><author>cdm_ylyml</author><pubDate>Fri, 31 Dec 2021 12:36:57 +0800</pubDate><description><![CDATA[《C++并发编程实战》学习---管理线程
]]></description><category></category></item><item><title><![CDATA[《C++并发编程实战》学习（1）：基本概念]]></title><link>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122129739</link><guid>https://blog.youkuaiyun.com/cdm_ylyml/article/details/122129739</guid><author>cdm_ylyml</author><pubDate>Fri, 24 Dec 2021 17:20:17 +0800</pubDate><description><![CDATA[《C++并发编程实战》的学习笔记]]></description><category></category></item></channel></rss>