竹子_熊猫爱吃
码龄7年
求更新 关注
提问 私信
  • 博客:37,517
    动态:39
    37,556
    总访问量
  • 62
    原创
  • 204
    粉丝
  • 18
    关注
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
加入CSDN时间: 2019-11-17

个人简介:深度学习、嵌入式软件、linux驱动、c++、python

博客简介:

bamboo_tt的博客

查看详细资料
个人成就
  • 获得633次点赞
  • 内容获得0次评论
  • 获得634次收藏
  • 博客总排名92,589名
  • 原力等级
    原力等级
    3
    原力分
    222
    本月获得
    0
创作历程
  • 62篇
    2025年
成就勋章
TA的专栏
  • 嵌入式学习
    7篇
  • 深度学习
    4篇
  • 操作系统
    2篇
  • 进程管理
    1篇
  • 一、进程与线程
    3篇
  • 二、进程间有哪些通讯方式
    6篇
  • 三、多线程冲突了怎么办
    3篇
  • 四、怎么避免死锁?
    4篇
  • 五、什么是悲观锁、乐观锁?
    3篇
  • 六、一个进程最多可以创建多少个线程
    1篇
  • 七、线程崩溃了,进程也会崩溃吗?
    1篇
  • 内存管理
    9篇
  • 一、为什么要有虚拟内存
    5篇
  • 二、malloc 内存分配原理
    4篇
  • 三、内存满了,会发生什么?
    5篇
  • 四、在 4GB 物理内存机器上申请 8GB 内存的分析
    2篇
  • 五、如何避免预读失效与缓存污染问题
    4篇
  • 工具使用与环境安装
    3篇
  • Ubuntu
    1篇
  • vscode

TA关注的专栏 3

TA关注的收藏夹 0

TA关注的社区 1

TA参与的活动 0

兴趣领域 设置
  • 编程语言
    pythonc++
  • 数据结构与算法
    算法
  • 操作系统
    linuxubuntu
创作活动更多

「谁说嵌入式只是调包和焊板子?」—— 2026嵌入式全栈技术征锋令

谁说嵌入式只会“Ctrl+C 调包”和“拿电烙铁焊板子”?2026嵌入式全栈技术征锋令正式启幕! 本次活动专为硬核硬件/软件开发者打造,无论你是刚玩转裸机外设的萌新,还是精通RTOS调度、死磕底层驱动的行业老手,亦或是执掌系统架构的大神,这里都是你证明实力的舞台! 拒绝表面功夫,每一行代码,都有撬动硬件的力量!晒出你的硬核工程实战,为嵌入式开发者的全栈硬实力正名!

213人参与 去参加
  • 最近
  • 文章
  • 专栏
  • 代码仓
  • 资源
  • 收藏
  • 关注/订阅/互动
更多
  • 最近

  • 文章

  • 专栏

  • 代码仓

  • 资源

  • 收藏

  • 关注/订阅/互动

  • 社区

  • 帖子

  • 问答

  • 课程

  • 视频

搜索 取消

如何验证i2c?

使用i2cdetect扫描总线是否有设备存在,断开连接线设备消失,数字代表用的是i2c第几组。#查看对应的i2c驱动是否打开。
原创
博文更新于 2025.11.28 ·
420 阅读 ·
5 点赞 ·
0 评论 ·
7 收藏

I2C 多从机通信原理?

所有从机都共享两根线,通过主机发出的地址帧来判断是否该自己应答,只有匹配地址的从机会拉低 ACK。I2C 多从机通信(地址识别、冲突避免、从机如何知道轮到它)
原创
博文更新于 2025.11.28 ·
395 阅读 ·
5 点赞 ·
0 评论 ·
5 收藏

i2c数据传输时序

● 一句话:I2C 的所有信息(起始、地址、读写、数据、应答、停止)都是在 SCL 高电平期间通过 SDA 线上“被谁拉低/放开”来编码的。● 一句话:起始条件之后,主机会在 8 个 SCL 周期内发出“7 位地址 + 1 位读写位”,然后等一个 ACK。● 一句话:地址成功后,后面就是一串“8 位数据 + 1 位 ACK”的重复周期,每个字节至少 9 个时钟。○ 作用:主机可以不松总线,在一次会话里先写再读(或切换从机),常用于“先写寄存器地址,再读数据”。
原创
博文更新于 2025.11.28 ·
536 阅读 ·
3 点赞 ·
0 评论 ·
4 收藏

I2C 的输入/输出切换原理是什么?

I2C 线上设备不会主动输出高电平,只会在需要时把线拉低,通过硬件开漏结构实现输入输出的自动切换。I2C 的输入输出切换(主机和从机如何控制 SDA/SCL)
原创
博文更新于 2025.11.28 ·
481 阅读 ·
4 点赞 ·
0 评论 ·
6 收藏

