项目背景:最近做了一个需要跨平台的项目,要求能够支持 Linux 系统和 Windows 系统并且调用不同操作系统上的硬件驱动,为了减少工作量,我在 Linux 系统上开发了原型,并使用 cygwin/msys2 将其移植到 Windows 系统上。
wdf 编程
WDF 是基于 WDM 的 Windows 驱动编程框架,WDF 极大地方便了 Windows 驱动的开发。
windows 驱动编程环境部署
由于操作系统设计理念的区别,windows 下的驱动编程与 linux 下的驱动编程有较大的差别,这样的差别主要体现在驱动编程的模型上。众所周知,驱动编程需要在操作系统层做工作,而操作系统对此是有约束和限制的,驱动只能够使用操作系统允许的方式插入其中。我认为这种约束和限制就是驱动程序框架。
在 Linux 系统下,始终遵循这一个理念——“一切皆文件”,在 linux 的驱动编程中,通过系统提供的接口插入驱动模块,并将硬件设备视为“文件”(/dev 目录下),所有对硬件的操作就是对该“文件”的读写操作,这就是 Linux 下的驱动程序框架。
AFDX/ARINC664 协议
航空电子全双工交换式以太网(AFDX,Avionic Full-Duplex Switched Ethernet),是 ARINC664(part7)的一个特定实现,是一种用于航空电子领域的数据网络协议。该网络基于 IEEE 802.3 标准。
Linux 汇编
想要读懂 Linux 内核源码,尤其是启动过程以及涉及到硬件操作、中断等代码就绕不开汇编这座大山,绕不开就把它干烂!!
socket 编程
最近学习了一下socket
编程,之前只会调用 api 按照书上/网上的方法按部就班地实现,这次集中梳理一下socket
编程中一些关键的概念,以及如何去理解这些概念。
C 语言协程实现
乙方还是不给我反馈。。。昨天刚好看到有一个叫协程的概念,今天拿过来仔细研究一下。
C 语言 Duff's device
今天看Simon Tatham
有关 C 语言中协程的分析时,看到了一段有趣的代码——Duff’s device。在网上找了很多相关的信息,结果都写的乱七八糟,还好 wiki 上有原版的代码,赶紧抄下来分析一下。
为什么 pthread 里面等待叫 join?
今天在等乙方反馈的时候复习了一下多线程和多进程的一些东西,突然想到一个困扰了我很久的问题——pthread
里为什么等待线程返回的函数叫做pthread_join
?
当时学的时候就是死记硬背的,今天看到了,就随手查了一下,发现叫join
是有来头的。这个称呼来自于Fork-join model。
在并行计算里面,执行流程产生分支即为 fork(在 git 上也有 fork 的操作,创建进程分支也用 fork),当执行流程整合的时候就叫 join,可以理解为加入到一起。
在pthread
里可以这么理解,主线程(通常来说是指 main 创建的)创建了子线程,子线程运行结束后 join 到主线程上,当然你也可以不 join,直接 detach。即是加入到主线程,这里 join 和 detach 的区别就是 join 会将线程返回值合流到主线程中,而 detach 直接分离了。
C 正则表达式
最近做项目,要检查一下 ip 值的格式,最好的方法当然是用正则表达式,但是我以前从来没用 C 写过正则表达式,刚好记录一下,方便以后查看。