嵌入式学习
agentky
这个作者很懒,什么都没留下…
展开
-
liunx系统编程知识点
1.linux系统 内存管理1、物理地址、线性地址(虚拟地址)和逻辑地址之间的关系物理地址是指出现在cpu外部的地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。逻辑地址是程序代码经过编译后在汇编程序中使用的地址。线性地址又名虚拟地址,在32位cpu框架下,可以表示4G地址空间,用16进制表示就是0x00000000到0xffffffff。2.内存管理Linux内核的设计并没有全部采用Intel所提供的段机制,仅仅是有限度地使用了分段机制。这不仅简化了linux内核的设计,而且为把li原创 2020-11-22 22:40:29 · 318 阅读 · 0 评论 -
阻塞与非阻塞 定时器 工作队列 中断的线程化处理 mmap
阻塞与非阻塞所谓阻塞,就是等待某件事情发生。比如调用 read 读取按键时,如果没有按键数据则 read 函数不会返回,它会让线程休眠等待。使用 poll 时,如果传入的超时时间不为 0,这种访问方法也是阻塞的。使用 poll 时,可以设置超时时间为 0,这样即使没有数据它也会立刻返回,这就是非阻塞方式。能不能让 read 函数既能工作于阻塞方式,也可以工作于非阻塞方式?可以!APP 调用 open 函数时,传入 O_NONBLOCK,就表示要使用非阻塞方式;默认是阻塞方式。注意:对于普通文件原创 2020-08-28 22:43:57 · 795 阅读 · 0 评论 -
SPI I2C UART 三种串行总线协议
SPI(Serial Peripheral Interface:串行外设接口):4线SPI器件有四个信号:时钟(SPI CLK, SCLK)片选(CS)主机输出、从机输入(MOSI)主机输入、从机输出(MISO)SPI 硬件连接i2cI2C 总线用两根线来连接多支路总线中的多个设备。这种总线是双向、低速的,并与公共时钟同步。可以直接将一个设备接到 I2C 总线上或是从该总线上取下,而不会影响其他设备。它只需要两根线即可在连接于总线上的器件之间传送信息。SDA(串行数据线)和SCL(串行时原创 2020-08-28 22:42:35 · 934 阅读 · 0 评论 -
进程与线程(通俗易懂)
进程的概念当一个程序开始执行后,在开始执行到执行完毕退出这段时间内,它在内存中的部分就叫称作一个进程。Linux 是一个多任务的操作系统,也就是说,在同一时间内,可以有多个进程同时执行。我们大家常用的单CPU计算机实际上在一个时间片段内只能执行一条指令。那么Linux是如何实现多进程的同时执行的呢?原来Linux使用了一种称为” 进程调度 “的手段,首先,为每个进程指派一定的运行时间,这个时间通常很短,短到以毫秒为单位,然后依照某种规则,从众多的进程中挑选一个投入运行,其他进程暂时等待,当正在运行的那个原创 2020-08-28 11:58:48 · 332 阅读 · 0 评论 -
休眠与唤醒 POLL机制 异步通知
休眠与唤醒当应用程序必须等待某个事件发生,比如必须等待按键被按下时,可以使用“休眠-唤醒”机制:① APP 调用 read 等函数试图读取数据,比如读取按键;② APP 进入内核态,也就是调用驱动中的对应函数,发现有数据则复制到用户空间并马上返回;③ 如果 APP 在内核态,也就是在驱动程序中发现没有数据,则 APP 休眠;④ 当有数据时,比如当按下按键时,驱动程序的中断服务程序被调用,它会记录数据、唤醒 APP;⑤ APP 继续运行它的内核态代码,也就是驱动程序中的函数,复制数据到用户空间并马原创 2020-08-27 12:11:48 · 1053 阅读 · 0 评论 -
嵌入式学习-----liunx中断相关编程
设备树里使用中断① interrupt-parent=<&XXXX>你要用哪一个中断控制器里的中断?② interrupts你要用哪一个中断?Interrupts 里要用几个 cell,由 interrupt-parent 对应的中断控制器决定。在中断控制器里有“#interrupt-cells”属性,它指明了要用几个 cell 来描述中断。例如一个 cell 来表明使用“哪一个中断”另一个 cell 来描述中断,一般是表明触发类型。第 2 个 cell 的 bits[3原创 2020-08-19 12:00:33 · 405 阅读 · 0 评论 -
嵌入式学习--异常与中断
中断的处理流程arm 对异常(中断)处理过程:① 初始化:a. 设置中断源,让它可以产生中断b. 设置中断控制器(可以屏蔽某个中断,优先级)c. 设置 CPU 总开关(使能中断)② 执行其他程序:正常程序③ 产生中断:比如按下按键—>中断控制器—>CPU④ CPU 每执行完一条指令都会检查有无中断/异常产生⑤ CPU 发现有中断/异常产生,开始处理。对于不同的异常,跳去不同的地址执行程序。这地址上,只是一条跳转指令,跳去执行某个函数(地址),这个就是异常向量。原创 2020-08-16 11:36:41 · 486 阅读 · 0 评论 -
韦东山嵌入式学习--基于 GPIO 子系统的 LED 驱动程序
Pinctrl 子系统把引脚的复用、配置抽出来,做成 Pinctrl 子系统,给 GPIO、I2C 等模块使用。让我们在使用某个引脚功能时不用去一个个查芯片手册。这会涉及 2 个对象:pin controller、client device。前者提供服务:可以用它来复用引脚、配置引脚。后者使用服务:声明自己要使用哪些引脚的哪些功能,怎么配置它们。GPIO 子系统在几乎所有 ARM 芯片中,GPIO 都分为几组,每组中有若干个引脚。所以在使用 GPIO 子系统之前,就要先确定:它是哪组的?原创 2020-08-12 23:31:43 · 619 阅读 · 0 评论 -
韦东山嵌入式学习---具体单板的按键驱动程序
一.普适的 GPIO 引脚操作方法GPIO操作基本步骤芯片手册一般有相关章节,用来介绍:power/clock可以设置对应寄存器使能某个 GPIO 模块(Module)有些芯片的 GPIO 是没有使能开关的,即它总是使能的一个引脚可以用于 GPIO、串口、USB 或其他功能,有对应的寄存器来选择引脚的功能对于已经设置为 GPIO 功能的引脚,有方向寄存器用来设置它的方向:输出、输入对于已经设置为 GPIO 功能的引脚,有数据寄存器用来写、读引脚电平状态5...原创 2020-08-10 21:34:01 · 307 阅读 · 0 评论 -
韦东山嵌入式学习---app读取按键值框架
一.APP 去读取按键的 4 种方法① 查询方式② 休眠-唤醒方式③ poll 方式④ 异步通知方式查询方式驱动程序中构造、注册一个 file_operations 结构体,里面提供有对应的 open,read 函数。APP 调用open 时,导致驱动中对应的 open 函数被调用,在里面配置 GPIO 为输入引脚。APP 调用 read 时,导致驱动中对应的 read 函数被调用,它读取寄存器,把引脚状态直接返回给 APP休眠-唤醒方式驱动程序中构造、注册一个 file_operat原创 2020-08-08 23:27:55 · 278 阅读 · 0 评论 -
韦东山嵌入式驱动学习-----LED驱动
1.LED驱动框架LED驱动把驱动拆分为通用的框架(leddrv.c)、具体的硬件操作(board_X.c)抽象出一个led_operations 结构体, 每个单板相关的 board_X.c 实现自己的 led_operations 结构体,供上层的 leddrv.c 调用.编译时将通用的框架.c和单板自己的框架.c编译成一个ko文件涉及到哪些接口通用驱动编写思路:确定主设备号定义自己的file_operations结构(这里要定义一些功能函数)实现对应的open/rea原创 2020-08-08 17:45:46 · 1010 阅读 · 0 评论 -
韦东山嵌入式驱动学习之字符设备驱动程序(不涉及具体硬件)
韦东山嵌入式驱动学习之字符设备驱动程序(不涉及具体硬件)1.APP 打开的文件在内核中如何表示APP 打开文件时,可以得到一个整数,这个整数被称为文件句柄。对于 APP 的每一个文件句柄,在内核里面都有一个“struct file”与之对应。可以猜测,我们使用 open 打开文件时,传入的 flags、mode 等参数会被记录在内核中对应的 structfile 结构体里(f_flags、f_mode):int open(const char *pathname, int flags, mod原创 2020-08-08 16:58:40 · 379 阅读 · 0 评论