自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 ZYNQ烧写时出现错误“memory write error at 0x100000.APB AP transaction error,DAP status f0000021“

ZYNQ烧写出现错误

2022-06-16 09:36:04 3903 1

原创 Linux设备驱动中的异步通知

Linux设备驱动中的异步通知信号类似于硬件上使用的“中断”,只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟,驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了,应用程序获取到信号以后就可以从驱动设备中读取或者写入数据了。整个过程就相当于应用程序收到了驱动发送过来了的一个中断,然后应用程序去响应这个中断,在整个处理过程中应用程序并没有去查询驱动设备是否可以访问,一切都是由驱动设备自己告诉给应用程序的。阻塞,非阻塞和异步:-阻塞IO是等待设备可访问后再访问-非阻塞IO

2021-11-12 23:18:28 1204

原创 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 1413

原创 Linux阻塞与非阻塞IO--阻塞IO

Linux阻塞与非阻塞IO当应用程序对设备驱动进行操作的时候,如果不能获取到设备资源,那么阻塞式 IO 就会将应用程序对应的线程挂起,直到设备资源可以获取为止。对于非阻塞 IO,应用程序对应的线程不会挂起,它要么一直轮询等待,直到设备资源可以使用,要么就直接放弃。阻塞IO上图中应用程序调用 read 函数从设备中读取数据,当设备不可用或数据未准备好的时候就会进入到休眠态。等设备可用的时候就会从休眠态唤醒,然后从设备中读取数据返回给应用程序。1 int fd;2 int data = 0;

2021-11-09 23:46:14 972

原创 嵌入式学习--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 228

原创 嵌入式学习--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 339

原创 嵌入式学习笔记--misc

嵌入式学习笔记–misc一、内核自带MISC驱动简介misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某些外设无法进行分类的时候就可以使用 MISC 驱动。 MISC 驱动其实就是最简单的字符设备驱动,通常嵌套在 platform 总线驱动中,实现复杂的驱动,所有的 MISC 设备驱动的主设备号都为 10,不同的设备使用不同的从设备号。随着 Linux字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号, MISC 设备驱动就用于解决此问题。 MISC 设

2021-08-25 00:33:19 1593

原创 嵌入式学习笔记--嵌入式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 713

原创 使用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 209 1

转载 最优收费方案

典型的动态规划问题,不过一些细节处理起来还是很糟心的,可以参考https://www.cnblogs.com/leokale-zz/p/12381855.html的解析现在有一个服务收费方案:在时间段1st<6内,每单位时间收费为10元;在时间段6st<10内,每单位时间收费为5元;在时间段tz10,每单位时间收费为2元。该服务同时只能为一个用户服务,假如有一批用户都需要请求该服务,请编写一段程序,选择出若干用户请求进行服务,使得总的收费达到最多,并打印出依次服务的用户编号。输入描

2020-08-31 21:48:06 250

转载 走马观花: Linux 系统调用 open 七日游(一)

系统调用open

2020-08-19 22:43:54 120

转载 input输入子系统

input输入子系统

2020-08-19 17:42:08 109

转载 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 2044

原创 select-IO多路复用

