![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式开发
文章平均质量分 54
白日梦想家_pf
这个作者很懒,什么都没留下…
展开
-
Linux设备驱动中的异步通知
Linux设备驱动中的异步通知信号类似于硬件上使用的“中断”,只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。整个过程就相当于应用程序收到了驱动发送过来了的一个中断,然后应用程序去响应这个中断,在整个处理过程中应用程序并没有去查询驱动设备是否可以访问,一切都是由驱动设备自己告诉给应用程序的。阻塞,非阻塞和异步:-阻塞IO是等待设备可访问后再访问-非阻塞IO原创 2021-11-12 23:18:28 · 1230 阅读 · 0 评论 -
Linux阻塞与非阻塞IO–非阻塞式IO
**Linux阻塞与非阻塞IO–非阻塞式IO**非阻塞式IO可通过以下方式实现:select 、poll 、 epollselect:在APP中select的使用,需要按照以下四部进行(1)fd_set readfds ; int fd;(2)FD_ZERO(&readfds);//清空所有fd_set的所有位,每个位对应一个描述符(也就是关心的事件)(3)FD_SET(fd, &readfds);//设置fd_set中的某一位(4)select(fd + 1,原创 2021-11-11 00:52:30 · 1418 阅读 · 0 评论 -
Linux阻塞与非阻塞IO--阻塞IO
Linux阻塞与非阻塞IO当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞IO上图中应用程序调用 read 函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等设备可用的时候就会从休眠态唤醒,然后从设备中读取数据返回给应用程序。1 int fd;2 int data = 0;原创 2021-11-09 23:46:14 · 992 阅读 · 0 评论 -
嵌入式学习--SPI子系统分析
嵌入式学习–SPI子系统分析以示例 ICM20608对SPI子系统进行分析spi子系统框架见下图由图可看出,spi子系统里边内嵌了platform子系统。1.当设备树配置好的前提下,系统会根据设备树信息,自动生成一个平台设备(platform_dev)。2.系统动后,platform相关驱动会和platform_dev进行匹配(匹配项就是 . compatible的内容),匹配成功后,就会调用probe函数。3.在probe函数中,就会进行master的注册等操作。见图,会将一个新的mast原创 2021-08-26 00:35:32 · 233 阅读 · 0 评论 -
嵌入式学习--spi子系统学习(示例程序)
嵌入式学习–spi子系统学习spi_drv.h#ifndef SPI_DRV_H#define SPI_DRV_H#define ICM20608G_ID 0XAF#define ICM20608D_ID 0XAE/* 陀螺仪和加速度自测(出产时设置,用于与用户的自检输出值比较) */#define ICM20608_SELF_TEST_X_GYRO 0X00#define ICM20608_SELF_TEST_Y_GYRO 0X01#define ICM20608_SELF_T原创 2021-08-25 00:42:39 · 345 阅读 · 0 评论 -
嵌入式学习笔记--misc
嵌入式学习笔记–misc一、内核自带MISC驱动简介misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动,所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号, MISC 设备驱动就用于解决此问题。 MISC 设原创 2021-08-25 00:33:19 · 1809 阅读 · 0 评论 -
嵌入式学习笔记--嵌入式Linux内核定时器和中断
嵌入式Linux内核定时器和中断**一、内核定时器**Linux 内核使用 timer_list 结构体表示内核定时器, timer_list 定义在文件include/linux/timer.h 中struct timer_list { struct list_head entry; unsigned long expires;/* 定时器超时时间(jiffies),单位是节拍数...比如我们现在需要定义一个周期为 2 秒的定时器,那么这个定时器的超时时间就是 jiffies+(2*HZ)原创 2021-07-21 23:45:45 · 751 阅读 · 0 评论 -
使用gpio子系统和pinctrl子系统实现按键的操作
使用gpio子系统和pinctrl子系统实现按键的操作步骤一:看硬件原理图,获知按键用到的IO口。由以下两图可知key0用的是UART_CTS步骤二:查imx6ull的参考手册,获取寄存器相关信息。第一张图显示的寄存器设置的IO复用的信息,也就是将IO复用为GPIO1_IO18,对应的寄存器的值为0x05.下边的图设置的是GPIO1_IO18的电器属性,如:上拉、下拉、开漏、频率。。。。对应寄存器的值为0xF080.步骤三:设备树配置。上图中MX6UL_PAD_UART1_CTS_B原创 2021-07-18 23:55:54 · 224 阅读 · 1 评论 -
最优收费方案
典型的动态规划问题,不过一些细节处理起来还是很糟心的,可以参考https://www.cnblogs.com/leokale-zz/p/12381855.html的解析现在有一个服务收费方案:在时间段1st<6内,每单位时间收费为10元;在时间段6st<10内,每单位时间收费为5元;在时间段tz10,每单位时间收费为2元。该服务同时只能为一个用户服务,假如有一批用户都需要请求该服务,请编写一段程序,选择出若干用户请求进行服务,使得总的收费达到最多,并打印出依次服务的用户编号。输入描转载 2020-08-31 21:48:06 · 255 阅读 · 0 评论 -
走马观花: Linux 系统调用 open 七日游(一)
系统调用open转载 2020-08-19 22:43:54 · 126 阅读 · 0 评论 -
input输入子系统
input输入子系统转载 2020-08-19 17:42:08 · 113 阅读 · 0 评论 -
gcc编译链接原理及使用
1、gcc 和 arm-linux-gcc的常用选项gcc 的使用方法:gcc 【选项】 文件名gcc常用选项:-v:查看gcc 编译器的版本,显示gcc执行时的详细过程-o < file > Place the output into < file >指定输出文件名为file,这个名称不能跟源文件名同名-E Preprocess only; do not compile, assemble or link转载 2020-08-11 17:32:28 · 2071 阅读 · 0 评论 -
Unix/Linux中的read和write函数
Unix/Linux中的read和write函数文件描述符 对于内核而言,所有打开的文件都通过文件描述符引用。文件描述符是一个非负整数。当打开一个现有文件或创建一个新文件时,内核向进程返回一个文件描述符。当读或写一个文件时,使用open或create返回的文件描述符表示该文件,将其作为参数传给read或write函数。write函数 write函数定义如下:#include ssize_t write(int filedes, void *buf, size_t nbytes);// 返回转载 2020-07-02 22:28:23 · 405 阅读 · 0 评论 -
PX4 飞控源码系统框架介绍
PX4 飞控源码系统框架介绍一、build_px4fmu-v2_default 编译以后生成的文件:内部主要需要在意的就是topics_temporary_header(所有的任务是要的头文件,在创建任务和使用数据结构时可以从该处检索);topics_temporary_sources(系统中所有的任务函数)二、Cmake 配置文件,主要使用 nuttx_px4fmu-v2_default.cmake。该处主要是关于系统使用的文件的路径配置,在 PX4 系统所有的.CPP 和.C 文件都是通过原创 2020-07-02 22:26:52 · 1005 阅读 · 0 评论 -
Linux下串口编程
转载自串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备转载 2020-06-24 22:35:04 · 828 阅读 · 1 评论 -
IPC进程间通信
**IPC进程间通信**1.无名管道2.有名管道3.信号4.信号量5.消息队列6.共享内存7.socket1.无名管道int pipe(int fd[]);fd[0]->读,fd[1]->写用read,write即可操作2.有名管道int mkfifo(const char *filename,mode_t mode);if(access(“管道名”,F_OK)<0)//判断管道是否存在mkfifo(“管道名”,0666)//创建管道fd = open(原创 2020-06-18 12:27:48 · 103 阅读 · 0 评论 -
wait和waitpid详解
wait和waitpid详解wait()就是得到子进程的返回码,等于就是为子进程“收尸”,否则子进程会变僵尸进程(关于僵尸和孤儿进程的区别,之前有总结过),如果父进程结束了,init进程会为僵尸进程收尸的。SIGCHLD信号处理函数:进程一章讲过用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作的同时还要记得时不时地轮询一下,转载 2020-06-18 11:18:54 · 681 阅读 · 0 评论 -
嵌入式工程师C语言面试常见的0x10个问题
1、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL要点:①#define语法的基本知识(例如:不能以分号结束、括号的使用,等等)②懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。③意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,告诉编译器这个常数是的长整型数。④如果你在你的表达转载 2020-06-13 16:03:50 · 640 阅读 · 0 评论 -
编译第一步 make xxx_defconfig
编译第一步 make xxx_defconfig转载 2020-04-30 12:05:52 · 293 阅读 · 0 评论 -
Linux i2c子系统(一) _动手写一个i2c设备驱动
Linux i2c子系统(一) _动手写一个i2c设备驱动转载 2020-03-16 14:36:00 · 99 阅读 · 0 评论 -
什么是 MIME TYPE?
什么是 MIME TYPE?转载 2020-03-07 12:49:46 · 214 阅读 · 0 评论 -
CGI实例--表单GET与POST示例
转自happyboygd (七八) :http://bbs.chinaunix.net/thread-1757580-1-1.htmlCGI实例–表单GET与POST示例CGI实例--表单GET与POST示例GET方法:做一个加法运算,需要接收两个参数文件get.c如下:#include <stdio.h>#include <stdlib.h>int ma...转载 2020-03-06 18:47:53 · 489 阅读 · 0 评论 -
select、poll、epoll之间的区别总结[整理]
select、poll、epoll之间的区别总结转载 2020-02-14 18:49:48 · 75 阅读 · 0 评论 -
从0移植uboot (一) _配置分析
从0移植uboot (一) _配置分析转载 2020-02-11 21:56:49 · 76 阅读 · 0 评论 -
uboot的启动过程分析
uboot的启动过程分析转载 2020-02-11 21:24:02 · 75 阅读 · 0 评论 -
移植uboot-分析uboot启动流程(详解)
移植uboot-分析uboot启动流程(详解)转载 2020-02-11 20:17:33 · 110 阅读 · 0 评论 -
UART串口通信
UART串口通信转载 2020-02-10 18:13:09 · 120 阅读 · 0 评论