自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Printf的符号扩展问题

当您使用 %x 格式符将 a 打印出来时,由于 a 是有符号整数,其在内存中存储的是一个 8 位的二进制补码,说人话:就是由于内存中保存整数是通过补码的形式来保存的,所以我们使用printf(%x)来打印时打印的是 对应变量的值的补码 ,但是由于printf的工作机制它需要将不管是有符号变量还是无符号变量的值的补码都强制转化成无符号的值的补码 这是为了方便将其转换成字符串然后在标准输出流中打印出来,这是就会出现问题有符号和无符号都强制转化成了无符号 那怎么保证打印出来的补码是正确的?

2023-03-30 11:33:46 163

原创 程序编译和链接的一些知识

头文件与库文件的区别_XX風的博客-CSDN博客_库文件和头文件区别一、头文件在编程过程中,程序代码往往被拆成很多部分,每部分放在一个独立的源文件中,而不是将所有的代码放在一个源文件中。考虑一个简单的小例子:程序中有两个函数main()和abc()。main()函数位于main.cpp,abc()函数位于abc.cpp,main()函数中调用abc()函数。............

2022-08-15 19:17:14 860

原创 Linux LCD驱动程序

Frame是帧的意思,buffer是缓冲的意思,这意味着Framebuffer就是一块内存,里面保存着一帧图像。Framebuffer中保存着一帧图像的每一个像素颜色值,假设LCD的分辨率是1024x768,每一个像素的颜色用32位来表示,那么Framebuffer的大小就是:1024x768x32/8=3145728字节。简单介绍LCD的操作原理:① 驱动程序设置好LCD控制器:根据LCD的参数设置LCD控制器的时序、信号极性;根据LCD分辨率、BPP分配Framebuffer。.............

2022-08-08 18:43:00 1531

原创 Linux内核中的链表——struct list_head

Linux内核中链表介绍_晴天_QQ的博客-CSDN博客_linux 链表链表是Linux内核中最简单、最普通的数据结构。链表是一种存放和操作可变数量元素(常称为节点)的数据结构。链表和静态数组的不同之处在于,它所包含的元素都是动态创建并插入链表的,在编译时不必知道具体需要创建多少个元素。另外也因为链表中每个元素的创建时间各不相同,所以它们在内存中无须占用连续内存区。正是因为元素不连续地存放,所以各元素需要通过某种方式被连接在一起。于是每个元素都包含一个指向下一个元素的...https://blog.csd

2022-06-12 18:20:05 1708

原创 内核如何管理驱动程序

对于chardevs 数组项指向的char_device_struct结构体中的next成员实现多个char_device_struct结构体之间的关联,在系统中主要是完成该类型变量的链接(主设备号相同,次设备号不同且次设备号区间不交叉的结构体变量才会链接在一起)我们在使用register_chrdev_region ( )/alloc_chrdev_region ( ) 会传入设备号dev (包含主设备号和次设备号) 和 minorct(minor count) 通过设备号dev中的次设备号 和 min

2022-06-02 21:57:20 669 1

原创 Input子系统

input子系统软件框架input 就是输入的意思,因此 input 子系统就是管理输入的子系统,和 pinctrl、gpio 子系统 一样,都是 Linux 内核针对某一类设备而创建的框架。比如按键输入、键盘、鼠标、触摸屏等 等这些都属于输入设备,不同的输入设备所代表的含义不同,按键和键盘就是代表按键信息, 鼠标和触摸屏代表坐标信息,因此在应用层的处理就不同,对于驱动编写者而言不需要去关心 应用层的事情,我们只需要按照要求上报这些输入事件即可。统一管理外部输入设备- 按..

2022-05-30 00:57:56 721 1

原创 I2C子系统

I2C总线驱动框架详解_bobuddy的博客-CSDN博客_i2c驱动架构I2C总线驱动框架详解一、I2C子系统总体架构1、三大组成部分(1)I2C核心(i2c-core):I2C核心提供了I2C总线驱动(适配器)和设备驱动的注册、注销方法,I2C通信方法(”algorithm”)上层的,与具体硬件无关的代码以及探测设备 检测设备地址的上层代码等。。(2)I2C总线驱动(I2Cadapter):I2C总线驱动是I2C适配器的软件实现,提供I2C适配器与从设备间完成数据通信的能力。I2C总线驱动由i2c_ad

