自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C语言typedef详解

C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称,来替代系统默认的基本类型名称、数组类型名称、指针类型名称与用户自定义的结构型名称、共用型名称、枚举型名称等。

2023-12-20 17:52:26 785

原创 操作系统之银行家算法

Dijkstra在1965年提出的银行家算法是著名的,这个用于一个银行家给多个顾客贷款的算法可以直接用于操作系统给进程分配资源。

2023-12-20 10:10:28 394

原创 操作系统之死锁与信号量

是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。称此时系统处于死锁状态或系统产生了死锁。称这些永远在互相等待的进程为死锁进程。所占用的资源或者需要它们进行某种合作的其它进程就会相继陷入死锁,最终可能导致整个系统处于瘫痪状态。学到这里,我们可能会对前面提到的几个名词感到困惑,死锁,饥饿,死循环一样吗?都代表什么意思呢?死锁和饥饿是操作系统导致的问题,而死循环则是被管理者的问题,也就是程序员的问题。

2023-12-20 10:07:41 846

原创 对比SPI、UART、I2C通信的区别与应用

SPI通信是一种单主多从的通信方式,通信时需要指定从机地址。UART通信只需要两根线(TX、RX)实现即可,其中TX线是发送方向,RX线是接收方向。I2C通信采用两根线(SDA、SCL)实现,其中SDA线是数据线,SCL线是时钟线。I2C通信一般用于多主多从的通信方式,由于它采用了“主从”结构,可以实现多个主机在总线上进行数据通信。SPI、UART、I2C通信是常用的数字通信协议,它们在不同的场景下有不同的应用。UART通信的应用场景主要集中在需要点对点通信,数据传输速率较低的场合。

2023-12-13 17:08:04 906

原创 程序员的技术成长攻略

技术人为啥焦虑?恕我直言,说白了是胆识不足格局太小。胆就是胆量,焦虑的人一般对未来的不确定性怀有恐惧。识就是见识,焦虑的人一般看不清楚周围世界,也看不清自己和适合自己的道路。格局也称志向,容易焦虑的人通常视野窄志向小。如果从战略和管理的视角来看,就是对自己和周围世界的认知不足,没有一个清晰和长期的学习成长战略,也没有可执行的阶段性目标计划+严格的执行。

2023-12-08 15:21:15 898

原创 飞书面试题汇总

飞书java面试题汇总

2023-12-08 13:50:20 1134

原创 图解通信原理(以太网通信及物理层工作原理)

以太网是一种计算机局域网通信技术,主要由介质访问层(MAC L2) 协议、物理层(PHY L1)协议、电子信号连接组成。MAC层主要有交换芯片实现,物理层由PHY芯片实现,电信号连接主要定义电信号的接口规范。本文以成熟的以太网的技术实现为案例,解读数字通信的部分基本原理,澄清数字通信中一些核心的概念 :时钟、4B/5B编码、曼切斯特编码、NRZI编码、符号、波特率、比特率、CRC、扰码。并把关注的重点放在以太网物理层的协议规范。信号发送接收流程信源信息发送。

2023-12-05 11:05:37 1036

原创 vim常用键位总结

vim常用键位总结

2023-12-04 17:17:40 524

原创 Linux进程虚拟地址空间

谈到Linux进程虚拟地址空间,还要从程序说起。本文通过分析程序的编译执行过程,分享了Linux进程虚拟地址空间的结构、组织和创建,并通过分析Linux内核源代码,总结了进程、进程虚拟地址空间和虚存区的关系。

2023-12-04 16:34:50 987

原创 c语言全局变量和静态变量的初始化

因为程序开始运行时要用适当的值来初始化全局变量,所以初始值必须保存在编译生成的可执行文件中,因此初始值在编译时就要计算出来,然而有些数学函数例如sin(3.14)的值必须在程序运行时调用sin函数才能得到,所以不能用来初始化全局变量。c语言中局部变量可以用类型相符的任意表达式来初始化,而全局变量只能用常量表达式初始化,尤其对于全局变量来说,不能用一个数学函数或者其他的需要在运行时才能计算出结果的表达式进行初始化。全局变量在定义时如果不初始化则值为0.而局部变量如果定义时不初始化值是不确定的。

2023-12-01 16:57:09 679

