自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux kernel debug & trace: ftrace

它实际是由多个不同的追踪工具组成的框架,用于函数调用,内核事件和系统行为的追踪,调试或分析延迟,以及解决发生在用户空间之外的性能问题。Ftrace(function tracer)是内核自带的高性能tracing。

2026-04-24 10:47:07 192

原创 Linux kernel debug & trace: tracing机制&debugging方式

在使用各种trace方式debug时,必须要有对应的trace记录,即trace数据源(谁在产生trace)。kernel中有多种方式进行trace记录(打点),如,Tracepionts(kernel预埋事件), Kprobe(动态插入函数), Ftrace(函数调用), perf events(软硬件事件)等,但在使用这些方式打点时,需要先确保tracefs文件系统已挂载。

2026-03-26 15:03:23 400

原创 Linux kernel debug & trace: Kprobe

kprobe是linux kernel提供的一种动态调试机制,可以在不修改内核源码,不中断系统运行的情况下,插入探针(probe)到内核函数或指令处,以便在该位置执行时获取运行信息,调试或收集性能数据。

2026-03-23 13:55:36 438

原创 FreeRTOS debug

FreeRTOS可以选择性收集关于每个任务所用处理时间量的信息,然后用以表格形式显示此信息。如图每个任务会显示:该任务执行占用的总abs 时间 和 所占所有任务总处理时间的百分比。注意:vTaskGetRunTimeStats()执行期间会禁用中断,它不是作为正常的应用程序运行时的工具,而是作为调试辅助工具。

2026-03-20 15:28:04 260

原创 FreeRTOS 事件组 & 钩子函数 & 低功耗支持 & SMP

事件主要用于实现多任务间的同步,但事件通信只能是事件类型的通信,无数据传输。与信号量不同的是,它可以实现一对多,多对多的同步。事件组是由一组事件位组成,事件组中的事件位通过位编号来引用(每个bit都是用于指示特定事件是否发生的事件位)。注意。

2026-03-18 17:09:03 281

原创 FreeRTOS内存管理

每次创建任务,队列,互斥锁,软件定时器,信号量或事件组时,RTOS内核都需要RAM, RAM可以从RTOS堆自动动态分配(或者指定静态分配)。当RTOS内核需要RAM时,可以调用堆分配释放标准函数 pvPortMalloc() 及 vPortFree()进行分配和释放。FreeRTOS 将内存分配 API 保留在其可移植层,可移植层在实现核心 RTOS 功能的源文件之外, 在可移植层选择适用于该系统的堆实现(合适的内存管理算法)

2026-03-17 14:24:36 446

原创 FreeRTOS 软件定时器

软件定时器可以设置定时周期,在周期到期时执行定时器的回调函数,以实现让函数在未来的设定时间执行的特性。软件定时器功能很容易实现,但很难高效地实现。如下code所示,可以很容易实现最简单的定时器,但如果系统里有很多定时器,要在每个tick中断里高效管理他们就很难。FreeRTOS的软件定时器是通过tick ISR 通知定时器服务任务执行而实现的(如下所示),因而软件定时器回调函数在定时器服务任务的上下文中执行的。

2026-03-13 16:01:10 281

原创 FreeRTOS 任务通知

直达任务通知最大的优势是仅占用5个字节的RAM,与信号量相比RAM占用空间更小,因而执行速度更快。向任务发送“直达任务通知”会将目标任务通知设为“挂起”状态,而调用xTaskNotifyWait() 读取通知值会将该通知的状态清除为“非挂起”(注意:发送任务是将目标任务通知设为挂起状态,即,发送方不能再次发送通知,而不是指目标任务被设置为挂起状态,目标任务挂起状态是在take或wait时设置为挂起状态的)。任务通知接口丰富,可通过不同接口分别代替二进制信号量,计数信号量,事件组,邮箱等;

2026-03-10 17:03:58 371

原创 FreeRTOS 任务与协程(Co-routines)

中断服务函数是一种需要特别注意的上下文环境,在这个上下文环境中不能使用任何会挂起或阻塞操作,另外,ISR尽可能保持精简短小,快进快出,一般只标记事件的发生,然后通知任务,让对应任务去执行相关处理。每个任务在自己的上下文中执行,不会碰巧依赖于系统内的其他任务或RTOS调度器本身。在设计的时候对任务的运行时间,逻辑,状态等了如指掌,才能设计出好的系统。每个任务都分配有自己的堆栈。中有可能会导致:从而进入阻塞或挂起状态的高优先级任务将会永久独占CPU,永久性剥夺所有更低优先级任务的任何执行时间。

2026-03-05 16:32:38 434

原创 FreeRTOS 队列

FreeRTOS 队列。

2026-02-10 11:11:53 275

原创 FreeRTOS

实时操作系统(RTOS)是一种体积小巧,确定性强(时序可预测的执行模式)的计算机操作系统,通常用于需要在严格时间限制内对外部事件做出反应的嵌入式系统,且RTOS比通用操作系统体积更小,重量更轻,因此非常适用于内存,计算和功率受限的设备。

2026-02-09 17:47:33 551

原创 FreeRTOS 锁(信号量)

调用taskENTER_CRITICAL() 会全局禁用中断(禁止上下文切换),保持在运行状态,直到退出临界区。该方法适用于极短code段的保护,优先级高,响应快,但要注意保持时间尽可能短,否则会影响实时性(调用时,会关闭中断,因而会影响系统响应时间)可用于中断服务程序(ISR)的 taskENTER_CRITICAL() 版本,但需要注意保存进入临界区时的中断掩码状态。互斥锁具有优先级继承机制,如果另一个更高优先级任务B尝试获取相同的互斥锁,则将暂时提高任务B获取互斥锁的优先级。互斥锁不能用在ISR中;

2026-02-09 17:45:50 527

原创 基本宏定义

_user 不是c类型,而是一个宏标记,只有在静态解析(sparse)时才生效,如下code所示,指明了该指针是指向用户空间的指针,不能直接解引用,直接解引用sparse变量会报错。不同类型的指针不能比较,如果类型不一致,编译期会警告/错误(#define是编译器就确定的)非指针类型不能使用解引用。不兼容指针赋值会报错。函数指针不能隐式转换。

2026-01-06 11:18:17 236

原创 linux compiler宏定义

_builtin_expect 是GCC/Clane提供的内建函数,不是linux特有的,主要作用是给编译器分支预测提示(概率信息),告诉编译器,expr的结果更可能等于expected_value, 从而影响编译时代码布局(if分支权重:从而影响指令调度,内联决策,循环展开等)注意:__builtin_expect 影响编译时代码布局,影响的不是if判断本身,而是哪一段代码放在顺序执行路径,哪一段放在跳转路径。

2025-12-30 11:06:58 358

原创 CMake基本概念

Cmake基本概念

2022-01-14 15:14:08 2350 1

原创 Make及Makefile基本概念

Make及Makefile基本概念

2022-01-10 14:08:49 1053

原创 linux时间相关:RTC时间及系统时间

linux时间相关:RTC时间及系统时间

2021-12-31 13:52:51 7327

原创 《C++并发编程实战》学习(2):管理线程

《C++并发编程实战》学习---管理线程

2021-12-31 12:36:57 808

原创 《C++并发编程实战》学习(1):基本概念

《C++并发编程实战》的学习笔记

2021-12-24 17:20:17 1492

空空如也

空空如也

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

TA关注的人

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