2022-05-26 15:33:53 588

原创 Linux常用的分配内存的函数

寄存器和存储器_OoZzzy的博客-CSDN博客_外部寄存器硬件内核先说内核:内核是操作系统最基本的部分。它是为众多应用程序提供对计算机硬件的安全访问的一部分软件,这种访问是有限的,并且内核决定一个程序在什么时候对某部分硬件操作多长时间。内核的分类可分为单内核和双内核以及微内核。严格地说,内核并不是计算机系统中必要的组成部分,附一张内核体系结构照片CPU中央处理器(CPU,Central Processing Unit)是一块超大规模的集成电路,是一台计算机的运算核心(Core)和控制核心( Contro.

2022-05-18 23:21:24 1009

原创 Linux内核中的竞态和并发

内联汇编看韦东山完全开发手册中的内联汇编部分什么是竞态https://blog.csdn.net/lj19990824/article/details/104563968竞态:多个执行单元同时被执行,处理的是同一个资源,就会导致竞态导致竞态原因:1.多进程同时访问操作临界资源(进程和抢占它的进程之间会导致竞态)2.进程和中断3.对称多处理器解决竞态的具体方法1.屏蔽中断2.原子变量3.使用锁什么是抢占?一个线程在一个cpu上运行, 不是这个线程主动让出cpu导致的其

2022-05-17 00:17:22 694

原创 Linux系统中的中断

中断的引入妈妈怎么知道孩子醒了妈妈怎么知道卧室里小孩醒了?① 时不时进房间看一下:查询方式简单,但是累② 进去房间陪小孩一起睡觉,小孩醒了会吵醒她:休眠-唤醒不累,但是妈妈干不了活了③ 妈妈要干很多活,但是可以陪小孩睡一会,定个闹钟:poll方式要浪费点时间,但是可以继续干活。妈妈要么是被小孩吵醒,要么是被闹钟吵醒。④ 妈妈在客厅干活,小孩醒了他会自己走出房门告诉妈妈:异步通知妈妈、小孩互不耽误。后面的3种方式,都需要“小孩来中断妈妈”:中断她的睡眠、

2022-05-12 12:36:15 789

原创 Linux驱动基础

APP打开的文件在内核中如何表示?我们在前面学习文件IO的过程中知道 当打开一个文件时,内核就会创建一个新的 打开文件表表项,也就是file结构体。file结构体保存了关于这个文件的许多信息。APP打开文件时,可以得到一个整数,这个整数被称为文件句柄(文件描述符)。对于APP的每一个文件句柄,在内核里面都有一个“struct file”与之对应。可以猜测,我们使用 open 打开文件时,传入的 flags、mode 等参数会被记录在内核 中对应的 struct file 结构体里(f_f

2022-04-21 18:47:48 1095

原创 网络编程基础

网络基础知识一些常见术语的基本概念网络分类按照网络的作用范围分类,我们可以将其分为局域网、城域网、广域网3类。 a) 局域网(Local Area Network,简称LAN) 局域网通常都是私有的,用于连接一个办公室、建筑物或者校园内的设备,通常范围设定在千米以内。通常情况下一个局域网只会采用一种拓扑结构。 b) 广域网(Wide Area Network,简称WAN) 广域网常常横跨多个国家、地区或大洲,所覆盖的范围通常到几千千米,并且被多个机构.........

2022-02-11 23:15:51 2222

原创 Linux中的线程

1.线程的基本概念2.线程和进程的区别*线程的同步线程的调度线程的通信编程思想之多线程与多进程(1)——以操作系统的角度述说线程与进程_阳光日志-CSDN博客_多线程和多进程编程线程是什么?要理解这个概念,须要先了解一下操作系统的一些相关概念。大部分操作系统(如Windows、Linux)的任务调度是采用时间片轮转的抢占式调度方式,也就是说一个任务执行一小段时间后强制暂停去执行下一个任务,每个任务轮流执行。任务执行的一小段时间叫做时间片,任务正在执行时的状态叫运行状态,任务执行一段时间后强制

2021-11-04 22:43:06 1606

原创 进程间的通信

