自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 机器人学(2)

(顺序不一样,结果不一样)

2023-03-25 15:13:16 607 1

原创 机器人学(1)

一般而言,我们假定我们假定机器人的各个关节是一个刚体,在每个关节上有两种状态:移动和转动在平面上:对于一个刚体而言,它有X方向和Y方向的移动自由度,还有一个转动自由度,共三个自由度EOFs在空间中:有X、Y、Z方向的移动自由度,还有绕X/Y/Z的转动自由度,共六个自由度描述机器人姿态:相对于世界坐标系world frame,刚体body frame的移动与转动;移动通过原点的偏移,转动通过刚体的三坐标单位长度在世界坐标系的投影,一般通过矩阵来描述。

2023-03-24 21:00:51 235

原创 阻塞式IO(驱动)

构造并初始化等待队列头、构造等待队列节点、设置进程状态、将节点加入等待队列,放弃CPU、调度其他程序执行、适时唤醒。

2023-01-16 15:32:01 340

原创 Input子系统

设计了输入子系统**事件处理层:**接收来自核心层上报的事件,并选择对应的handler(事件处理器 struct input_handler)去处理。内核维护着多个事件处理器对象,每个input_handler对象专门处理一类事件,所有产生同类事件的设备驱动共用同一个handler。**设备驱动层:**主要实现获取硬件设备的数据信息(包括触摸屏被按下、按下位置、鼠标移动、键盘按下等等),并转换为核心层定义的规范事件后提交给核心层,该层每个设备对应一个struct input_dev对象,

2023-01-09 16:24:15 109

原创 I2C总线驱动

Inter-Integrated Circuit: 字面意思是用于“集成电路之间”的通信总线,简写:IIC(或者I2C)i2c传输的要点就是: 传输一个字节 后面必然紧跟一个"响应"信号----应答信号.这个响应信号可能来自主机,或者是从机,具体是谁,就要看传输方向。传输方向分两种情况(每种情况又有两种可能: A无应答和 B有应答):1.主机->从机,主机对从机发一个字节之后,主机要读取从机的响应信号(主机读SDA线)

2023-01-08 23:30:56 1755

原创 平台总线式驱动开发——基本框架

硬件上同一总线上的设备遵循一致的时序通信,在其基础上增加管理设备和驱动的软件功能,于是引入总线(BUS),各种总线的核心框架有内核来实现,通信时序一般由SOC供应商支持;初期方案,各种device需要编码方式注册进内核中的设备管理结构中,为了进一步减少这样的编码,引入设备树。3.2 id匹配(可想象成八字匹配):一个驱动可以对应多个设备 ------优先级次低。3.3 设备树匹配:内核启动时根据设备树自动产生的设备 ------ 优先级最高。总线:匹配设备和驱动——婚介所:提供沟通机制,完成拉郎配。

2023-01-07 14:21:33 780

原创 驱动之设备模型

设备模型总线、驱动、设备sysfs(文件系统)+Uevent(通信)+udevd(上层app)

2023-01-06 14:20:22 378

原创 静态库和动态库的使用

库是一个二进制文件,包含的代码可被程序调用标准C库、数学库、线程库…库有源码,可下载后编译;也可以直接安装二进制包,库是事先编译好的,可以复用的代码。在OS上运行的程序基本上都要使用库。使用库可以提高开发效率Windows和Linux下库文件的格式不兼容Linux包含静态库和动态库。

2023-01-05 18:27:58 459

原创 目录的操作

opendir函数用来打开一个目录文件:使用文件描述符,要配合open的使用DIR:是用来描述一个打开的目录文件的结构体类型成功返回目录流指针,出错返回NULLreaddir函数用来读取目录流中的内容:struct dirent是用来描述目录流中一个目录项的结构体类型包含成员 char d_name[256]成功返回目录流中下一个目录项出粗或到末尾时返回NULLclosedir函数用来关闭一个目录文件:成功时返回0;出错返回EOF。

2023-01-05 15:55:40 293

原创 文件IO----(open、close、read、write、lseek)

介绍:(系统IO、系统调用)POSIX(可移植操作系统接口)定义的一组函数,不提供缓冲机制,每次读写操作都引起系统调用,核心概念是文件描述符,访问各种文件类型,Linux下,标准IO基于文件IO实现文件描述符:每个打开的文件都对应一个文件描述符文件描述符是一个非负整数。Linux为程序中每个打开的文件分配一个文件描述符文件描述符从0开始分配,依次递增文件IO操作通过文件描述符来完成。