i2c的物理层原理?

一句话总结:通过一次写入寄存器地址、一次读取数据,MPU6050 按 I2C 规则返回多个字节的加速度数据。一句话总结:I2C 用两根线,通过上拉电阻保持高电平,所有设备只能拉低线路,从而实现稳定的双向通信。● MCU 发出 TMP75 的地址字节,TMP75 在 ACK 阶段拉低 SDA 表示已识别地址。● 每发送一个字节后,发送设备释放 SDA,由接收设备决定是否拉低 SDA 作为 ACK。一句话总结:不同外设通过地址区分,不会互相干扰,体现 I2C 的共享总线优势。
原创
博文更新于 2025.11.28 ·
405 阅读 ·
5 点赞 ·
0 评论 ·
3 收藏

如何使用libgpiod 控制 IO?

libgpiod 是什么● libgpiod 通过 字符设备接口 访问 GPIO:○ 设备文件:/dev/gpiochip0、/dev/gpiochip1 …○ 不再用老的 /sys/class/gpio 方式。● libgpiod 提供:○ 命令行工具:gpiodetect / gpioinfo / gpioset / gpioget / gpiomon○ C 语言库:gpiod.h + libgpiod.so○ C++ / Python 封装(此处不展开)
原创
博文更新于 2025.11.25 ·
154 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

如何验证gpio?

1、 查看 gpio 是否被使用和复用功能#查看已经被使用的GPIO,不会显示未使用和复用的GPIO#每个物理脚被复用成了什么功能(I2C / SD / USB / 纯 GPIO),有没有被占用(MUX UNCLAIMED) (GPIO UNCLAIMED) #分别代表没有复用功能和gpio中也没复用vcc5v0-otg-regulator gpio0:5 function usb group vcc5v0-otg-en #功能复用为电源管理节点,被当成gpio 0_5使用。
原创
博文更新于 2025.11.25 ·
72 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

gpio常见模式和编号计算方式

echo 1 > /sys/class/gpio/gpio36/value # 输出高电平,约 3.3V。cat /sys/class/gpio/gpio36/value # 读取当前电平(0 或 1)echo 0 > /sys/class/gpio/gpio36/value # 输出低电平,约 0V。echo out > /sys/class/gpio/gpio36/direction # 设置为输出。2、输出模式(out)1、输入模式(in)
原创
博文更新于 2025.11.25 ·
62 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

2、为什么要用“虚拟地址”访问内存

程序看到的是“虚拟门牌号”,内核负责查表找到“真实房子”;这层“幻觉”让多进程世界既安全又高效。
原创
博文更新于 2025.10.31 ·
324 阅读 ·
5 点赞 ·
0 评论 ·
10 收藏

1、什么是虚拟内存地址

虚拟内存地址是程序员眼中的“门牌号”,物理内存地址才是真正的“地理位置”,CPU 的内存管理单元(MMU)负责查地图,把门牌号翻译成真实地块。
原创
博文更新于 2025.10.31 ·
341 阅读 ·
3 点赞 ·
0 评论 ·
5 收藏

4、缓存污染详解与解决方案

缓存污染指的是一批短暂访问的数据占据了缓存空间,把真正的热点数据挤出内存,导致缓存命中率骤降。🧠缓存就像冰箱,原本放着常吃的菜。突然你批量塞进一堆“只用一次”的食材(例如宴会剩菜),导致平时常吃的菜被挤出来,后面要再吃还得去超市(= 磁盘 I/O)。项目缓存结构Active / Inactive 双链表Young / Old 分区 LRU晋升机制第二次访问才晋升 Active第二次访问且时间间隔 > 1s 才晋升 Young目的避免一次性访问页污染活跃缓存。
原创
博文更新于 2025.10.31 ·
866 阅读 ·
11 点赞 ·
0 评论 ·
17 收藏

1、操作系统虚拟内存机制

问题场景原因解决方式malloc(8 GB) 直接失败32 位系统地址空间限制只能 3 GB64 位系统 malloc 失败overcommit = 0 拒绝超配设置为 1程序被 “Killed”OOM Killer 启动增加物理内存或启用 Swap性能变慢、磁盘“沙沙”响频繁 Swap In/Out调低 swappiness、排查大内存进程。
原创
博文更新于 2025.10.31 ·
410 阅读 ·
3 点赞 ·
0 评论 ·
3 收藏

嵌入式常用通信协议对比汇总

