自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 收藏
  • 关注

原创 CAN 总线协议概述

在 CAN2.0B 中额外增加了扩展帧,它拥有 29 位标识符(ID),前 11 位与 CAN2.0A 的标识符相同,在此之后又增加了 18 位 CAN2.0B 专用的扩展标识符,其余结构完全相同,基于 2.0B 的总线网络既可以接收标准帧也可以接收扩展帧,但是在同一网络中通常只能出现一种帧格式,必须提前设定该网络是接收标准帧还是扩展帧,扩展帧结构如图 3-2 所示。时,发现总线实际电平和其发送的电平不一致,这时候,节点 A 会认为自己输掉了仲裁,会从一个发送节点转变为一个接收节点…

2025-03-30 09:22:26 1011

原创 SylixOS 中 select 原理及使用分析

select 是操作系统多路 I/O 复用技术实现的方式之一。select 函数允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态。所谓的”准备好“状态是指:文件描述符不再是阻塞状态,可以用于某类 IO 操作了,包括可读,可写,发生异常三种。

2025-03-26 22:09:45 898

原创 SPI 总线协议

SPI,是英语 Serial Peripheral interface 的缩写,顾名思义就是串行外围设备接口。是 Motorola 首先在其 MC68HCXX 系列处理器上定义的。SPI,是一种高速的,全双工,同步的通信总线。主节点或子节点的数据在时钟上升沿或下降沿同步。主节点和子节点可以同时传输数据。SPI 接口可以是 3 线或 4 线。本文重点介绍流行的 4 线 SPI 接口。

2025-03-18 22:54:20 755

原创 I2C 总线协议

IIC(Inter-Integrated Circuit)协议也称为 I2C 总线,是一种串行通信协议,通常用于连接低速外设。它由 Philips(现在的NXP Semiconductors)公司于 1980 年代初开发,现在已经成为一个标准。IIC 总线只需要两条数据线,分别是串行数据线(SDA)和串行时钟线(SCL),这使得它成为一种非常简单的接口。I2C 有利于设计人员在系统的众多节点之间建立简单、双向、灵活的通信。I2C 仅使用两条双向线来发送和接收信息,从而降低了复杂性。

2025-03-17 23:14:37 1026

原创 PCI 总线学习笔记(四)

PCI 总线协议中的中断处理

2025-03-08 11:35:38 847

原创 ARM 架构下 cache 一致性问题整理

本篇文章主要整理 ARM 架构下,和 Cache 一致性相关的一些知识。本文假设读者具备一定的计算机体系结构和 Cache 相关基础知识,适合有相关背景的读者阅读。

2025-03-02 12:09:32 1296

原创 ARM 架构下的 cache invalid 问题

ARM 架构下的 Cache Invalid

2025-03-02 09:49:07 187

原创 分辨率、帧率和码率三者之间的关系

分辨率、帧率、码率之间的关系

2025-02-22 12:44:30 988

原创 原码、反码、补码

原码、反码、补码

2025-02-22 11:00:22 531

原创 PCI 总线学习笔记(三)

BDF、BAR 空间、Primary、Secondary、Subordinate Bus Number Register、Base&Limit Register,PCI 总线树遍历

2025-01-24 18:01:56 892

原创 PCI 总线学习笔记(一)

PCI基础知识

2025-01-19 12:18:38 887

原创 PCI 总线学习笔记(二)

PCI配置空间的访问、存储器域与PCI总线域地址

2025-01-19 12:17:48 842

原创 ARM 栈和函数调用

ARM 栈和函数调用

2024-09-21 16:20:04 1190

原创 如何理解栈的增长方向

函数调用栈,简称栈。不管是函数的执行还是函数调用,栈都起着非常重要的作用

2024-05-25 09:44:20 633

原创 Linux delay相关函数实现

这里讨论基于 ARM 处理器架构的实现,udelay 实现在arch/arm/include/asm/delay.h中。gcc 的内建函数 __builtin_constant_p 用于判断 n 是否为编译时常数,如果 n 是常数,返回 1,否则返回 0。当然,从注释中我们可以看到,include/linux/delay.h 目录下只是通用的实现,可以被架构相关的实现覆盖掉。至此,loops_per_jiffy 变量就已经计算完毕,后面的 udelay 、BogoMIPS 计算都会用到该变量。

2024-01-28 14:45:50 1212

原创 X86_64 栈和函数调用

