自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux系统调用过程详解:应用程序调用驱动过程

文件描述符本质上是一个非负整数,当一个程序打开一个文件(包括设备文件)时,操作系统返回的文件描述符作为未来所有对该文件的操作的引用。,找到设备文件对应的struct inode结构体描述的信息,得知要操作的设备类型(字符设备还是块设备),还会分配一个struct file结构体。功能:文件描述符提供了一个通用的方法来引用所有类型的文件,无论它们是普通的磁盘文件、目录、链接还是设备(如键盘、硬盘、网络设备等)。a、每个设备文件都有一个对应的’inode‘结构体,包含了设备的主次设备号,是设备的唯一标识。

2024-05-10 21:49:53 1335

原创 Linux字符设备驱动-详解与实操:驱动架构、设备树、Pinctrl子系统和GPIO子系统、platform、设备树下的platform

通过‘inode’的‘i_cdev’字段,驱动可以访问与设备相关联的‘cdev’结构,该结构 包含设备的核心信息和操作。Linux内核中因为MMU的存在不能直接访问物理地址,需要通过ioremap把虚拟地址映射到对应的物理地址,我们对虚拟地址的访问,会自动修改到对应的物理地址。device_destroy():第一个参数,设备类指针,哪个设备类。第三个参数:设备类型和编号的组成,MKDEV宏生成,代表设备的主设备号和次设备号。

2024-04-29 23:06:25 2027

原创 设备树的引入和内核对设备树的处理

其他的单板A或单板B只需要include该文件,然后程序中可以引用相关设备的标签,来选择开启 或者关闭一些设备(如这里的uart0),只需要修改它们的状态就好,很多代码就都不用编写啦。使用设备树的原因:每款芯片都会有很多不同的单板使用它,这样子每个单板都有自己的资源.c文件,引脚不相同,需要重新编译和包含了大量无用的代码,所以采用配置文件的方式加入内核(DTS)(2)如果of_match_table中含有type值,就跟dev的device_type属性 比较,若一致则成功,否则返回失败。

2024-04-15 19:29:14 540 1

原创 C++学习笔记:油管博主Cherno

(8)永远都不要在数组内存中访问数组的大小,但可以用sizeof()得到这个数组占了多少字节,然后除以它的数据类型的大小,得到数组元素个数(大小)。当你写一个应用程序并启动它时,整个的程序被载入内存,在你写的代码中,所有的指令告诉计算机要做什么,所有的这些都被加载到内存中,这就是CPU如何访问你的程序并执行指令的。(7)bool变量占用一个字节byte,但实际上只需要一个位bit,但由于计算机中的寻址是按字节byte来的,所以需要占用一个字节来找到它,我们也可以将8个bool存放在1个byte里。

2024-04-15 19:13:59 818 1

原创 Linux驱动进化:传统模型、设备总线驱动模型、设备树

先看platform_device,去platform_driver中找,不管谁先注册,device和driver都会两两比较。(2)但是这样子 每种资源都要定义一个resource如:led_resource、key_resource等,这样子不现实。(1)将使用led的引脚配置单独写成一个结构体,只需要提供要配置哪个引脚(如GPIO1_3)即可完成GPIO的配置。都会有一个.c,每次修改不同的引脚时,都会去改动到,会有大量的重复的.c,更换单板后需要修改的更多。(4)操作寄存器(给寄存器赋值配置)

2024-04-05 14:04:48 355 1

原创 FreeRTOS基本介绍、列表、移植、值得注意的点

17、在调度任务中,不同优先级任务,按优先级别高低顺序来执行,即抢占式任务调度策略,高优先级需要通过延时函数vTaskDelay(10);释放自身CPU使用权,低优先级任务才能运行,同时同一优先级任务按时间片调度策略运行,每个任务只运行很短的时间1ms,最后若是两个任务相同,相当于同时完成。(FreeRTOS可管理的最大优先级(中断的))优先级策略调度与FreeRTOS中的调度器所使用的调度算法(例如时间片轮转、抢占式调度算法)之间有密切的关系,因为优先级策略决定了任务在调度器中执行的顺序和方式。

2024-04-05 14:02:16 908 1

原创 Linux多进程、线程间通信:共享内存、信号量、管道、互斥锁