原创 ASCII码一览表,ASCII码对照表

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是一套基于拉丁字母的字符编码,共收录了 128 个字符,用一个字节就可以存储,它等同于国际标准ISO/IEC 646。

2023-12-01 10:54:04 1115

原创 C语言结构体和联合体进阶版

因为这个是进阶版本,所以基础知识大家可以查阅其它资料。

2023-11-30 11:01:22 332

原创 C语言指针进阶版

指针是就是个变量,用来存放地址,地址唯一标识一块内存空间指针的大小是固定的4/8个字节(32位平台/64位平台)指针是由类型,指针的类型决定了指针的+-整数的步长,指针解引用操作的时候的权限指针的预算(指针+-整数、指针-指针)本文章重点字符指针数组指针指针数组数组传参和指针传参函数指针函数指针数组指向函数指针数组的指针回调函数。

2023-11-29 11:27:29 1097

原创 GCC简介

GCC简介

2023-11-28 16:06:20 770

原创 c语言笔试宝典

保存的面试过程中遇到的c语言笔试代码题,仅供参考

2023-11-23 19:48:04 320

原创 各种编码格式

循环冗余校验(Cyclic Redundancy Check, CRC)是一种根据网络数据包或计算机文件等数据产生简短固定位数校验码的一种信道编码技术,主要用来检测或校验数据传输或者保存后可能出现的错误。它是利用除法及余数的原理来作错误侦测的。CRC校验计算速度快,检错能力强,易于用编码器等硬件电路实现。从检错的正确率与速度、成本等方面,都比奇偶校验等校验方式具有优势。因而,CRC 成为计算机信息通信领域最为普遍的校验方式。常见应用有以太网/USB通信,压缩解压,视频编码,图像存储,磁盘读写等。

2023-11-21 14:23:32 336

原创 对于一段运行的C程序,通常包含以下几个存储区域来存储不同类型的数据

栈空间由操作系统自动分配和释放,当进入一个函数时,栈上会分配一段空间,用于存储函数的栈帧(包括局部变量和函数参数等),当函数返回时,这些栈帧会被自动释放。需要指出的是,上述存储区域的划分和命名可能会有所差异,不同的操作系统和编译器对存储区域的命名和实现方式有不同的约定和规定。代码区(Code Segment):代码区存储程序的执行代码,也称为文本区。常量区(Constant Segment):常量区用于存储常量数据(如字符串常量)和部分静态变量。堆(Heap):堆是用于存储动态分配的内存的区域。

2023-10-18 11:31:20 47 1

原创 内核进程通信

LIPC基于消息队列实现,每个进程中都有一个或多个消息队列,以便进行多个进程之间的通信。进程通过在消息队列中发送和接收消息来实现相互之间的通信。当进程向消息队列中发送消息时,该消息将被放入队列的尾部,接收方通过从队列的头部接收消息来获取进程发来的消息。发送和接收消息的过程是非阻塞的,这意味着发送方无需等待接收方的响应。LIPC使用基于优先级的调度机制,为每个通信接口分配独立的优先级,以保证高优先级消息的实时传输。总之,LIPC是一种轻便且实时性好的进程间通信方式,它采用异步通信和基于优先级的调度机制。

2023-07-17 10:22:15 102 1

原创 子卡热插拔

子卡热插拔对于高可用性和可靠性的设备和系统来说非常重要,它允许使用者在运行状态下增加或删除功能板,以满足业务需求或进行维护,从而保证系统的稳定性和连续性。软件支持需要开发适配这些接口和控制电路的驱动程序和操作系统,以实现对子卡的检测、控制、管理和数据传输等功能。总之,子卡热插拔技术可以在不停止或影响系统运行的情况下,实现对设备功能板的增加、升级、替换或移除。子卡热插拔是指在运行状态下,向已经运行中的设备中插入或拔出子卡而不会影响设备主板的工作状态,即不需要重启设备或者影响设备的其它子卡的工作的操作。

2023-07-05 15:23:51 51

原创 内核态编程规范

对操作系统资源的正确使用:内核态的代码需要正确地使用操作系统资源,比如锁、内存等,以避免死锁、内存泄漏等问题。避免使用非标准的API和库:内核态的代码需要避免使用非标准的API和库,以确保代码的可移植性和兼容性。精简代码:内核态的代码需要保持简洁,避免过于复杂的设计,以提高代码的可读性和可维护性。代码风格:内核态的代码需要遵循一定的代码风格,以提高代码的可读性和可维护性。性能:内核态的代码需要具有很高的性能,以保证系统的及时响应。

