![](https://img-blog.csdnimg.cn/2021070909251580.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
嵌入式
文章平均质量分 95
分享嵌入式系统项目开发经验。
IOT物联网小镇
公众号:【IOT物联网小镇】。
道哥,十多年的嵌入式开发老兵。擅长用通俗的语言、简洁的代码,一步一步的剖析C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式平台的底层思考过程。
坚持原创,厚积薄发、换位思考,以读者的角度来总结文章。每一篇输出,不仅仅是干货的呈现,更是引导你一步一步的深入思考,从底层逻辑来提升自己。
展开
-
比GDB更方便的代码调试工具:CGDB
CGDB 是GDB的前端,在终端窗口中意图形化的形式来调试代码(基于ncurse),非常方便。相对于GDB来说,可以很大的提高效率。这篇文章就来分享一下CGDB的最基本使用方法,如果是第一次听说,强烈建议您体验一下,一定会爱上它的!...原创 2022-08-07 21:28:44 · 3155 阅读 · 1 评论 -
哨兵节点:思想简单,效果很棒的的编程算法
所谓的哨兵,就是一个标志,一个与查找目标对象一样的操作对象。原创 2022-06-12 21:52:35 · 741 阅读 · 1 评论 -
C语言:如何给全局变量起一个别名?
所谓的变量别名,就是通过通过不同的标识符,来表示同一个变量。我们知道,变量名称是给程序员使用的。原创 2022-06-12 21:51:10 · 1538 阅读 · 0 评论 -
一个测试记录:利用分段锁来处理并发情况下的资源竞争问题
文章目录问题描述测试代码测试1:不使用锁测试2:使用一把全局锁(大锁)测试3:使用分段锁测试结果测试代码简介别人的经验,我们的阶梯!在开发中经常遇到多个并发执行的线程,需要对同一个资源进行访问,也就是发生资源竞争。在这种场景中,一般的做法就是加锁,通过锁机制对临界区进行保护,以达到资源独占的目的。这篇文章主要描述的就是使用分段锁来解决这个问题,说起来很简单:就是把锁的粒度降低,以达到资源独占、最大程度避免竞争的目的。问题描述周末和朋友聊天说到最近的工作,他们有个项目,需要把之前的一个单片机程原创 2022-05-22 13:18:40 · 615 阅读 · 1 评论 -
【图片+代码】:GCC 链接过程中的【重定位】过程分析.md
文章目录示例代码sub.o 文件内容分析段信息符号表信息main.o 文件分析段信息符号表信息绝对寻址相对寻址重定位表信息可执行程序 main段信息符号表信息绝对地址重定位相对地址重定位总结别人的经验,我们的阶梯!最近因为项目上的需要,利用动态链接库来实现一个插件系统,顺便就复习了一下关于Linux中一些编译、链接相关的内容。在链接的过程中,符号重定位是比较麻烦的事情,特别是在动态链接的过程中,因为需要考虑到很多不同的情况。这篇文章作为第一篇,先来聊一聊静态链接中的重定位过程。按照惯例,还是以原创 2022-03-17 20:27:20 · 3630 阅读 · 0 评论 -
Linux驱动实践:中断处理中的【工作队列】 workqueue 是什么鬼?
文章目录工作队列的特点驱动程序示例代码全貌Makefile 文件编译、测试别人的经验,我们的阶梯!大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【中断处理中的下半部分机制-工作队列】。在刚开始介绍中断处理的时候,曾经贴出下面这张图:图中描述了中断处理中的下半部分都有哪些机制,以及如何根据实际的业务场景、限制条件来进行选择。可以看出:这些不同的实现之间,有些是重复的,或者是相互取代的关系。也正因为此,它们之间的使用方式几乎是大同小异,至少是在API接口函数的使用方式上,从使用这的角度来看,原创 2022-01-10 20:39:12 · 1043 阅读 · 0 评论 -
Linux驱动实践:中断处理函数如何【发送信号】给应用层?
文章目录驱动程序示例代码全貌Makefile 文件编译、测试应用程序示例代码全貌编译、测试别人的经验,我们的阶梯!大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【中断程序如何发送信号给应用层】。最近分享的几篇文章都比较基础,关于字符类设备的驱动程序,以及中断处理程序。也许在现代的项目是用不到这样的技术,但是万丈高楼平地起。只有明白了这些最基础的知识点之后,再去看那些进化出来的高级玩意,才会有一步一个脚印的获得感。如果缺少了这些基础的环节,很多深层次的东西,学起来就有点空中楼阁的感觉。就好原创 2022-01-10 20:37:49 · 3764 阅读 · 0 评论 -
Linux驱动实践:一起来梳理中断的前世今生(附代码)
文章目录Linux 中断的知识点梳理中断的分类中断号和中断向量中断服务例程 ISR中断处理的注册和注销 API实操:捕获键盘中断示例代码向驱动程序传参IO地址:IO端口和IO内存统一编制独立编址编译、验证别人的经验,我们的阶梯!大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【Linux 中断的注册和处理】。在前两篇文章中,描述的是在应用层如何调用驱动函数来控制GPIO,以及在驱动中如何发送发送信号给应用层。假如存在这样一个需求:应用程序需要监控某个硬件GPIO口的电平状态,当发生变化时,应用程原创 2021-12-18 08:08:38 · 1110 阅读 · 0 评论 -
Linux驱动实践:驱动程序如何发送【信号】给应用程序?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。关注下方公众号,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。文章目录kill 命令和信号使用 kill 命令发送信号多线程中的信号信号注册和处理函数驱动程序代码示例:发送信号功能需求驱动程序驱动模块 Makefile编译驱动模块加载驱动模块应用程序代码示例:接收信号注册信号处理函数别人的经验,我们的阶梯!大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【.原创 2021-12-15 08:08:52 · 1270 阅读 · 1 评论 -
Linux驱动实践:如何编写【 GPIO 】设备的驱动程序?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。关注下方公众号,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。文章目录示例程序目标编写驱动程序创建驱动目录和驱动程序创建 Makefile 文件编译驱动模块加载驱动模块设备节点应用程序卸载驱动模块别人的经验,我们的阶梯!大家好,我是道哥。在前几篇文章中,我们一块讨论了:在 Linux 系统中,编写字符设备驱动程序的基本框架,主要是从代码流程和 API 函数这.原创 2021-12-07 08:11:09 · 3170 阅读 · 0 评论 -
Linux驱动实践:你知道【字符设备驱动程序】的两种写法吗?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。关注下方公众号,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。文章目录混乱的 API 函数旧的 API 函数新的 API 函数代码实操创建驱动目录和驱动程序创建 Makefile 文件编译驱动模块加载驱动模块应用程序卸载驱动模块小结自动在 /dev 目录下创建设备节点修改驱动程序代码下载别人的经验,我们的阶梯!大家好,我是道哥,今天我为大伙儿解说的技术知识点..原创 2021-11-19 08:19:36 · 1106 阅读 · 0 评论 -
【无源物联网】物联网的下一个风口?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。关注下方公众号,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。文章目录无源物联网现有的无源物联网设备从 蓝牙、4G、5G 信号中获取能量别人的经验,我们的阶梯!大家好,我是道哥。今天看到一则“旧闻”:以色列初创公司Wiliot融资 2 亿美元,将开发二代蓝牙IoT传感器:超低成本的蓝牙传感器。最大的亮点是:不需要提供电能,可以自动从周围环境中收集能量![.原创 2021-11-08 17:08:49 · 6609 阅读 · 0 评论 -
黑客级别的文章:把动态库的内存操作玩出了新花样
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。关注,回复【书籍】,获取 Linux、嵌入式领域经典书籍;回复【PDF】,获取所有原创文章( PDF 格式)。 目录 文章目录理论与实践开始新的动态库面临的问题怎么做?ELF概述ELF 文件头SHT(section header table)PHT(program header table)连接视图(Linking View)和执行视图(Execution View).dynamic section动态链接器(li.原创 2021-11-02 08:33:36 · 910 阅读 · 0 评论 -
多线程异步日志系统,高效、强悍的实现方式-双缓冲
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。 目录 文章目录单片机中常用的环形缓冲区多线程异步日志:双缓冲机制双缓冲机制为什么高效尽可能的降低 Lock 的时间参考代码可以继续优化的地方别人的经验,我们的阶梯!大家好,我是道哥,今天我为大伙儿解说的技术知识点是:【在多线程环境下,如何实现一个高效的日志系统】。在很久之前,曾经写过一篇文章《【最佳实践】生产者和消费者模式中的双缓冲技术》,讨论了:在一个产品级的日志系统中,如何利用双缓冲机制来解决生产者-消费.原创 2021-11-01 08:31:43 · 1370 阅读 · 0 评论 -
Linux从头学16:操作系统在加载应用程序时,是如何把【页目录和页表】当做普通物理页进行操作的?
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。 目录 文章目录问题描述处理器接收的是线性地址,不是物理地址对页目录进行操作一级查表:构造线性地址的前 10 位,来确定页表的物理地址二级查表:构造线性地址的中间 10 位,来确定“普通页”的物理地址三级查表:构造线性地址的最后 12 位,来确定页“普通页”的页内偏移量三个地址段合体对页表进行操作一级查表二级查表三级查表在 x86 系统中,内存管理中的分页机制是非常重要的,在Linux操作系统相关的各种书籍中,这部分内.原创 2021-10-19 09:04:16 · 796 阅读 · 0 评论 -
Linux从头学15:【页目录和页表】-理论 + 实例 + 图文的最完全、最接地气详解
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。文章目录页表的拆分过程页目录结构几个相关的寄存器加载用户程序时: 页目录、页表的分配和填充过程线性地址到物理地址的查找、计算实例在x86系统中,为了能够更加充分、灵活的使用物理内存,把物理内存按照4KB的单位进行分页。然后通过中间的映射表,把连续的虚拟内存空间,映射到离散的物理内存空间。映射表中的每一个表项,都指向一个物理页的开始地址。但是这样的映射表有一个明显的缺点:映射表自身也是需保存在物理内存中的。在 32.原创 2021-10-11 08:39:45 · 2683 阅读 · 0 评论 -
【分页机制】-看了这篇文章还没彻底搞懂?我自罚三杯!
目录 文章目录分段存储的坏处物理内存的管理映射表一个线性地址的寻址过程终于开始介绍分页机制了,作为一名 Linuxer,大名鼎鼎的分页机制必须要彻底搞懂!我就尽自己的最大努力,正确把我理解的分页机制,用图文形式彻底分解,希望对您有所帮助!一共分 3 篇文章:这篇文章主要介绍单映射表;下一篇介绍两级映射(页目录和页表);最后一篇介绍对映射表自身的操作。分段存储的坏处在之前的文章中,我们多次描写了一个段描述符的结构,其中就包括段的开始地址、界限和各种段的属性。经过分段处理单元的权限.原创 2021-09-30 08:35:58 · 865 阅读 · 0 评论 -
Linux从头学13:想彻底搞懂“系统调用”的底层原理?建议您别错过这篇【调用门】
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。 目录 文章目录门描述符调用门特权级检查规则调用门的使用过程安装调用门把调用门的选择子告诉用户程序用户程序通过调用门进入系统函数栈的切换在之前的文章中Linux从头学10:三级跳过程详解-从 bootloader 到 操作系统,再到应用程序,由于当时没有引入特权级的概念,用户程序和操作系统都工作在相同的特权级,因此可以直接通过[段选择子:偏移量] 的方式,来调用属于操作系统代码段中的函数,如下所示:用户程序head.原创 2021-09-22 08:17:08 · 919 阅读 · 0 评论 -
Linux从头学12:读完这篇【特权级】文章,你就比别人更“精通”操作系统!
作 者:道哥,10+年嵌入式开发老兵,专注于:C/C++、嵌入式、Linux。【IOT物联网小镇】 目录 文章目录CPL:当前特权级DPL:描述符特权级RPL:请求者特权级特权级检查规则代码段的特权级检查数据段的特权级检查栈段的特权级检查x86 处理器中,提供了4个特权级别:0,1,2,3。数字越小,特权级别越高!一般来说,操作系统是的重要性、可靠性是最高的,需要运行在0 特权级;应用程序工作在最上层,来源广泛、可靠性最低,工作在3 特权级别。中间的1 和 2两个特权级别,一般很少使用.原创 2021-09-16 08:39:24 · 853 阅读 · 0 评论 -
Linux从头学11:理解了这三个概念,才能彻底理解任务管理和任务切换
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录LDT:局部描述符表TSS: 任务状态段TCB: 任务控制块x86 系统中的保护模式,给系统的安全性提供了很大的保障,但是在我们之前的文章中,一直都淡化了特权级别这个概念。例如:在保护模式下的段选择器,我们一直都只把它看做一个段描述符的"索引号",用来在 GDT (全局描述描述符表) 中查找一个段描述符,例如:图中:代码段寄存器中的索引号是 4 ,GDT 中每一个表项占用 4 个字节,于是就在偏移量为 .原创 2021-09-09 08:21:12 · 819 阅读 · 0 评论 -
Linux从头学10:三级跳过程详解-从 bootloader 到 操作系统,再到应用程序
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录bootloader 跳转到操作系统操作系统的 header 布局建立操作系统的三个段描述符操作系统跳转到应用程序应用程序调用操作系统中的函数不论是在 x86 平台上,还是在嵌入式平台上,系统的启动一般都经历了 bootloader 到 操作系统,再到应用程序,这样的三级跳过程。每一个相互交接的过程,都是我们学习的重点。这篇文章,我们仍然以 x86 平台为例,一起来看一下:从上电之后,系统是如何一步一步的.原创 2021-09-03 08:18:38 · 901 阅读 · 0 评论 -
Linux从头学09:x86 处理器如何进行-层层的内存保护?
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录实模式:bootloader 为程序计算段的基地址保护模式:bootloader 为自己创建段描述符确定 GDT 的地址创建代码段描述符创建数据段描述符创建栈段描述符段描述符是如何确保段的安全访问的?段寄存器高速缓存对段寄存器本身的保护对段界限的检查在上一篇文章中,我们已经顺利的从实模式,过渡到了保护模式。保护模式与实模式最本质的区别就是:保护模式使用了全局描述符表,用来保存每一个程序(bootloader.原创 2021-08-30 08:28:40 · 834 阅读 · 0 评论 -
Linux从头学07:中断那么重要,它的本质到底是什么?
文章目录中断向量与中断描述符中断的分类内部中断外部中断中断号中断向量和中断处理程序中断向量的本质中断处理程序的安装中断现场的保护和恢复总结:中断的本质在软件开发中,中断是一个绕不开的重要话题,但是,不知道您是否遇到过这样的困惑:很多书籍、文章在介绍中断相关的知识点时,说的都挺有道理。这篇文章对中断的讲解很正确,那篇文章在描述中断的时候也挺对的,但是,这两篇文章中,怎么有些内容是矛盾的啊?!单独看任何一篇文章感觉都有道理,看的越多,反而越迷糊?好比在森林里迷路了,如果只有一个指南针,肯定能走出来。原创 2021-08-17 08:23:03 · 833 阅读 · 0 评论 -
Linux从头学06:16张结构图,彻底理解【代码重定位】的底层原理
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录程序的结构1. 程序头(Header)的描述信息2. 关于汇编地址bootloader 把程序从硬盘读取到内存1. 读取到内存中的什么位置?2. bootloader 设置数据段基地址3. bootloader 读取所有扇区4. 如果程序文件超过 64 KB 怎么办?代码重定位程序入口点重定位段表重定位跳转到程序的入口地址操作系统程序的执行在上一篇文章中Linux从头学05-系统启动过程中的几个神秘地址,你知.原创 2021-08-11 10:14:50 · 912 阅读 · 0 评论 -
Linux从头学05-系统启动过程中的几个神秘地址,你知道是什么意思吗?
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录0xFFFF:0x00000xF000:0xE05B0x0000:0x7C00在第一篇文章中,我们就提到,现代操作系统是从最古老的 8086 系统一步一步发展而来的。处理器厂商为了向后兼容,很多底层相关的原理都是一样的(如果不兼容,就会丢弃市场份额)。特别是从系统上电之后,一直到操作系统中第一个进程(Linux 下就是 init 进程)运行起来,这其中经历了 BIOS、引导程序、操作系统这三元大将的接力跑.原创 2021-08-03 09:37:49 · 1654 阅读 · 0 评论 -
所有编程语言中的栈操作,底层原理都在这里
作 者:道哥,10+年的嵌入式开发老兵。公众号:专注于:C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。转 载:欢迎转载文章,转载需注明出处。文章目录示例代码说明执行主程序初始状态执行代码前 5 句准备调用子程序1. call 的指令码和汇编代码2. 栈空间的数据调用子程序1. 寄存器的值2. 栈空间的数据子程序保护使用到的寄存器1. push bx2. push cx3. 计算字符串的长度4. 把字符串长度告诉主程序5. pop cx6. pop bx7. 返.原创 2021-07-30 08:28:02 · 935 阅读 · 0 评论 -
WSL2:在Windows系统中开发Linux程序的又一神器
作 者:道哥,10+年的嵌入式开发老兵。转 载:欢迎转载文章,转载需注明出处。文章目录什么是 WSL?什么是 WSL2?激活 WSL 服务安装 Ubuntu-18.04 操作系统通过 ssh 远程登录编译 Hello,World!作为一名嵌入式软件开发工程师,在 Linux 系统下写代码、编译、调试是避免不了的事情。但是很少有同学会直接拿一台 Linux 真机来作为工作平台,除非是那种利用远程服务器来编译的场景。更普遍的使用场景是:在一台 Windows/Mac 系统中,安装虚拟机,然后在.原创 2021-07-20 08:23:27 · 1377 阅读 · 1 评论 -
从程序员的角度,来拆解物联网系统中的开发工作
作 者:道哥,10+年的嵌入式开发老兵。公众号:【IOT物联网小镇】,专注于:C/C++、Linux操作系统、应用程序设计、物联网、单片机和嵌入式开发等领域。 公众号回复【书籍】,获取 Linux、嵌入式领域经典书籍。转 载:欢迎转载文章,转载需注明出处。文章目录物联网系统设备端的开发1. 不需要网关的设备2. 需要网关的设备3. WiFi 类设备物联网平台开发业务应用开发物联网的概念已经被炒了好多年了,奇怪的是:市场中对这个概念的反应总是不愠不火。随着5G 的迅速普及,不知道是否能够..原创 2021-07-02 08:23:40 · 941 阅读 · 2 评论 -
一次脑残的记录: Linux 中实时任务调度与优先级
背景知识:Linux 调度策略关于进程的调度策略,不同的操作系统有不同的整体目标,因此调度算法也就各不相同。这需要根据进程的类型(计算密集型?IO密集型?)、优先级等因素来进行选择。对于 Linux x86 平台来说,一般采用的是 CFS:完全公平调度算法。之所以叫做完全公平,是因为操作系统以每个线程占用 CPU 的比率来进行动态的计算,操作系统希望每一个进程都能够平均的使用 CPU 这个资源,雨露均沾。我们在创建一个线程的时候,默认就是这个调度算法 SCHED_OTHER,默认的优...原创 2021-06-16 09:49:55 · 1554 阅读 · 0 评论 -
这 7 个 Linux 命令,你是怎么来使用的?
使用 Linux 系统的开发者,很多人都有自己喜欢的系统命令,下面这个几个命令令是我平常用的比较多的,分享一下。我不会教科书般的罗列每个指令的详细用法,只是把日常开发过程中的一些场景下,经常使用的命令常见用法进行演示。希望对您有小小的帮助~~也非常欢迎各位大侠,在留言区分享您的私房命令。No.1 grepgrep、awk、sed 这三个指令,作为 Linux 系统中文本处理的三大法宝,我最喜欢、最常用的就是 grep 指令,没有之一!它的基本用法是:grep [OPTIONS] PAT原创 2021-06-16 09:48:25 · 726 阅读 · 0 评论 -
物联网设备OTA软件升级之:完全升级和增量升级
各位看官好,上一篇文章我们聊了一下关于 OTA 升级过程中,新的软件包是如何从开发者的电脑上,安全的下载到嵌入式设备中的。这个流程似乎很简单,不就是下载一个文件而已嘛,怎么还值得写成一篇文章呢?[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QWaYx7hg-1622980367668)(iot601_xtda.png)]其实这不仅仅是下载文件这么简单,这其中涉及到如何对众多的终端设备进行批量升级的策略问题。如果你亲自在 AWS 的平台上操刀一次,就知道这其中有很多细.原创 2021-06-06 19:53:26 · 1915 阅读 · 2 评论 -
物联网设备OTA软件升级之:升级包下载过程之旅
OTA概述大家好,我是一个软件升级包。这几天呢,我将会进行一次神奇的网络之旅,从开发者的电脑中,一直跑到终端嵌入式设备中。大家都把我的这个旅游过程叫做 OTA,也就是在线升级。那么啥叫 OTA 呢?全称是:Over the Air Technology,其实就是通过网络来把一个新的软件包从服务器上下载下来,更新到设备上。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-30murUcG-1622980293850)(http://iottown.sewain100..原创 2021-06-06 19:52:32 · 1978 阅读 · 8 评论 -
Linux系统中编译、链接的基石-ELF文件:扒开它的层层外衣,从字节码的粒度来探索
初次见面大家好,我是 ELF 文件,大名叫 Executable and Linkable Format。经常在 Linux 系统中开发的小伙伴们,对于我肯定是再熟悉不过了,特别是那些需要了解编译、链接的家伙们,估计已经把我研究的透透的。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eqQKroRf-1622162986560)(http://iottown.sewain100.cn/iot523_fun_look.png)]为了结识更多的小伙伴,今天呢,就是..原创 2021-05-28 08:51:28 · 952 阅读 · 0 评论 -
应用程序设计:在动态库中如何调用外部函数?
大家好,我是一个动态链接库!这个名字,相信你一定早就如雷贯耳了。在计算机早期时代,由于内存资源紧张,我可是发挥了重大的作用!不论是在 Windows 系统中,还是在 Unix 系列平台上,到处都能见到我的身影,因为我能为大家节省很多资源啊,资源就是人民币!愉快的玩耍比如:我的主人编写了这么一段简单的代码:# 文件:lib.c#include <stdio.h>int func_in_lib(int k){ printf("func_in_lib is ca原创 2021-05-22 10:12:42 · 983 阅读 · 0 评论 -
向高手学习:glib如何来封装跨平台的线程库
文章目录一、前言二、glib 简介三、线程库的设计1. 线程相关的文件2. 数据结构3. 线程的创建4. 线程的执行5. Windows平台函数调用链四、总结一、前言这篇文章,按照下面这 2 张图,来描述 glib 在 Linux 和 Windows 平台上,是如何来进行线程库的设计的。Linux 平台:Windows 平台:最近写了几篇关于跨平台的应用程序设计思路,有些小伙伴在后台留言询问关于一些通用的跨平台库,看来这方面的需求还是很多的。所谓的跨平台,无非就是希望用同一份应用程序的代码,原创 2021-05-14 08:30:11 · 1011 阅读 · 1 评论 -
使用 cmake 来搭建跨平台的应用程序框架:C++版本
文章目录一、前言二、示例代码说明1. 功能描述2. 文件结构三、Linux 系统下操作1. 通过 cmake 指令,生成 Makefile 文件2. 编译 libA3. 编译 libB4. 编译可执行程序 appC四、Windows 系统下操作1. 生成 VS 解决方案2. 编译 libA3. 编译 libB4. 编译 appC五、总结一、前言在上一篇文章中(使用 cmake 来搭建跨平台的应用程序框架:C语言版本),我们以源代码的形式,演示了利用利用 cmake 这个构建工具,来编译跨平台的动态库、静原创 2021-05-11 14:35:30 · 1185 阅读 · 5 评论 -
使用 cmake 来搭建跨平台的应用程序框架:C语言版本
文章目录一、前言二、示例代码说明1. 功能描述2. 文件结构3. cmake 构建步骤4. Utils 目录说明5. Application 目录说明三、Linux 系统下操作步骤1. 创建构建目录 build2. 执行 cmake,生成 Makefile3. 编译 Utils 库4. 编译可执行程序 Application四、Widnows 系统下操作步骤1. 通过 cmake 指令生成 VS 工程2. 编译 Utils 库文件3. 编译可执行程序 Application五、总结一、前言我们在写应用原创 2021-05-11 14:34:44 · 1147 阅读 · 11 评论 -
内联汇编很可怕吗?看完这篇文章,终结它!
文章目录一、基本 asm 格式1. 语法规则2. test1.c 插入空指令3. test2.c 操作全局变量4. test3.c 尝试操作局部变量二、扩展 asm 格式1. 指令格式2. 输出和输入操作数列表的格式3. test4.c 通过寄存器操作局部变量4. test5.c 声明改动的寄存器三、使用占位符来代替寄存器名称1. test6.c 使用占位符代替寄存器2. test7.c 给寄存器起别名四、使用内存地址1. test8.c 使用内存地址来操作数据五、总结在 Linux 代码中,经常可以看到原创 2021-04-27 08:29:28 · 796 阅读 · 1 评论 -
全图文分析:如何利用Google的protobuf,来思考、设计、实现自己的RPC框架
文章目录一、前言二、RPC 基础概念1. RPC 是什么?2. 需要解决什么问题?3. 有哪些开源实现?三、protobuf 基本使用1. 基本知识2. 使用步骤四、libevent1. libevent 简介2. 基本使用五、实现 RPC 框架1. 基本框架构思2. 元数据的设计3. 客户端发送请求数据4. 服务端接收请求数据5. 服务端发送响应数据6. 客户端接收响应数据六、总结1. protobuf 的核心2. 未解决的问题一、前言在嵌入式系统中,很少需要使用到 RPC (Remote Proce原创 2021-04-25 08:33:32 · 1115 阅读 · 1 评论 -
关于技术书籍,我是这么来选书和看书的
文章目录一、前言二、选书1. 重视选书的过程2. 如何选书3. 电子书 or 纸质书三、读书1. 不要怕弄脏书2. 消灭模糊性、不确定性3. 一定要做笔记4. 怎么确认自己真的懂了一、前言前几天有同事过来,让我推荐一本 Linux 系统的书籍。我就问他 2 个问题:你想学习 Linux 哪一个层次:内核层?驱动层?应用层?你的目标是什么:是学习 Linux 系统的设计架构?某个模块的驱动开发?还是仅仅想系统学习一下应用程序编程?最后,给他推荐了下面这本书:后来我又想了一下自己原创 2021-04-12 08:30:23 · 794 阅读 · 0 评论