Intel 系列处理器通常称为x86,目前常用的笔记本或台式机都是 64 位的处理器,这些处理器使用的机器语言一般都是 x86_64,我记得以前学习微机原理课的时候,学习的还是 8086 处理器上的汇编。8086 是Intel的第一代16位的处理器,只有8个16位的寄存器,而现在的 64 位处理器对其进行了扩展,共有16个64位的寄存器。需要注意这里的栈是倒着画的,栈顶在下面,栈顶的内存地址是更小的,换句话说栈增长的方向是内存地址减小的方向。寄存器,这个寄存器中存储着栈顶的地址。到这里,函数栈情况如下图。

2023-10-15 11:34:17 787

原创 可执行文件 elf 和 bin

在 Embedded(嵌入式)中,如果上电开始运行,没有 OS 系统,如果将 ELF 格式的文件烧写进去, 包含一些 ELF 文件的符号表字符表之类的section,运行碰到这些,就会导致失败,如果用 objcopy 生成纯粹的二进制文件,去除掉符号表之类的 section,只将代码段数据段保留下来,程序就可以一步一步运行。在Linux OS上,为了运行可执行文件,他们是遵循 ELF 格式的,通常 gcc -o test test.c,生成的 test 文件就是 ELF 格式的。ELF 文件并执行。

2023-10-05 13:41:58 849

原创 关于内存对齐你需要了解的事

这篇文章的目的是带你了解什么是内存对齐,具体的内存对齐的细节、处理方式、不同架构则不会去详细讲解,只做科普文用。内存对齐和数据在内存中的位置有关。内存对齐以字节为单位进行,一个变量的内存地址如果正好等于它的长度的整数倍,则称为自然对齐。比如在32位 cpu 下,一个 u32 的内存地址为0x00000004 ,则属于自然对齐。内存空间按照字节进行划分,理论上可以从任意地址开始读取,实际上会要求读取数据的首地址是某一个值的整数倍。

2023-10-05 13:26:46 2200

原创 动态链接那些事

动态链接那些事

2023-10-03 22:28:01 1371 2

原创 可执行文件的装载与进程

当我们在Linux系统的bash下输入一个命令执行某个ELF程序时,Linux系统是怎样装载这个ELF文件并且执行它的呢?首先在用户层面,bash进程会调用fork()系统调用创建一个新的进程,然后新的进程调用execve()系统调用执行指定的ELF文件,原先的bash进程继续返回等待刚才启动的新进程结束,然后继续等待用户输入命令。它的三个参数分别是被执行的程序文件名、执行参数和环境变量。在进入execve()系统调用之后,Linux内核就开始进行真正的装载工作。

2023-09-04 11:09:59 572

原创 静态链接过程

1、空间与地址的分配  现在的链接器空间分配的策略基本上都采用 “相似段合并” 的方式。通过将所有相同类型的 section 合并到一起,例如将所有输入目标文件的 .text 合并(按顺序合并)到输出文件的 .text 节中;然后,链接器根据运行平台中进程虚拟地址空间的划分规则,为所有输入目标文件中定义的节和符号分配运行时内存地址;完成之后,程序中的每条指令和符号都有唯一的运行时内存地址了。链接器的空间分配示意如下:  使用这种方法的链接器都采用两步链接的方法。  第一步,空间与地址分配。扫描所有的

2023-07-26 22:34:24 705

原创 ELF文件结构描述

经过上面的描述,我们了解到了强符号,弱符号,强引用,弱引用的概念。强符号可以替换弱符号。弱引用可以避免函数未定义的错误。强符号替换弱符号一些库中对外接口可以声明为弱符号。比如:实现一个 myadd(int num1,int num2) 接口,之后再将项目中的所有 add 替换为 myadd。这种方式可行,但是存在缺点:修改量大,并且后续人员不清楚背景,很有可能继续使用熟悉的 add 接口。更新 math 库,从更本解决此问题。这种方式比较推荐。

2023-07-22 16:57:08 348

原创 目标文件里有什么

1、目标文件  目标文件编译源代码后生成的文件叫做目标文件。

2023-07-21 23:40:47 343 2

原创 关于网络命令 ping 你了解多少

网络 ping 命令详解

2023-05-15 23:05:32 2904

原创 lwip - 链路层收发以太网数据帧

以太网帧中的数据长度规定最小46字节,最大1500字节,ARP和RARP数据包的长度不够46字节,要在后面补填充位。最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。注意,MTU这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。封装后的数据包称为数据帧,数据帧的封装的信息决定了数据如何传输。

2023-04-22 23:14:37 1551

原创 Linux内核之文件描述符、文件表、i-node table

