- 博客(17)
- 收藏
- 关注
原创 深入uart学习
现在的uart几乎都会有硬件fifo去减少cpu中断触发的次数,例如一次写16个字节给fifo。然后由uart模块自己去读取。还有用dma+fifo的。现在我们用的三线uart相比其他的DB9,等多线接口简单的很多。所以考虑的时候还需要考虑以前的接口设计。不然很多设计点是想不到的。常用的有两种数据帧格式。波特率 >= 比特率。
2025-08-14 10:46:51
150
原创 现在C++白皮书随笔
一开始想看这本书,然后写一个完整的观后感的。随着慢慢读,发现其实是C++历史。不需要像写技术博客那样正式。就当是记录一下读后感。原来一个语言的历史,是这么的精彩。设计的初衷,设计背后的故事,还有在面对大环境的发展,语言的走向是如何被影响的。按照老头子的说法,C++是一门偏向系统编程的通用编程语言。想让编程更加简单(maybe就是更依靠编译器,但个人感觉越来越臃肿了)唉,奈何linus不同意将C++纳入内核。
2025-08-14 10:44:17
642
原创 一文拿下linux coredump分析
Name Mangling(名称修饰/名称重整)是编译器将C++中的函数名、变量名等标识符转换为唯一符号名的过程。函数重载命名空间类和成员函数模板操作符重载Coredump分析是一个系统性的过程,需要综合考虑信号、栈回溯、函数命名、地址、程序和库等多个维度的信息。通过本文的分析方法,我们可以快速定位程序崩溃的根本原因,并制定相应的修复策略。记住,coredump分析不仅仅是技术问题的解决,更是对程序运行机制深入理解的过程。掌握这些技能将大大提高我们的调试效率和程序质量。
2025-08-14 10:42:42
801
原创 一文弄懂linux虚假唤醒
在计算中,当线程从等待条件变量中唤醒并发现条件仍然未满足时,就会发生虚假唤醒。它被称为虚假的,因为线程似乎无缘无故地被唤醒了。虚假唤醒的发生通常是因为在条件变量发出信号和被唤醒线程最终能够运行之间,另一个线程先运行并再次更改了条件。通常,如果唤醒多个线程,第一个运行的线程会发现条件满足,但其他线程可能会发现条件不满足。pthread_cond_broadcast 是全部唤醒,pthread_cond_signal 是随机唤醒一个。你的判断条件从if改成while就可以避免了。错误返回,导致虚假唤醒。
2025-08-14 10:39:52
621
原创 glibc源码阅读环境搭建
注:考虑到可能有一些平台差异,所以交叉编译后。生成的compile_commands.json会方便看arm架构的。确定要看哪个版本,最好产品用的是哪个版本。发现clangd 在建立索引即成功了.切换到对应版本的分支。重启vscode窗口。
2025-08-12 10:23:39
318
原创 一文弄懂写时复制cow
在计算机系统中,往往需要在不同进程之间共享数据,或者对已有的数据进行复制。简单的数据复制会造成大量无效的内存占用和性能低下。为了接触和共享本身已有的数据,同时避免不必要的复制,写时复制 (Copy-On-Write, COW) 技术就形成了。
2025-08-12 10:22:29
301
原创 一文弄懂为什么条件变量要搭配互斥锁使用
网上流行的说法:条件变量配合着互斥量使用,是为了解决 在线程A中调用了 pthread_cond_wait,但是线程A还没有进入wait cond的时候,线程B调用了pthread_cond_signal,如果不用mutex,这个cond_signal就丢失了,而如果加上了锁,则线程B必须要等到mutex被释放了的时候才能调用pthread_cond_signal。其实简单写一下代码就比较清楚了。
2025-08-12 10:21:33
269
原创 一文弄懂stm32ota及具体方案
OTA(Over-The-Air/Over-The-Any-link)是设备在不拆机、不中断服务或最小中断的前提下,通过通信链路远程更新固件的能力。降低维护成本:远程修复缺陷、发布新功能。提升安全:及时修补漏洞、轮换证书/密钥。提升可靠性:引入回滚与试运行机制,降低升级失败风险。
2025-08-12 09:27:49
328
原创 三分钟搭建stm32最强开发环境,mac也能用!!!
三分钟搭建stm32最强开发环境,mac也能用!!!可使用vscode+cmake 也可以使用keil. mac也能用!!!
2025-08-11 23:06:32
188
原创 一文彻底理解大小端
以 32 位整型数0x12345678大端(Big Endian):高位字节存放在低地址,低位字节存放在高地址地址: 0x00 0x01 0x02 0x03内容: 0x12 0x34 0x56 0x78小端(Little Endian):低位字节存放在低地址,高位字节存放在高地址地址: 0x00 0x01 0x02 0x03内容: 0x78 0x56 0x34 0x12。
2025-08-11 10:39:42
411
原创 设计原则,设计模式初探
他把图片和视频在很多函数中是统一处理的,直接强转成视频的结构体,因为前面一部分重要的信息是相同的,直接用就可以了,同时他函数的复用率是比较高的,这点是拿易读和结构做了一定的牺牲。我把他分开了,让一个函数尽量干他命名的事情,也方便后面维护。对于一个把数据写进硬盘的操作函数来说,如果现在新加进来一种结构,比如原来是视频,图片,现在加进来ai便签了,你需要改这个写操作的函数为了支持他,而视频和图片用不上这新加进来代码,那这个接口隔离就做的不够好了,可以再细化一层,让最后的写操作不会受到新加进来的数据结构的影响。
2025-03-22 00:49:13
740
原创 linux ion 源码详解
ion是一个内存管理框架,产生于安卓内核,后面linux合近内核中。主要用于多媒体,gpu等需要连续大片物理内存的场景。
2024-10-10 18:31:30
1915
原创 如何阅读开源代码
阅读代码,特别是大型项目的代码。对大部分人来说是一件不算简单的事情。所以我们最好能够有所总结。好记性不如烂笔头。可以写篇博客,画画流程图,类图或者写一个总结出来。思考一下别人为什么这么写,他的设计是怎么样的,又是怎么想的。思考一下我自己来实现这一套会如何实现,会不会考虑到这些问题。选择与你当前的编程技能与知识水平相当的项目。一上来就看linux内核实现。兴致勃勃的看了一会发现太困难就放弃了。又想看stl实现,发现全是下划线。又受不了放弃了。所以还是要慢慢深入,根据自己情况尽力而为。参考。
2024-09-24 20:55:03
1922
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人