2023-01-05 13:15:20 304

原创 中断处理---下半部机制

起源:struct tasklet_struct{​ struct tasklet_struct *next;​ unsigned long state;​ atomic_t count;​ void (*func)(unsigned long);​ unsigned long data;};void tasklet_func(unsigned long data);2.4 调度tasklet3.下半部机制之workqueue-----基于内核线程3.1 工作队列结构体:typedef void

2023-01-03 14:59:08 578 1

原创 中断处理—基础框架

一种硬件上的通知机制,用来通知CPU发生了某种需要立即处理的事件。

2023-01-02 21:04:41 239

原创 设备树(devicetree)

减少垃圾代码减轻驱动开发工作量驱动代码和设备信息分离参考Open Fireware设计用来记录硬件平台中各种硬件设备的属性信息。

2023-01-01 20:34:37 669

原创 内核内存管理

内核将物理内存等分成N块4KB,称之为一页,每页都用一个struct page来表示,采用伙伴关系算法维护内核地址空间划分图:3G~3G+896M:低端内存,直接映射 虚拟地址 = 3G + 物理地址细分为:ZONE_DMA、ZONE_NORMAL大于3G+896M:高端内存细分为:vmalloc区、持久映射区、固定映射区分配方式:vmalloc:虚拟地址连续,物理地址不连续。

2023-01-01 13:03:00 1029 1

原创 内核定时器

硬件有一个时钟装置,该装置每隔一定时间发出一个时钟中断(称为一次时钟嘀嗒-tick),对应的中断处理程序就将全局变量jiffies_64加1jiffies_64 是一个全局64位整型, jiffies全局变量为其低32位的全局变量,程序中一般用jiffiesHZ:可配置的宏,表示1秒钟产生的时钟中断次数,一般设为100或200。

2022-12-31 17:28:36 239

原创 字符设备驱动(三)-----并发控制

执行流:有开始有结束总体顺序执行的一段代码 又称上下文应用编程:任务上下文竞态:多任务并行执行时,如果在一个时刻同时操作同一个资源,会引起资源的错乱,这种错乱情形被称为竞态共享资源:可能会被多个任务同时使用的资源临界区:操作共享资源的代码段为了解决竞态,需要提供一种控制机制,来避免在同一时刻使用共享资源,这种机制被称为并发控制机制。

2022-12-30 19:16:32 443

原创 字符设备驱动(二)

(1)阻塞式IO:不能操作就睡觉(2)非阻塞式IO:不能操作就返回错误(3)IO复用(4)信号驱动式IO(5)异步IO。

2022-12-30 14:45:24 590

原创 字符设备驱动(一)

:普通文件文件内容+文件名+元信息(文件的相关属性—组织在inode的一个结构体内)d:目录文件p:管道文件s:本地socket文件l:链接文件软链接:类似于快捷方式,指向源文件的路径硬链接:类似于别名c:字符设备b:块设备。

2022-12-29 19:47:26 573

原创 内核模块(下)

Linux内核的插件机制——内核模块类似于浏览器、eclipse这些软件的插件开发,Linux提供了一种可以向正在运行的内核中插入新的代码段、在代码段不需要继续运行时也可以从内核中移除的机制,这个可以被插入、移除的代码段被称为内核模块。

2022-12-27 16:02:45 98

原创 流刷新、定位、格式化输入和输出

成功时返回0;出错时返回EOF将流缓冲区中的数据写入实际的文件Linux下只能刷新输出缓冲区,输入缓冲区丢弃如果输出到屏幕使用fflush(stdout)

2022-12-26 19:37:08 83

原创 标准IO的读写

/宏成功时返回读取的字符;若到文件末尾或出错时返回EOF(-1),getchar()等同于fgetc(stdin)getc和fgetc区别是一个是宏一个是函数注意事项:1函数返回值是int类型不是char类型,主要是为了扩展返回值的范围。2 tdin 也是FILE *的指针,是系统定义好的,指向的是标准输入(键盘输入)3 打开文件后读取,是从文件开头开始读。读完一个后读写指针会后移。读写注意文件位置!4 调用getchar会阻塞,等待你的键盘输入。

2022-12-26 19:16:09 127

原创 内核模块(上)