前言文件描述符在unix系统中几乎无处不在网络接口 select、poll、epoll 涉及到文件描述符IO接口 read、write 也涉及到文件描述符从形式上来看文件描述就是一个整数,那么我们可不可以更进一步去了解一下呢?1、文件描述符是一个int型整数2、文件描述符创建是有一定的规则。在创建文件描述符的时候系统会在files_struct数组中,去找到一个当前没有被使用的一个最小下标,作为一个新的文件描述符。3、程序开始运行时,有三个文件被自动打开了,打开时分别使用了这三个文件描述符

2021-04-27 16:44:30 1019

原创 操作系统中的锁——信号量(同步信号量、互斥信号量)、P/V操作、自旋锁

面试中常会问及操作系统中锁的概念,这里就来讲解一下。

2021-03-23 15:31:41 2861 1

原创 C语言关键字、函数杂谈(1)

1、static关键字static关键的,是用来声明静态变量的。主要作用有两个:隐藏与隔离的作用(当同时编译多个文件)保持变量内容的持久性下面就这两个功能进行详解:(1)隐藏与隔离的作用(当同时编译多个文件):​  上面已经阐述过,全局变量虽然属于静态存储方式,但并不是静态变量。全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。​​  如果我们希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件

2021-03-22 21:20:48 736

原创 C/C++ 之 内存管理

C/C++中的内存管理到底是什么样的呢? 网上的说法很多,分区、分段。这里将为大家详细讲解一下。

2021-03-22 20:51:58 239

原创 C 函数指针

C语言的函数指针?C语言、C++的结构体有哪些区别?C++的类与结构体有哪些区别?

2021-03-07 15:00:42 298 1

原创 C++何时调用构造函数,何时调用析构函数

前言

2021-03-05 20:01:37 10493 3

原创 网络中的数据包到底是如何转发的

IP地址、子网掩码、网关、DNS、NAT、端口映射

2020-08-23 16:58:00 6833 2

原创 看似没有深度问题?——C/S架构&&B/S架构?

浅谈C/S架构与B/S架构的区别~

2020-05-27 17:02:47 524

原创 云计算入门文章——这一篇就够了

现在这个云时代,云计算渗入我们生活的方方面面。也许你正在使用云服务。但只是你不知道而已。

2020-05-26 21:21:18 2008 1

原创 C/C++中*和&的用法详解

  C/C++中&和∗*∗的用法一直是非常让人头疼的难点,课本、博客上讲这些知识点一般都是分开讲其用法的,没有详细的总结,导致我在这方面的知识结构格外混乱。以下这篇文章系统、全面的讲解C/C++中的&和∗*∗。供大家参考~1. C语言中 1.1 ∗*∗乘法运算:x=y∗*∗z;乘法赋值运算:x∗*∗=y;相当于x=x∗*∗y注释:/∗*∗这里是你的注释∗*∗/指针的声...

2020-05-06 21:39:31 3650

原创 看完这篇区块链的文章,就有东西和别人扯皮了,而且扯的还很好

网上有很多关于区块链的文章,要么过于深奥,对于初学者很难弄懂,要么过于浅显,也很难想通。这篇文章从底层讲起,由浅入深,从密码学算法讲起,不断深入,算是一遍比较完备的区块链——比特币的文章。文章以比特币为例,来讲解区块链。因为区块链最初就是因为比特币被人们熟知的。坚持把这篇文章看完,比特币的知识就基本了解了。在辅以区块链的一些其他应用,就会真正在区块链这个方面上一个台阶。

2020-04-22 11:43:08 2457 2

原创 汇编与技术接口——指令系统漫谈

1.数据寻址方式2.数据运算指令3.程序控制指令4.处理机控制指令5.块操作指令

2020-04-21 11:22:15 1530

原创 Shell基础——Bash的运算符

Bash 常见运算符

2020-04-06 17:38:50 462

原创 Linux入门基础——常用命令(四)

6.进程控制类命令ps功能:用来显示系统当下进程信息格式:ps [参数]-l:长格式输出-u:按用户名和启动时间的顺序来显示进程-j:用任务格式来显示进程-f:用树形格式来显示进程-a:显示所有用户的所有进程(包括其他用户)-x:显示无控制终端的进程-r:显示运行中的进程top功能:动态监视系统任务的工具,输出结果是连续的格式:top [参数]-b:以批量模式运行,但不...

2020-04-06 17:23:55 299

原创 Linux入门基础——常用命令(三)

文章总结了常见的文件权限管理命令、文件搜索命令、帮助命令、用户管理命令

2020-04-05 20:15:58 431 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除