在中编写一应用程序,该程序包含三个进程,每个进程中包含两个线程,采用共享内存、信号量、管道等通信方式实现进程间的通信、同步、互斥操作。文章末尾附全部代码~(1)创建两个有名信号量sem_read和sem_write,一个用于读取共享内容,一个用于写入。是在程序使用的变量名,用来操作信号量的描述符。是系统中标识信号量的名字,用于的信号量通信和同步。(4)因为在该程序中,信号量是在父进程中创建的,所以所有的子进程和线程都可以直接用sem_read来使用信号量。它们共享父进程创建的资源(

2024-03-26 16:44:21 981 1

原创 Linux多进程、线程创建管理及状态切换

在嵌入式Linux中创建四个进程,2个实时进程,2个非实时进程。(2)sched_setscheduler()函数:第一个参数为需要改变调度策略的目标线程,第二个参数为改变的调度策略,第三个参数为一个结构指针类型,用以指定调度优先级。(1)当pid==0时,说明此时代码运行是在子进程中,会退出该子进程,以免子进程继续创建子进程,父进程中的pid则为创建的子进程的pid号。第一个参数指向线程标识符的指针,第二个参数设置线程的属性,第三个参数是线程运行函数的起始地址,第四个参数为运行函数的参数。

2024-03-25 17:33:23 1057

原创 侯杰C++ 面向对象高级开发—学习心得和笔记

也就是使用这个类的定义中已经写好的函数,把这些函数作为自己的函数。设计的结构:设计了一个subject包含数据,其中有容器(指针Delegation)指向了Oberver观察者(父类),观察者会有几种不同的角度,每个角度对应着一个子类。18、当是函数内创建的变量时,返回值不能是引用reference,此时的变量在函数结束后,会被删除,当返回值传回去时,数据已经不存在了。否则,有的数组元素指向的内存块可能删除不完全(在数组元素为指针时,只将指针占用的内存块释放完,但是指针指向的数据内存并未释放完全)

2023-10-30 18:16:04 239 1

原创 C和指针-百句心得理解

在阅读完《C和指针》后得出的重要心得,在编程遇到困难时,或许将起到醍醐灌顶的作用。也将更好的帮助理解C语言的执行过程,带来对C语言新的感悟。1、get()函数从输入缓冲区(键盘输入)读取一个字符串存储到指针变量str所指向的内存空间。2、“Hello”字符串在内存中占6个字节,最后一个是“NUL”。但字符串长度并不包含“NUL”3、“NUL”是ASCII字符集中‘\0’字符的名字。而“NULL”是值为0的指针。

2023-10-10 19:48:16 182 1

原创 Python中--类的使用和基础概念

将实例作为类的属性后,每当方法__init( )__被调用时,都将创建一个新的Battery实例,并将实例存储在属性self.battery中,每个ElecticCar实例都包含一个自动创建的Battery实例。类中的函数都称为方法,__init( )__则是一个特殊的方法,每次用类创建实例时,python都会自动执行它。类中的每个属性必须有初始值,若在方法__init__( )内已经指定了属性的初始值,则无需在创建实例时再给该属性提供初始值的形参。可以将实例用作类的一个属性,以简化代码,更具逻辑性。

2023-09-08 20:18:49 162 1

原创 CPU、GPU和CUDA之间的关系及基础概念

在CUDA架构中,主程序由CPU执行,当遇到数据并行处理的部分,CUDA会将程序编译成GPU能执行的程序,并传送到GPU。CPU主要包括运算器(Arithmetic and Logic Unit,ALU)、控制单元(Control Unit,CU)、寄存器(Register)、高速缓存器(Cache)和通信的数据、控制及状态总线。(主要是并行计算部分)一般情况下,CPU执行主机端的程序会准备好数据并将其复制进显卡内存中,然后设备端程序由GPU执行完后,主机端程序会将生产的数据结果从显卡内存中取回。

2023-09-05 21:16:27 2136

原创 深度学习重要基础知识(踩过的坑)

表示参数w5对误差的贡献。n为学习率,代入loss后可对权重值w5进行更新,若loss越大,即结果和真实值差距越大,则w5变化越大。loss通常由损失函数得到,损失函数常见的由MSE均方误差和CorssEnropy交叉熵损失函数。这里使用的是SGD随机梯度下降法,此外还有Adam等权重更新方法。该误差(loss)使用的计算公式为MSE。若想理解整个过程,可参考。

2023-07-27 21:30:50 193

原创 Modbus-RTU需要特别关注的点(及容易被遗漏忽视的地方)

本文主要介绍了Modbus-RTU使用和编写过程中需要特别注意的关键知识点,及容易被遗漏忽视的地方。

2023-07-03 20:37:17 2380 1

原创 嵌入式-stm32重要基础知识(及踩过的坑)

ARM 是一个做芯片标准的公司,它负责的是芯片内核的架构设 计,而 TI,ST 这样的公司,他们并不做标准,他们是芯片公司,他们是根据 ARM 公司提供的 芯片内核标准设计自己的芯片。(1)寄存器组、(2)NVIC、(3)中断和异常、(4)储存器映射、(5)总线接口、(6)调试支持(debug interface)、(7)指令集。所以,任何一个做 Cortex-M3 芯片,他们的内核结构都是一样的,不同的是他们的存储器容量,片上外设,IO 以及其他模块的区别。2、CMSIS标准与固件库的关系。

2023-04-24 16:06:17 4057 1

原创 Linux值得关注的基础概念和知识点,更好理解Linux

除了第一位表示文件类型外,可以看到剩下9位,以3位一组,分别表示文件拥有者的权限,文件拥有者所在用户组的权限以及其他用户权限。在一些书中又将这三个分别称之为属主,属组,其他用户。Ubuntu中不同的用户,实质上是为每个用户创建了一个专属根目录,Linux首先进入的是当前登录用户根目录,例如我的用户根目录/home/zhu。用户可以对自己用户根目录下的文件随意读写操作,但若要修改根目录“/”下的文件会提示没有权限。1) 拥有者是用户zhu,对文件bin的权限是“rwx”(前3位),可对该文件读、写和执行。

2023-04-12 18:37:04 122

原创 Linux常用命令-嵌入式学习储备知识

Linux常用命令-嵌入式学习储备知识

2023-04-11 21:56:42 192 2

原创 C语言面试常见问题

本文列举了常见的面试复试中会问到的C语言相关问题

2023-04-09 17:03:46 286 1

原创 单片机面试常见问题

本文列举了常见的面试复试中会问到的单片机相关问题

2022-07-20 21:11:05 17489

空空如也

空空如也

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

TA关注的人

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