加载中...
avatar
文章
482
标签
57
分类
62
首页
页面
  • 归档
  • 标签
  • 分类
  • 图库
  • 说说
  • 示例
清单
  • 音乐
  • 电影
  • 书籍
  • 游戏
  • 歌曲
留言板
关于
Logowdfk-prog的个人博客数据结构 返回首页
搜索
首页
页面
  • 归档
  • 标签
  • 分类
  • 图库
  • 说说
  • 示例
清单
  • 音乐
  • 电影
  • 书籍
  • 游戏
  • 歌曲
留言板
关于

数据结构

发表于2025-10-03|更新于2026-02-13|rt-thread
|总字数:33|阅读时长:1分钟|浏览量:|评论数:

数据结构

  • 二叉搜索树、B树、B+树、AVL树、红黑树
  • 树堆(Treap)和红黑树(RB-Tree)各有哪些优劣?
文章作者: Liya Huang
文章链接: https://wdfk-prog.space/posts/79666db/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 wdfk-prog的个人博客!
rt-thread
赞助
  • 微信
    微信
  • 支付寶
    支付寶
cover of previous post
上一篇
调度
调度初始化 根据支持的最大优先级,初始化不同的链表 123456789for (offset = 0; offset < RT_THREAD_PRIORITY_MAX; offset ++){ rt_list_init(&rt_thread_priority_table[offset]);} 初始化就绪优先级组 优先级>32, 初始化线程就绪表 位图 软件实现 RT-Thread的位图调度算法分析 一种新的高效的寻找字节最低非0位的有效算法 硬件实现 1234567891011121314151617181920212223__asm int __rt_ffs(int value){ CMP r0, #0x00 // 比较寄存器r0和0,设置条件标志 BEQ exit // 如果r0等于0(即输入值为0),则跳转到exit标签 RBIT r0, r0 // 反转r0中的位,最低位变为最高位,最高位变为最低位 CLZ r...
cover of next post
下一篇
内核对象
内核对象内核对象管理架构RT-Thread 采用内核对象管理系统来访问 / 管理所有内核对象,内核对象包含了内核中绝大部分设施,这些内核对象可以是静态分配的静态对象,也可以是从系统内存堆中分配的动态对象。 通过这种内核对象的设计方式,RT-Thread 做到了不依赖于具体的内存分配方式,系统的灵活性得到极大的提高。 RT-Thread 内核对象包括:线程,信号量,互斥量,事件,邮箱,消息队列和定时器,内存池,设备驱动等。对象容器中包含了每类内核对象的信息,包括对象类型,大小等。对象容器给每类内核对象分配了一个链表,所有的内核对象都被链接到该链表上,RT-Thread 的内核对象容器及链表如下图所示: 下图则显示了 RT-Thread 中各类内核对象的派生和继承关系。对于每一种具体内核对象和对象控制块,除了基本结构外,还有自己的扩展属性(私有属性),例如,对于线程控制块,在基类对象基础上进行扩展,增加了线程状态、优先级等属性。这些属性在基类对象的操作中不会用到,只有在与具体线程相关的操作中才会使用。因此从面向对象的观点,可以认为每一种具体对象是抽象对象的派生,继承了基本...
相关推荐
cover
2025-10-03
fatfs
fatfs[TOC] 硬盘的物理结构:概述 盘片(platter) 磁头(head) 磁道(track) 扇区(sector) 柱面(cylinder) 盘片 片面 和 磁头硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。如下图: 图1 扇区 和 磁道下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图中绿色部分),对于老式磁盘,每个扇区存储容量是相同的(也就是每个磁道的容量是相同的,但不同磁道的数据密度是不同的,半径越小的磁道的密度越大,这个是怎么做到的,还不清楚,但我个人猜测是因为旋转角度,转动相同的角度,外部扇区移动的距离更长,而内部扇区移动距离短,就是通过磁头每次移动是固定角度的,但由于磁臂的长度不同,分别对应不同的磁道,那对于外围的扇区,由于磁臂较长,每次移动固定角度,则划过的...
cover
2025-10-03
RT-Thread 学习笔记
RT-Thread 学习笔记 其他资料 1.1. fatfs 1.1.1. fatfs.md 2. ARM指针寄存器.md 3. CAN驱动.md 4. completion.md 5. condvar.md 6. dataqueue.md 7. DFS.md 8. fal.md 9. fatfs.md 10. FINSH模块.md 11. I2C驱动.md 12. IDLE线程.md 13. IPC.md 14. littlefs.md 15. map文件分析.md 16. pipe.md 17. PM电源管理.md 18. readme.md 19. ringblock.md 20. ringbuffer.md 21. romfs.md 22. RTC.md 23. RT-LINK.md 24. RTT系统初始化.md 25. SDMMC.md 26. SIGNAL.md 27. SPI驱动.md 28. tmpfs.md 29. ULOG.md 30. USB.md 31. waitqueue.md 32. 串口驱动.md 33. 调度.md 34. 工作队列...
cover
2025-10-03
map文件分析
map文件分析1234567891011121314151617181920212223242526272829303132333435363738394041424344454647Image$$ER_IROM1$$Base 0x90000000 Number 0 anon$$obj.o ABSOLUTE__Vectors 0x90000000 Data 4 startup_stm32h750xx.o(RESET)__Vectors_End 0x90000298 Data 0 startup_stm32h750xx.o(RESET)__main 0x90000299 Thumb Code 0 entry.o(.ARM.Collect$$$$00000000)_main_st...
cover
2025-10-03
pipe
pipepipe: 匿名管道。pipe 是一种 IPC 机制,他的作用是用作有血缘进程间完成数据传递,只能从一端写入,从另外一端读出。为了解决 pipe 的弊端,linux 又引入了 mkfifo(实名管道)。 创建管道12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455rt_pipe_t *rt_pipe_create(constchar *name, intbufsz){ //分配管道内存,初始化锁,初始化等待队列,初始化条件变量 rt_mutex_init(&pipe->lock, name, RT_IPC_FLAG_FIFO); rt_wqueue_init(&pipe->reader_queue); rt_wqueue_init(&pipe->writer_queue); rt_condvar_init(&pipe->waitf...
cover
2025-10-03
ringblock
环形缓冲块 ringblock环形块状缓冲区简称为:rbb。与传统的环形缓冲区不同的是,rbb 是一个由很多不定长度的块组成的环形缓冲区,而传统的环形缓冲区是由很多个单字节的 char 组成。rbb 支持 零字节拷贝 。所以 rbb 非常适合用于生产者顺序 put 数据块,消费者顺序 get 数据块的场景,例如:DMA 传输,通信帧的接收与发送等等 ringblk: 是由 多个不同长度 的 block 组成的,ringbuff : 是由单字节的数据组成的。ringblk 每一个 block 有多少个字节可以由用户自己设定。 ringblk 支持零字节拷贝(不需要额外的 memcpy 操作)。所以 rbb 非常适合用于生产者顺序 put 数据块,消费者顺序 get 数据块的场景,例如:DMA 传输,通信帧的接收与发送等等。 初始化 初始化块链表和释放链表 对每一个块链表进行初始化,并插入到释放链表中 PUT & GET 块 put 123block->status = RT_RBB_BLK_PUT; get 判断块链表为空,则返回NULL 遍历链表,找到具...
cover
2025-10-03
ringbuffer
ringbuffer buffer_ptr 是指向缓冲区的指针,buffer_size 是缓冲区的大小,read_index 是读索引,write_index 是写索引,而 read_mirror 和 write_mirror 可以理解为一种镜像值,每次向缓冲区写入数据,碰到缓冲区末尾时,切换到另一个镜像的缓冲区头部写入剩余数据。这种镜像操作可用于判断缓冲区内数据是满还是空。 等于是把缓冲区回绕了看做为另一个缓冲区,通过镜像值来判断缓冲区的状态,当前读写指针是否进入到另一个缓冲区中; 当 write_index == read_index 且 read_mirror == write_mirror 时,缓冲区内数据为空。 当 write_index == read_index 且 read_mirror != write_mirror 时,缓冲区内数据已满。 若是没有上述镜像值,我们就没有办法区分缓冲区空和缓冲区满这两种情况。 注意:RT-Thread 的 ringbuffer 组件并未提供线程阻塞的功...

评论
avatar
Liya Huang
WORK-LIFE BALANCE
文章
482
标签
57
分类
62
Follow Me
公告
欢迎光临!有任何问题或想法,欢迎在文章下留言交流,或者通过 关于页面 联系我。
目录
  1. 1. 数据结构
最新文章
构建
构建2026-02-13
u-boot
u-boot2026-02-13
setlocalversion
setlocalversion2026-02-13
scripts
scripts2026-02-13
u-boot_config
u-boot_config2026-02-13
文档
🚀 linux📑 rt-thread📌 uboot⚔️ LoraWan❓ hpatch⚡️ git
其他
图库留言板说说示例友链
框架
HexoButterfly
贊助
wdfk_prog
© 2025 - 2026 By Liya Huang|框架 Hexo 8.0.0|主题 Butterfly 5.5.1
你好,欢迎来到我的 数字花园!
搜索
数据加载中