Select函数在Socket编程中还是比较重要的,可是对于初学Socket的人来说都不太爱用Select写程序,他们只是习惯写诸如connect、 accept、recv或recvfrom这样的阻塞程序(所谓阻塞方式block,顾名思义,就是进程或是线程执行到这些函数时必须等待某个事件的发生,如果事件没有发生,进程或线程就被阻塞,函数不能立即返回)。可是使用Select就可以完成非阻塞(所谓非阻塞方式non-block,就是进程或线程执行此函数时不必非要等待事件的发生,一旦执行肯定返回,以返回值的不同来反

2020-07-10 23:02:36 228

转载 标准C++中的string类的用法总结

标准C++中的string类的用法总结相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用。但是如果离开了MFC框架,还有没有这样使用起来非常方便的类呢?答案是肯定的。也许有人会说,即使不用MFC框架,也可以想办法使用MFC中的API,具体的操作方法在本文最后给出操作方法。其实,可能很多人很可能会忽略掉标准C++中string类的使用。标准C++中提供的string类得功能也是非常强大的,一般都能满足我们开发项目时使用。现将具体用

2020-07-04 11:23:30 131

转载 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 393

原创 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 994

原创 2020-06-28

虽然一直做嵌入式Linux,宿主机和开发板通信天天都在用tty设备通信,但是其实自己对TTY设备及终端的概念认识几乎是0。对于Linux内核的终端、tty、控制台等概念的认识很模糊。由于在学习的时候碰到了重定向console的问题,所以借机学习下tty的知识。以下是我对tty的认识总结,信息来源于网络和内核文档。参考资料见文章末尾。tty一词源于Teletypes,或Teletypewriters,它是最早出现的一种终端设备,类似电传打字机,由Teletype公司生产。最初tty是指连接到Unix系统上

2020-06-28 00:42:34 549

转载 Linux下串口编程

转载自串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用。常用的串口是RS-232-C接口(又称EIA RS-232-C)它是在1970年由美国电子工业协会(EIA)联合贝尔系统、调制解调器厂家及计算机终端生产厂家共同制定的用于串行通讯的标准。串口通讯指的是计算机依次以位(bit)为单位来传送数据,串行通讯使用的范围很广,在嵌入式系统开发过程中串口通讯也经常用到通讯方式之一。Linux对所有设备的访问是通过设备文件来进行的,串口也是这样,为了访问串口,只需打开其设备文件即可操作串口设备

2020-06-24 22:35:04 714 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 98

转载 wait和waitpid详解

wait和waitpid详解wait()就是得到子进程的返回码,等于就是为子进程“收尸”,否则子进程会变僵尸进程(关于僵尸和孤儿进程的区别,之前有总结过),如果父进程结束了,init进程会为僵尸进程收尸的。SIGCHLD信号处理函数:进程一章讲过用wait和waitpid函数清理僵尸进程,父进程可以阻塞等待子进程结束,也可以非阻塞地查询是否有子进程结束等待清理(也就是轮询的方式)。采用第一种方式,父进程阻塞了就不能处理自己的工作了;采用第二种方式,父进程在处理自己的工作的同时还要记得时不时地轮询一下,

2020-06-18 11:18:54 670

转载 嵌入式工程师C语言面试常见的0x10个问题

1、用预处理指令#define声明一个常数,用以表明1年中有多少秒(忽略闰年问题)#define SECONDS_PER_YEAR (60 * 60 * 24 * 365)UL要点:①#define语法的基本知识(例如:不能以分号结束、括号的使用,等等)②懂得预处理器将为你计算常数表达式的值,因此,直接写出你是如何计算一年中有多少秒而不是计算出实际的值,是更清晰而没有代价的。③意识到这个表达式将使一个16位机的整型数溢出,因此要用到长整型符号L,告诉编译器这个常数是的长整型数。④如果你在你的表达

2020-06-13 16:03:50 630

转载 编译第一步 make xxx_defconfig

编译第一步 make xxx_defconfig

2020-04-30 12:05:52 288

转载 Linux i2c子系统(一) _动手写一个i2c设备驱动

Linux i2c子系统(一) _动手写一个i2c设备驱动

2020-03-16 14:36:00 96

转载 什么是 MIME TYPE?

什么是 MIME TYPE?

2020-03-07 12:49:46 210

转载 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 480

转载 Linux进程间通信:消息队列 msgget()、msgsend()、msgrcv()、msgctl()

Linux进程间通信:消息队列 msgget()、msgsend()、msgrcv()、msgctl()

2020-03-05 17:17:43 582

转载 select、poll、epoll之间的区别总结[整理]

select、poll、epoll之间的区别总结

2020-02-14 18:49:48 72

转载 从0移植uboot (一) _配置分析

从0移植uboot (一) _配置分析

2020-02-11 21:56:49 72

转载 uboot的启动过程分析

uboot的启动过程分析

2020-02-11 21:24:02 66

转载 移植uboot-分析uboot启动流程(详解)

移植uboot-分析uboot启动流程(详解)

2020-02-11 20:17:33 102

转载 UART串口通信

UART串口通信

2020-02-10 18:13:09 116

转载 NB-IOT相关技术

NB-IOT相关技术

2020-02-04 13:50:00 122

转载 移远-BC95-测试前准备

移远-BC95-测试前准备

2020-02-04 13:48:14 128

转载 Linux探究

Linux探究

2020-01-11 11:11:31 71

转载 Linux设备树语法详解

Linux设备树语法详解

2020-01-10 22:38:30 91

转载 Linux输入子系统

Linux输入子系统

2020-01-08 22:37:05 84

转载 linux输入子系统

linux输入子系统

2020-01-06 23:33:51 78

转载 dev_name和dev_set_name对设备的名字进行操作

dev_name和dev_set_name对设备的名字进行操作

2020-01-02 22:14:24 1159

转载 Linux - 输入子系统框架详解

Linux - 输入子系统框架详解

2019-12-31 14:57:22 110

空空如也

空空如也

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

TA关注的人

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