摘要: 浅谈操作系统与内存 对于计算机的发明,相信大家都有耳闻那个占地面积按平米算的第一台计算机。在那个时候,CPU的资源是极其珍贵的,随着这些年突飞猛进的发展,一片指甲盖大小的民用级CPU一秒钟能执行的指令数可以达到上亿级别。 随着计算能力的增长,芯片外围的硬件和配套的软件也是一路高歌,发生了天翻地覆的变 阅读全文
posted @ 2019-03-06 12:14 牧野星辰 阅读(2916) 评论(2) 推荐(3) 编辑
摘要: 浅谈原子操作、volatile、CPU执行顺序 在计算机发展的鸿蒙年代,程序都是顺序执行,编译器也只是简单地翻译指令,随着硬件和软件的飞速增长,原来的工具和硬件渐渐地力不从心,也逐渐涌现出各路大神在原来的基础上进行优化,有些优化是完全地升级,而有些优化则是建立在牺牲其他性能之上,当然这种优化在大多数 阅读全文
posted @ 2019-03-05 23:12 牧野星辰 阅读(2325) 评论(3) 推荐(0) 编辑
摘要: SCP免密传输和SSH登录协议详解 在linux下开发时,经常需要登录到其他的设备上,例如虚拟机内ubuntu、树莓派等等,经常涉及到传输文件的操作,传输文件有很多中方法,如物理磁盘拷贝,基于网络的samba服务、SCP传输、ftp文件传输等等,今天我们就来聊聊出场频率最高的SCP传输。 SCP的使 阅读全文
posted @ 2019-03-05 16:29 牧野星辰 阅读(9070) 评论(1) 推荐(2) 编辑
摘要: 栈帧结构与函数调用约定 栈,是一种先入后出的数据结构,就像我们堆放书籍一样,先放的在最底下,后放置的在顶上,当我们要取的时候就是拿最上面一本,即最后放置的那一本。即FILO(first in last out)。 对大多数的应用程序员来说,栈就是这么一个数据结构的概念,而对于嵌入式工程师来说,栈还代 阅读全文
posted @ 2019-03-04 16:20 牧野星辰 阅读(1832) 评论(0) 推荐(0) 编辑
摘要: C/C++函数调用时传参过程与可变参数实现原理 C语言的经典swap问题 在学习C语言的时候,我们大都遇到过一些经典例题,这些经典例题背后所代表的是往往是C/C++背后的一些运行原理,比如下面这个示例: 请问下面这个swap()函数能否用来进行值交换? void swap(int x,int y) 阅读全文
posted @ 2019-03-04 15:59 牧野星辰 阅读(7123) 评论(2) 推荐(2) 编辑
摘要: C++构造函数的理解 相对于C语言来说,C++有一个比较好的特性就是构造函数,即类通过一个或者几个特殊的成员函数来控制其对象的初始化过程。构造函数的任务,就是初始化对象的数据成员,无论何时只要类的对象被创建,就会执行构造函数。 构造函数的语法 构造函数的名字必须和类名相同,与其他函数不一样的是,构造 阅读全文
posted @ 2019-03-04 15:07 牧野星辰 阅读(16270) 评论(1) 推荐(5) 编辑
摘要: C语言数组与指针的那些事儿 在C语言中,要说到哪一部分最难搞,首当其冲就是指针,指针永远是个让人又爱又恨的东西,用好了可以事半功倍,用不好,就会有改不完的bug和通不完的宵。但是程序员一般都有一种迷之自信,总认为自己是天选之人,明知山有虎,偏向虎山行,直到最后用C的人都要被指针虐一遍。 指针 首先, 阅读全文
posted @ 2019-03-04 12:00 牧野星辰 阅读(9825) 评论(2) 推荐(7) 编辑
摘要: linux驱动程序——将驱动程序编译进内核 模块的加载 通常来说,在驱动模块的开发阶段,一般是将模块编译成.ko文件,再使用 sudo insmod module.ko 或者 depmod a modprobe module 将模块加载到内核,相对而言,modprobe要比insmod更加智能,它会 阅读全文
posted @ 2019-03-26 15:09 牧野星辰 阅读(21177) 评论(0) 推荐(4) 编辑
摘要: linux设备驱动程序 设备树多级子节点的转换 在上一章: "设备树处理之——device_node转换成platform_device" 中,有提到在设备树的device_node到platform_device转换中,必须满足以下条件: 一般情况下,只对设备树中根的一级子节点进行转换,也就是多级 阅读全文
posted @ 2019-03-12 20:10 牧野星辰 阅读(4138) 评论(1) 推荐(1) 编辑
摘要: linux设备驱动程序 i2c(2) adapter和设备树的解析 (注: 基于beagle bone green开发板,linux4.14内核版本) 在本系列linux内核i2c框架的前两篇,分别讲了: "linux设备驱动程序 i2c(0) i2c设备驱动源码实现" "linux设备驱动程序 i 阅读全文
posted @ 2019-03-12 15:25 牧野星辰 阅读(7271) 评论(1) 推荐(0) 编辑
摘要: python调用C语言接口 注:本文所有示例介绍基于linux平台 在底层开发中,一般是使用C或者C++,但是有时候为了开发效率或者在写测试脚本的时候,会经常使用到python,所以这就涉及到一个问题,用C/C++写的底层库,怎么样直接被python来调用? python作为一门胶水语言,当然有办法 阅读全文
posted @ 2019-03-11 18:37 牧野星辰 阅读(6867) 评论(1) 推荐(3) 编辑
摘要: linux 中bus驱动解析 总线(bus)是linux发展过程中抽象出来的一种设备模型,为了统一管理所有的设备,内核中每个设备都会被挂载在总线上,这个bus可以是对应硬件的bus(i2c bus、spi bus)、可以是虚拟bus(platform bus)。 简述bus的工作流程 bus将所有挂 阅读全文
posted @ 2019-03-10 22:23 牧野星辰 阅读(5758) 评论(0) 推荐(0) 编辑
摘要: linux字符设备驱动程序 创建设备节点 基于4.14内核,运行在beagleBone green 在上一讲中,我们写了第一个linux设备驱动程序—— "hello_world" ,在驱动程序中,我们什么也没有做,仅仅是打印了两条日志消息,今天,我们就要丰富这个设备驱动程序,在/dev目录下创建一 阅读全文
posted @ 2019-03-09 17:53 牧野星辰 阅读(5204) 评论(0) 推荐(1) 编辑
摘要: gpio驱动程序 上一章节 "linux设备驱动程序 创建设备节点" 章节主要介绍了linux字符设备驱动程序的框架,从这一章节开始我们讲解各种外设的控制,包括gpio,i2c,dma等等,既然是外设,那就涉及到具体的目标板,博主在这里使用的开发板是开源平台beagle bone green,内核版 阅读全文
posted @ 2019-03-09 16:22 牧野星辰 阅读(19672) 评论(1) 推荐(1) 编辑
摘要: linux sysfs文件系统 本文部分内容参考自 "官方文档" 自2.6版本开始,linux内核开始使用sysfs文件系统,它的作用是将设备和驱动程序的信息导出到用户空间,方便了用户读取设备信息,同时支持修改和调整。 与ext系列和fat等文件系统不同的是,sysfs是一个系统在启动时构建在内存中 阅读全文
posted @ 2019-03-09 15:53 牧野星辰 阅读(10490) 评论(0) 推荐(2) 编辑
摘要: linux字符设备驱动程序 hello_world 基于4.14内核, beagleBone green平台 PC端的设备驱动程序 有过电脑使用经验的人都知道,当我们将外部硬件设备比如鼠标键盘插入到电脑端口(通常是USB口)时,在windows系统右下角会弹出"安装设备驱动程序"的显示框,那么,为什 阅读全文
posted @ 2019-03-09 14:59 牧野星辰 阅读(15352) 评论(0) 推荐(0) 编辑
摘要: (基于4.14内核版本) 为了梳理清楚linux内核中的i2c实现框架,从本文开始,博主将分几个章节分别解析i2c总线在linux内核中的形成过程、匹配过程、以及设备驱动程序源码实现。 在介绍linux内核中i2c框架之前,我们最好是知道怎么使用它,实现一个相应的i2c设备驱动程序demo,然后从使 阅读全文
posted @ 2019-03-07 23:11 牧野星辰 阅读(10437) 评论(1) 推荐(1) 编辑