2023-06-30 10:17:39 91 1

原创 【1】Linux操作系统之启动篇

Linux操作系统内核是服务端学习的根基,也是提高编程能力、源码阅读能力和进阶知识学习能力的重要部分,本文开始将记录Linux操作系统中的各个部分源码学习历程。关于如何学习源码,个人觉得可以从以下角度入手,有效地提高阅读和学习的效率。(学习语言就不说了,这是基本功。学习IDE推荐Source Insight或者Visual Studio,网站源码阅读推荐woboq)理解代码的组织结构。以Linux源码举例,首先你得知道操作系统分为哪几个部分,他们单独做了什么功能,如何进行配合完成更为具体的功能。

2023-06-08 19:51:43 157

原创 【2】Linux操作系统之内核运行篇

上文中,我们分析了从按下电源键到BootLoader完成加载的过程。加载完成之后,就要正式启动Linux内核了,而在这之前首先要完成从实模式到保护模式的切换。

2023-06-08 19:49:03 281

原创 【3】Linux操作系统之内核初始化篇

前文分析到Linux内核正式启动,完成了实模式到保护模式的切换,并做好了各种准备工作。下来就要看开始内核初始化工作了。

2023-06-08 19:48:13 582

原创 嵌入式笔记

FlexE(Flex Ethernet)是一种新型的以太网传输技术,它将现有的以太网技术与SDH/SONET网络技术相结合,实现了以太网在传统的SDH/SONET网络中的柔性传输。FlexE技术使得以太网可以在不同的网络层次之间实现柔性的带宽分配和管理,具有高灵活性、高带宽效率和高控制能力等优点。FlexE技术的核心是灵活以太网(Flex Ethernet)接口,它可以支持任意长度的帧和任意速率的以太网接口,从而可以在SDH/SONET网络中实现分组级的交叉连接。

2023-06-07 16:46:38 681

原创 Interlaken协议简介

网络应用中两种主流的芯片到芯片的高速网络传输协议是XAUI 和SPI4.2。虽然SPI4.2在通道化、Burst大小可编程和每通道背压方面提供了重要的优势,但是接口的过大宽度限制了其可扩展性,并且协议的源同步性质降低了其有效覆盖范围。相反的,XAUI是一个狭窄的4通道接口,提供长距离,适合各种实现:PCB上的FR4、背板和电缆。但是作为一个基于数据包的接口,它缺乏通道化和流控制,限制了他的应用。而且这两种协议仅提供固定配置,限制了设计人员为应用定制接口容量的能力。

2023-06-07 13:44:46 2121

原创 从路由协议出发如何提高自组网通信可靠性

在车联网场景下,车辆之间的通信更具有不确定性,比如车辆的数量和运动速度经常发生变化,容易出现信号干扰和不稳定性,这就导致在车联网中,传统的路由协议难以保证通信的可靠性。路由选择协议是保证网络通信可靠性的核心技术,因此,在车联网场景下,如何优化路由协议,提高自组网通信可靠性成为了一个重要研究方向。(3)网络拓扑结构:在车联网中,节点之间的关系一直在变化,因此,路由选择算法需要根据节点之间的拓扑结构进行路径计算,以实现可靠的通信。在车联网场景下,需要设计一种高效、智能化的路由选择协议,以保证通信的可靠性。

2023-06-05 14:51:44 140

原创 嵌入式开发面试中经常被问到的问题记录

2. 使用的编程语言及选择原则:在嵌入式开发中,我通常使用C/C++语言。对于不同的应用场景,我们可以根据开发周期、代码复杂度、性能要求等因素来选择合适的编程语言。比如,在需要快速开发、维护简单的项目时,可以选择Python;3. 最具挑战性问题及解决方法:在某个项目中,我们遇到了实时数据传输和处理方面的问题。为了解决这个问题,我们采用了基于DMA(直接内存访问)技术的数据传输方式,并通过多线程来进行并行处理。其中,Cortex-M系列适用于嵌入式系统应用,而Cortex-A系列适用于高性能计算机应用。

2023-06-01 19:53:56 168 1