嵌入式通信协议对比摘要: 本文系统对比了12种常见嵌入式接口协议,分为5大类:1)通用信号类(GPIO/PWM)用于基础控制;2)低速通信类(UART/I2C/SPI)适合传感器和外设;3)工业总线(CAN/FlexRay)具备抗干扰能力;4)高速多媒体接口(MIPI DSI/CSI)支持视频传输;5)存储扩展类(FlexBus/DSMC)用于外设连接。通过对比速率、同步方式、全双工特性等参数,提供了协议选型决策表,指出GPIO最简单,FlexRay可靠性最高,MIPI接口速度最快(6Gbps)。不同协议构
原创
博文更新于 2025.10.25 ·
853 阅读 ·
3 点赞 ·
0 评论 ·
7 收藏

Transform基础详解

● Transform 在 Transformer 里指 特征空间的变换:让每个输入向量先“看见全局”,再重写自己的表示。“杯子”token 关注“把手/边缘/高光”token,学习整体—部件关系。○ 装配识别:零件 A 的 token 关注孔/边/法线 token,学习“配合—约束”。● 多头分工:不同头侧重不同关系(语法、局部纹理、长程依赖),过多头可能冗余。● 目标:更好地建模全局依赖与长程关系(语言、视觉、多模态均适用)。○ 代词指代消解、长依赖语义重建(“它”更关注“苹果”而非“她”)。
原创
博文更新于 2025.10.24 ·
903 阅读 ·
22 点赞 ·
0 评论 ·
5 收藏

3.1、调整文件页与匿名页回收倾向

🧠swappiness 越大,系统越“爱用仓库”;swappiness 越小,系统越“勤快清理缓存”。📦 文件页 = 临时缓存,随时扔掉没关系💾 匿名页 = 程序状态,搬来搬去会卡顿把 swappiness 调小(如 10 或 0)能显著提升系统流畅度。
原创
博文更新于 2025.10.24 ·
337 阅读 ·
5 点赞 ·
0 评论 ·
7 收藏

4、如何保护进程不被 OOM 杀掉

Linux系统内存不足时会触发OOM机制,通过oom_badness()函数对进程打分,选择占用内存多且分数高的进程终止。用户可通过调整/proc/[pid]/oom_score_adj参数(-1000到1000)来控制进程被杀优先级,值为-1000表示"免死金牌"。建议对系统关键服务设为-1000,普通业务进程保持默认值0,可牺牲任务设为正数。错误配置可能导致系统异常,合理使用oom_score_adj和cgroup可实现内存管理优化。
原创
博文更新于 2025.10.24 ·
665 阅读 ·
23 点赞 ·
0 评论 ·
6 收藏

3、内存回收的性能影响

频繁回收内存 = 不停“搬家” → I/O 瓶颈 → 系统变慢。
原创
博文更新于 2025.10.24 ·
681 阅读 ·
13 点赞 ·
0 评论 ·
18 收藏

2、哪些内存可以被回收

Linux内存回收机制主要针对文件页和匿名页两类内存。文件页来自文件缓存,可直接丢弃或写回磁盘;匿名页需通过Swap机制写入交换分区。系统基于LRU算法维护活跃和非活跃链表,优先回收不常用的内存页:干净文件页>脏文件页>匿名页。这种机制能在不终止进程的前提下高效管理内存,确保系统稳定运行。内存回收优先级体现了Linux"尽量写盘不杀进程"的设计理念。
原创
博文更新于 2025.10.24 ·
751 阅读 ·
10 点赞 ·
0 评论 ·
9 收藏

1、内存分配的全过程

→ malloc() 调用 → 虚拟地址空间扩大(通过 brk/mmap,尚未映射物理页)阶段技术行为生活类比malloc()申请虚拟内存预定房间第一次访问缺页中断你到前台登记入住分配物理页前台分配房间并登记kswapd后台清理旧房清理空房间以供入住你等清洁工打扫完才能入住同步等待OOM Killer房间爆满时赶走住客强制清理占用者malloc 分配的是虚拟内存,不是物理内存;第一次访问才触发缺页中断,由内核分配物理页并建立映射;若内存紧张,内核通过。
原创
博文更新于 2025.10.24 ·
1028 阅读 ·
12 点赞 ·
0 评论 ·
26 收藏

3、预读机制与预读失效

预读机制(Readahead)是操作系统或数据库的一种性能优化策略:当程序读取某个文件块时,系统会预先把后续相邻的数据块也加载到内存中以减少将来可能发生的磁盘 I/O。📖例子(Linux Page Cache)磁盘最小读取单位是 4KB block;操作系统不仅读 [0,4KB),还会额外读 [4KB,8KB)、[8KB,12KB)、[12KB,16KB);这样下一次若访问 8KB 数据时,就可以直接命中缓存。📈减少磁盘 I/O 次数,提高吞吐量。
原创
博文更新于 2025.10.21 ·
391 阅读 ·
4 点赞 ·
0 评论 ·
9 收藏
加载更多