即新功能源码与内核其它代码一起编译进uImage(镜像)文件内1.新功能源码与Linux内核源码在同一目录结构下2.给新功能代码配置Kconfig3.给新功能代码改写Makefile4.make menuconfig 界面里将新功能对应的那项选择成在Linux源码的顶层目录下执行make menuconfig设置相关功能为5.Linux源码顶层目录下 make uImage6.将生成的uImage文件复制到tftp服务器目录下7.启动开发板,观察串口打印信息。

2022-12-26 19:08:47 60

原创 驱动相关基础

1.1 裸机程序:直接运行在对应硬件的的程序1.2 应用程序:只能运行在对应操作系统上的程序。

2022-12-26 18:19:47 346

原创 标准I/O

概念:一组相关数据的有序集合常规文件 r目录文件 d字符设备文件 c 键盘,鼠标块设备文件 b U盘,SD卡等管道文件 p套接字文件 s符号链接文件 l (类似于快捷方式)系统调用:是用户进程进入内核的接口层,它本身并非内核函数,但它是由内核函数实现的,进入内核后,不同的系统调用会找到相应的内核函数,这些内核函数被称为系统调用的“服务例程”。库函数:函数库是由系统建立的具有一定功能的函数的集合IO的概念。

2022-12-23 17:46:41 212

原创 IIC总线(二)-----IIC控制器与MPU6050

Exynos 4412 SCP简化指令集计算机(RISC)微处理器支持四个多主控间集成电路(I2C)总线串行接口。为了在连接到I2C总线的总线主机和外围设备之间传输信息,我们使用了一条专用的串行数据线(SDA)和串行时钟线(SCL)。SDA线和SCL线都是双向的。在多主I2c总线模式下,多个Exynos 4412 SCP RISC微处理器接收或从从设备或从设备传输串行数据。主Exynos 4412 SCP通过I2C总线启动并终止数据传输。

2022-12-19 01:08:05 701

原创 IIC总线(一)

IIC总线是Philips公司在八十年代初推出的一种总线主要用于;IIC总线有两根双向的信号线,一根数据线用于收发数据,一根时钟线用于通信双方时钟的同步;IIC总线硬件结构简单,成本较低,因此在各个领域得到了广泛的应用IIC总线是一种,连接在IIC总线上的器件分为主机和从机,主机有权发起和结束一次通信,而从机只能被主机呼叫;当总线上有多个主机同时启用总线时,IIC也具备的功能来防止错误产生;

2022-12-18 15:50:30 305

原创 PWM实验

蜂鸣器工作原理有源蜂鸣器有源蜂鸣器只要接上额定电源就可以发出声音无源蜂鸣器无源蜂鸣器利用电磁感应原理,为音圈接入交变电流后形成的电磁铁与永磁铁相吸或相斥而推动振膜发声利用GPIO的高低电平,及其占空比,发出不同的声音while(1){}PWM(Pulse Width Modulation)即脉冲宽度调制,通过对脉冲的宽度进行调制,来获得所需要波形。

2022-12-17 21:07:43 132

原创 RTC实验

RTC(Real Time Clock)即实时时钟,它是一个可以为系统提供精确的时间基准的元器件,RTC一般采用精度较高的晶振作为时钟源,有些RTC为了在主电源掉电时还可以工作,需要外加电池供电。

2022-12-17 16:32:20 729

原创 ADC实验

10位或12位CMOS模拟到数字转换器(ADC)包括4通道模拟输入。它通过5MHz A/D转换器时钟,以最大转换率为1MSPS,将模拟输入信号转换为10位或12位二进制数字码。A/D转换器具有片上采样和保持功能。ADC支持低功耗模式。

2022-12-17 00:00:57 895

原创 轮询与中断实验

设置好这些寄存器,我们的GPIO就可以向外发出中断请求了,当然,信号并不是直接发给CPU,而是要经过一个中断控制器,再发给CPU。2>CPU正在处理其他中断,这时产生一个新的中断给CPU,如果是同等级的中断请求,CPU是收不到的。通用中断控制器(GIC)是一种集中式资源,它支持和管理系统中的中断。GIC提供:寄存器管理中断源、中断行为和中断路由到一个或多个处理器。启用、禁用和从硬件(外围)中断源生成处理器中断生成软件中断。3>多核处理器,外设硬件将中断信号发给那个CPU核。支持ARM架构安全扩展。