原创 怎样成为一名优秀的Linux驱动设备工程师?

熟悉Linux驱动框架是成为一名优秀的Linux驱动设备工程师所必需的技能。在进行驱动开发时,需要掌握各种调试和测试工具以确保代码的正确性。作为Linux驱动设备工程师,必须熟悉Linux内核的基本架构、进程管理、文件系统等方面的知识。Linux驱动开发主要使用C语言进行编写,因此需要掌握C语言的基础语法、指针、数据结构等知识。因此,在进行驱动开发之前,需要了解相关知识。在进行驱动开发时,需要熟悉设备的硬件接口和寄存器。不同类型的设备有不同的协议和接口规范,例如USB、I2C、SPI等。

2023-06-01 19:48:31 322 1

原创 Linux内核Makefile系统文件

系统的介绍makefile

2023-05-31 16:44:10 55 1

原创 Git基本使用教程

Git是目前世界上最先进的分布式版本控制系统。工作原理 / 流程:Workspace:工作区Index / Stage:暂存区Repository:仓库区(或本地仓库)Remote:远程仓库。

2023-04-10 18:51:31 53

原创 Linux crontab -e怎么保存退出

linux系统为每个用户都配置了单独的crontab表,用于区分不同用户的定时计划。系统的crotab文件存放于/etc/下,用户的crontab位于/var/spool/cron下。用户可以使用crontab -e来编辑。默认情况下如果没有指定用户参数,那么就表示编辑当前用户的crontab。当使用crontab -e编辑时,会调用系统默认的编辑器来进行编辑。所以如果使用crontab -e编辑那么跟使用vi/vim 编辑crontab是一样的。也就是vi/vim的保存退出方式。3、回车便可保存退出。

2023-04-09 22:55:50 2549

原创 Linux中VMtolls的安装过程

在windows下向指定的share folders写文件,在Linux客户机里面就能够看到,同样在Linux上写文件在Windows下也能够看到,并且可以修改。3、现在,你到VM菜单里的Removable Devices子项中的CDROM项,点击edit,打开VMWare的安装文件夹,里面是不是有一些*.iso啊,好的,按照前面的步骤,选择linux.iso来作为ISO文件。是不是看到了一个hgfs文件夹,这就表明安装成功了,下面就要讲一下怎么来设置共享了,这一部分更简单。Tools,选定它。

2023-04-07 18:31:13 190 1

原创 Linux内核学习笔记

如果你研究的是哪一种,可以找相应的硬件文档,了解硬件的工作原理。但是,如果这本书很好理解,那么恭喜你,你已经对Linux内核很熟悉了。另外,不要走弯路,不要看市面上那些讲Linux0.11的书,学你想学的就好。2.有了操作系统的基本概念,你就可以理解Linux的机制了。如果没有,可以学习《操作系统:设计与实现》,Andrew S.Tanenbaum写的那本,以MINIX为例解释操作系统的概念。内核的知识就像下面的绳结,一个一个的打结。如果你把里面的例子都做了,你就会对整个Linux编程有一个系统的了解。

2023-04-06 22:31:52 364 1

原创 关于C++ new和malloc的区别!

使用new操作符来分配对象内存时会经历三个步骤:调用operator new 函数(对于数组是operator new[])分配一块足够的内存空间(通常底层默认使用malloc实现,除非程序员重载new符号)以便存储特定类型的对象;编译器运行相应的构造函数以构造对象,并为其传入初值。对象构造完成后,返回一个指向该对象的指针。使用delete操作符来释放对象内存时会经历两个步骤:调用对象的析构函数。

2023-03-20 22:15:23 241

原创 pytorch-GPU版本下载过程,cuda11.3

eu1.下载anoconda尽量装在非c盘并设置环境变量F:\AnacondaF:\Anaconda\Scripts2.下载pycharm,见其他博客3.下载cuda11.3(我这个时间段pytorch要求)最后用conda创建python3.8的虚拟环境,激活虚拟环境,然后设置镜像源,推荐用清华镜像源,设置完成。然后用这段代码去掉-c pytorch,粘到虚拟环境中,开始安装pytorch最后在pycharm中添加虚拟环境,并输入以下代码import to..

2022-03-14 15:03:51 4483 2

空空如也

空空如也

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

TA关注的人

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