一,进程间通信简介 由于每个进程都有自己独立的运行环境,因此进程与进程间是相对封闭的。如何让两个封闭的进程之间实现数据通信是进程编程的重点与难点。Linux的内的进程通信机制基本来源于Unix的系统对Unix的发展做出巨大贡献的两大主力--AT&T公司的贝尔实验室和加州大学伯克利分校 - 。在进程通信领域研究的侧重点不同。 贝尔实验室对Unix系统早期的进程间通信手段进行了改进与扩充,形成了System V IPC(进程间通信)。互相通信的进程被限定在单个计算机内。而伯克利分校则跳出...

2021-10-29 20:46:24 543

原创 Linux的五种IO模型

为了更好的理解五种IO模型,我们先来说一下几个概念:同步,异步,阻塞和非阻塞。同步和异步同步  所谓同步,就是在发出一个功能调用时,在没有得到结果之前,该调用就不返回,调用者会轮询查看结果。比如,调用readfrom系统调用时,必须等待IO操作完成才返回。异步  异步的概念和同步相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。比如:调用aio_read系统调用时,不必等IO操作完成就直接返回,调用结果通过信号来

2021-10-23 11:44:04 318

原创 进程基本概念

一、Linux多任务机制1、多任务机制简介 多任务处理指的是用户可以在同一时间内运行多个应用程序,每个正在执行的应用程序被称为“任务”。相比于单任务的操作系统(例如早期的MS-DOS),当代绝大多数操作系统都支持多任务,功能增强了很多。 但是,CPU(每个核心)在某一时刻只能执行一个任务,因此多任务操作系统必须解决CPU核心(单任务线性)与操作系统的任务(多任务并行)之间的矛盾。常见的解决方案是将CPU的运行分解成时间片(几十毫秒到上百毫秒不等),每个任务被分配不同的时间片来独占...

2021-10-19 11:21:32 406 1

原创 linux应用编程——Linux文件中的IO

一、文件与文件类型1、文件定义 定义:文件(File)是一个具有符号名字的一组相关联元素的有序序列。文件可以包含的内容十分广泛,操作系统和用户都可以将具有一定独立功能的一个程序模块、一组数据或一组文字命名为一个文件。 文件名:这个数据有序序列集合(文件)的名称。2、文件的分类 文件由许多种,运行的方式也各有不同。在Windows中,我们是通过文件的后缀名来对文件分类的。例如.txt、.doc、.exe等。而在Linux系统中则不是,它不以文件后缀来区分文件的类型。...

2021-10-09 18:00:51 633

原创 IIC通讯协议

协议规定,当SCLK时钟信号一直处于高电平状态时,SDA线由高电平跳变到低电平这个动作,表示起始信号。注意此时就算SDA数据线的电平跳变完,SCLK线依然是高电平哦。当连接在IIC总线上的外设模块检测到这个信号时,就知道数据要开始传输了。对于结束信号同理,协议规定,当SCLK时钟信号一直处于高电平状态时,SDA线由低电平跳变到高电平这个动作,表示结束信号。在明白如何开始之后,就要开始进行数据的传输了。协议规定,在数据的传输过程中,SCLK为高电平时,外设模块开始采集SDA数据线上的数据,此时要求SD

2021-09-30 00:21:32 1294

原创 ARM体系结构和异常处理方式

ARM 有7个基本工作模式:User :非特权模式,大部分任务执行在这种模式 FIQ : 当一个高优先级(fast) 中断产生时将会进入这种模式 IRQ :当一个低优先级(normal) 中断产生时将会进入这种模式 SVC(Supervisor) : 当复位或软中断指令执行时将会进入这种模式 Abort ...

2021-04-11 09:50:23 422

原创 CPU数据总线和地址总线 内存和外存

地址总线和数据总线1.CPU通过地址总线寻址,然后通过数据总线与外部设备互换信息。(即通过地址总线确定要访问的内存地址,再由数据总线传输数据)从开发者角度来说,数据总线长度应该和地址总线宽度一致,也就是一个指针和一个整数宽度相等,但是从硬件角度来讲,有些不切实际,比如说8位的CPU,如果地址总线和数据总线宽度一致,那么只能寻址256个地址单元(多少位cpu对应的是数据总线),这对于实际应用来说,太少了,从商业角度来讲太浪费了,所以一般8位cpu的地址总线都是16位的(专门增加了一些16位的地址指令)

2021-04-07 12:24:25 5477 1

空空如也

空空如也

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

TA关注的人

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