2022-12-16 15:11:54 280

原创 WDT实验

Watch Dog Timer即看门狗定时器,其主要作用是,其本质是一个计数器。

2022-12-14 22:58:40 322

原创 UART实验

Universal Asynchronous Receiver Transmitter 即通用异步收发器,是一种通用的、通信总线,该总线有两条数据线,可以实现的发送和接收,在嵌入式系统中常用于主机与辅助设备之间的通信通信的方式可以分为多种,按照数据传送方式可分为和按照通信的数据同步方式,可分为。按照数据的传输方向又可分为。

2022-12-14 17:20:28 422

原创 GPIO实验

GPIO(General-purpose input/output)即通用型输入输出,GPIO可以控制连接在其之上的引脚实现信号的输入和输出芯片的引脚与外部设备相连,从而实现与外部硬件设备的通讯、控制及信号采集等功能那么,IO如何实现输入输出呢?即通过对寄存器的读与写入,从而对各种逻辑电路实现控制,再通过不同引脚的功能,以及相关的协议等,从而输入输出相关信息。

2022-12-13 00:10:39 556

原创 编译器、硬件控制原理与地址映射表

是一种计算机程序,它会将用某种编程语言写成的源代码(原始语言),转换成另一种编程语言(目标语言)。它主要的目的是将便于人编写、阅读、维护的高级计算机语言所写作的源代码程序,翻译为计算机能解读、运行的低阶机器语言的程序,也就是可执行文件。编译器将原始程序(source program)作为输入,翻译产生使用目标语言(target language)的等价程序。

2022-12-12 17:28:23 442

原创 交叉开发环境搭建

arm-gcc 安装编译生成能被arm体系执行的可执行文件(1)首先,先下载交叉编译工具链,链接如下链接:https://pan.baidu.com/s/1qdK3-KRxP59o7LbB3KKysw?pwd=2obc提取码:2obc下载完成后,将文件移至Ubuntu环境下(共享文件夹、U盘、邮件、拖拽复制(VM tools)等)

2022-12-12 16:16:55 650

原创 ARM体系结构(九)

伪操作:不会生成指令,只是在编译阶段告诉编译器怎么编译如c语言的预处理阶段,宏定义,条件编译、文件包含等(不同编译器,伪操作不同)GNU。

2022-12-11 19:31:39 76

原创 ARM体系结构(八)

访问(读写)CPSR寄存器读CPSR:MRS R1,CPSR写CPSR:MSR CPSR,#0x10 //User模式–修改模式,设置状态等使能否//在User模式下,不能修改CPSR,非特权模式。

2022-12-11 17:29:37 108

原创 ARM体系结构(七)

如局部变量、函数的参数、返回值、以及程序跳转时需要保护的寄存器等。栈的本质就是一段内存,程序运行时用于保存一些临时数据。增栈:压栈时栈指针越来越大,出栈时栈指针越来越小。减栈:压栈时栈指针越来越大,出栈时栈指针越来越小。满栈:栈指针指向最后一次压入到栈中的数据,压栈时。空栈:栈指针指向最后一次压入到栈中的数据的相邻位。叶子函数:不调用其他子程序,即它们处于树的末端。置,压栈时可直接压栈,之后需要将栈指针移动。需要先移动栈指针到相邻位置然后再压栈。

2022-12-11 15:44:56 135

原创 ARM体系结构(六)

实现程序的跳转,本质是修改了PC寄存器方式1:直接去修改PC寄存器的值(不建议使用,需要自己去计算绝对地址)方式2:不带返回的跳转指令,本质是修改了PC寄存器方式3:带返回的跳转指令,本质是修改了PC寄存器。

2022-12-10 21:51:11 184

原创 ARM体系结构(五)

汇编中的符号1.指令: 能够编译生成一条32bit机器码,并且能被CPU识别和执行2.伪指令:本身不是指令,编译器可以将其替换成若干条指令3.伪操作:不会生成指令,只是在编译阶段告诉编译器怎么编译ARM指令集1.数据处理指令: 进行数学运算、逻辑运算2.跳转指令: 实现程序的跳转,本质是修改了PC寄存器.Load/Store指令: 访问(读写)内存4.状态寄存器传送指令CPSP: 用于访问(读写)CPSR寄存器5.软中断指令: 触发软中断。

2022-12-10 17:26:32 198

空空如也

空空如也

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

TA关注的人

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