自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 嵌入式Linux(14):Liunx异步通知(访问驱动设备机制)

嵌入式Linux异步通知驱动中的信号处理1、 fasync_struct 结构体2、 fasync 函数3、kill_fasync 函数应用程序对异步通知的处理1、注册信号处理函数2、将应用程序的进程号告诉给内核3、开启异步通知实验1、驱动程序2、应用程序3、运行测试阻塞式I/O是处于休眠态一直等待直到设备可以访问非阻塞式I/O是定期轮询设备是否可以访问异步通知是当设备可以访问时才主动通知应用程序阻塞和非阻塞IO的按键驱动方式都是应用程序通过主动查询的方式获得异步通知可以做到应用程序不用随时去

2021-06-04 17:30:40 20

原创 嵌入式Linux(13):Liunx阻塞和非阻塞IO(访问设备驱动)

嵌入式Linux阻塞和非阻塞IO1、阻塞和非阻塞 IO1.1 设备访问1.2 等待队列(阻塞IO访问)等待队列头等待队列项将队列项添加/移除等待队列头等待唤醒等待事件1.3轮询(非阻塞IO访问)应用程序中(1)select 函数(2)poll 函数(3)epoll 函数Linux 驱动下的 poll 操作函数2、实验2.1 阻塞IO实验驱动程序编写运行测试2.2 非阻塞IO实验驱动程序编写Linux 驱动开发常见的设备访问模式:阻塞和非阻塞IO1、阻塞和非阻塞 IO1.1 设备访问IO不是STM32

2021-06-02 20:11:52 12 1

原创 嵌入式Linux(12):Liunx中断

嵌入式Linux中断Linux 中断1、Linux 中断 API 函数1.1 中断 ID1.2 request_irq 函数1.3 free_irq 函数1.4 中断处理函数1.5 中断使能与禁止函数2、上半部与下半部2.1 软中断2.2 tasklet2.3 工作队列3、设备树中断信息节点4、获取中断号实验1、修改设备树2、按键中断驱动3、测试App4、运行测试Linux 中断裸机实验里面中断的处理方法:①、使能中断,初始化相应的寄存器②、注册中断服务函数,也就是向 irqTable 数组的指定

2021-05-29 17:13:23 457

原创 嵌入式Linux(11):Liunx内核定时器

嵌入式Linux:时间管理和内核定时器内核时间管理内核定时器API函数实现内核时间管理UCOS 或 FreeRTOS 是需要一个硬件定时器提供系统时钟,一般使用 Systick 作为系统时钟源。同理, Linux 要运行,也是需要一个系统时钟的。硬件定时器提供时钟源,时钟源的频率可以设置, 设置好以后就周期性的产生定时中断,系统使用定时中断来计时。中断周期性产生的频率就是系统频率,也叫做节拍率(tick rate),比如 1000Hz, 100Hz 说的就是系统节拍率(HZ 表示一秒的节拍数)。系统节

2021-05-26 16:12:52 459

原创 嵌入式Linux(10):Liunx并发与竞争

嵌入式Linux:Linux并发与竞争1、并发与竞争2、原子操作2.1 原子整形操作 API 函数2.2原子位操作 API 函数3、自旋锁3.1自旋锁 API 函数3.2其他类型的锁4、信号量5、互斥体实例1、原子操作实验驱动程序编写编写测试App运行测试2、自旋锁实验驱动程序修改运行测试3、信号量实验驱动修改运行测试4、互斥体实验驱动修改运行测试1、并发与竞争并发就是多个“用户”同时访问同一个共享资源,Linux 系统是个多任务操作系统,会存在多个任务同时访问同一片内存区域,这些任务可能会相互覆盖这段

2021-05-24 17:27:57 442

原创 嵌入式Linux(9):princtrl和gpio子系统的LED驱动

嵌入式Linux:printctrl和gpio子系统pinctrl 子系统I.MX6ULL 的 pinctrl 子系统驱动1、 PIN 配置信息详解2、 PIN 驱动程序讲解3、设备树中添加pinctrl节点gpio子系统I.MX6ULL 的 gpio 子系统驱动1、设备树中的 gpio 信息2、 GPIO 驱动程序3、gpio 子系统 API 函数4、设备树中添加 gpio 节点5、与 gpio 相关的 OF 函数实例 pinctrl 和 gpio 子系统LED 驱动1、修改设备树文件2、LED 灯驱动程

2021-05-19 22:38:18 814

原创 嵌入式Linux(8):设备树

嵌入式Linux:设备树DTS、 DTB 和 DTCDTS 语法标准属性根节点 compatible 属性设备树在系统中的体现特殊节点Linux 内核解析 DTB 文件设备树常用 OF 操作函数实例:设备树LED驱动运行测试设备树(Device Tree),描述设备树的文件叫做 DTS(Device Tree Source),这个 DTS 文件采用树形结构描述板级设备,也就是开发板上的设备信息,比如CPU 数量、 内存基地址、 IIC 接口上接了哪些设备、 SPI 接口上接了哪些设备。在没有设备树的时候

2021-05-15 15:16:39 634

原创 嵌入式Linux(7): 字符设备LED驱动

嵌入式Linux驱动开发(2):字符设备LED驱动Linux 下 LED 灯驱动原理I/O 内存访问函数实验1、建立工程2、编写驱动程序led.c3、测试应用程序ledApp.c4、编译驱动程序和编译测试应用程序Linux 下 LED 灯驱动原理I.MX6U-ALPHA 开发板上的 LED 连接到 I.MX6ULL 的 GPIO1_IO03 这个引脚上,虚拟地址(VA,Virtual Address)、物理地址(PA, Physcical Address)。对于 32 位的处理器来说,虚拟地址范围是 2

2021-05-10 16:42:21 453

原创 嵌入式Linux(6):字符设备驱动的驱动开发

Linux驱动:字符设备驱动、块设备驱动、网络设备驱动《Ubuntu Linux 从入门到精通》

2021-05-06 19:25:40 422

原创 嵌入式Linux(5):驱动开发网络调试驱动设备的Linux系统移植

驱动开发之网络调试驱动设备的Linux系统移植

2021-05-06 18:27:08 523 1

原创 解决问题(5):成功解决uboot移植时网络通讯遇到的ARP Retry count exceeded; starting again

Liunx开发板:uboot 是支持网络的,我们在移植 uboot 的时候一般都要调通网络功能,因为在移植 linux kernel 的时候需要使用到 uboot 的网络功能做调试。uboot 支持大量的网络相关命令,比如 dhcp、ping、nfs 和 tftpboot。问题:开发板和Ubuntu通信不成功在使用 uboot 的网络功能之前先用网线将开发板的 ENET2 接口和电脑或者路由器连接起来, I.MX6U-ALPHA 开发板有两个网口: ENET1 和 ENET2,一定要连接 ENET2

2021-04-27 17:47:17 10132 2

原创 嵌入式Linux(4):Linux系统构成及启动原理

Linux系统移植U-BootU-Boot启动流程LiunxLinux系统启动流程Linux操作系统的启动过程根文件系统(rootfs)Bootloader 代码用于启动 Linux 内核, Bootloader有很多,常用的就是 U-Boot。移植好 U-Boot 以后再移植 Linux 内核,移植完 Linux 内核后,还需要再移植一个根文件系统(rootfs),根文件系统里面包含了一些最常用的命令和文件。所以 U-Boot、 Linux kernel 和 rootfs 这三者一起构成了一个完整的

2021-04-23 19:27:34 700

原创 嵌入式Linux(3):DDR内存及通讯协议UART、I2C、SPI

嵌入式Linux驱动开发(一)DDR内存DDRUARTI2CSPIDDR内存RAM: 随机存储器,可以随时进行读写操作,速度很快,掉电以后数据会丢失。比如内存条、 SRAM、 SDRAM、 DDR 等都是 RAM。 RAM 一般用来保存程序数据、中间结果,比如在程序中定义了一个变量 a,然后对这个 a 进行读写操作。int a;a = 10;a 是一个变量,我们需要很方便的对这个变量进行读写操作,方法就是直接“a”进行读写操作,不需要在乎具体的读写过程。我们可以随意的对 RAM 中任何地址的数

2021-04-19 21:40:20 3730

原创 解决问题(4):成功解决Linux中编译时权限不够的问题

链接: link.samba共享文件夹。当从win下复制代码到共享文件夹中,在ubuntu下打开时往往会发现文件的权限是只读状态,当出现权限不够时可以尝试sudo chmod 777 文件名但还会出现一种情况,在编译过程中,make编译时发现此时这种情况是因为make没法在当前目录下生成这个start.o文件,该目录没有权限增加文件,设置当前路径权限不是只有文件有权限问题,目录文件夹也有权限的,而且目录的权限优先于文件,文件归属于目录。...

2021-04-19 15:27:53 11621 1

原创 嵌入式Liunx(2):ARM汇编基础

ARM汇编基础GNU 汇编语法Cortex-A7 常用汇编指令处理器内部数据传输指令存储器访问指令压栈和出栈指令跳转指令算术运算指令逻辑运算指令Cortex-A 芯片一上电 SP 指针还没初始化, C 环境还没准备好,所以肯定不能运行 C 代码,必须先用汇编语言设置好 C 环境,比如初始化 DDR、设置 SP指针等等,当汇编把 C 环境设置好了以后才可以运行 C 代码。GNU 汇编语法ARM汇编,编译使用的 GCC 交叉编译器,所以我们的汇编代码要符合 GNU 语法。GNU 汇编语法适用于所有的架构,

2021-04-17 20:53:22 313

原创 嵌入式Linux(1):嵌入式Linux开发环境搭建

嵌入式开发环境搭建

2021-04-16 21:22:35 297

原创 Liunx知识(5):shell脚本相关知识

Shell 是一个应用程序,它负责接收用户输入的命令,然后根据命令做出相应的动作, Shell 负责将应用层或者用户输入的命令传递给系统内核,由操作系统内核来完成相应的工作,然后将结果反馈给应用层或者用户。一、shell脚本定义Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。Ken Thompson 的 sh 是第一种 Un

2021-04-12 15:14:18 130

原创 Liunx知识(4):git学习笔记

git学习笔记本地管理远程管理分支管理标签管理workspace 工作区index 暂存区repository 本地版本库remote 远程仓库本地管理1、ubuntu下git安装 sudo apt-get install git (linux 上安装方式) git --version 查看版本 git config -l 查看配置信息 git config --global user.name "your name" (--global参数表示所有仓库均使用该配置) git

2021-03-30 12:05:34 113

原创 Linux知识(3):makefile文件、gdb调试

Linux知识(3):makefile文件、gdb调试5. makefile5.1 makefile的基本规则5.2 makefile工作原理5.3 makefile中的变量5.4 makefile函数5.5 makefile的清理操作6. gdb调试文件IO5. makefilemakefile文件中定义了一系列的规则来指定, 哪些文件需要先编译, 哪些文件需要后编译, 哪些文件需要重新编译, 甚至于进行更复杂的功能操作, 因为makefile就像一个Shell脚本一样, 其中也可以执行操作系统的命令

2021-03-29 17:16:03 448 1

原创 Linux知识(2):gcc编译器和库的使用

Linux知识(2):gcc和库的使用3. gcc编译器3.1 gcc的工作流程3.2 gcc常用参数4. 静态库和共享(动态)库4.1 静态库(static library)4.2 共享库(shared library)/动态库3. gcc编译器3.1 gcc的工作流程gcc编译器将c源文件到生成一个可执行程序,中间一共经历了四个步骤:四个步骤并不是gcc独立完成的,而是在内部调用了其他工具,从而完成了整个工作流程, 其中编译最耗时, 因为要逐行检查语法。下面以test.c为例介绍gcc的

2021-03-29 11:52:00 501 2

原创 Linux知识(1):基础命令操作

Linux基础知识乌班图建立并打开文件夹的操作:boru@boru-virtual-machine:~$ mkdir learn-slamboru@boru-virtual-machine:~$ cd learn-slamboru@boru-virtual-machine:~/learn-slam$ mkdir cha2boru@boru-virtual-machine:~/learn-slam$ cd cha2安装新软件的操作:boru@boru-virtual-machine:~$ su

2021-03-27 20:22:49 620 3

原创 解决问题(3):成功解决Ubuntu中权限不够的问题

成功解决Ubuntu中权限无法打开所文件的问题E: 无法打开锁文件 /var/lib/dpkg/lock-frontend - open (13: 权限不够)E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), are you root?:~$ sudo passwd root输入新的 UNIX 密码:重新输入新的 UNIX 密码:passwd:已成功更新密码:~$ su密码:root@boru

2021-03-27 15:49:39 32387 3

原创 UC/OS III操作系统学习笔记

任务管理1.1任务状态1.2任务控制块1.3任务堆栈1.4任务就绪表1.5任务调度和切换API函数使用

2021-03-23 21:37:20 1579

原创 C语言:数据结构C语言描述

数据结构C语言描述1. 数据结构与算法1.1 数据结构分类1.1.1逻辑结构集合结构:线性结构:树形结构:图形结构:1.1.2 物理结构(存储结构)顺序存储:链式存储结构:2.线性表2.1 线性表顺序存储(动态数组)2.2 线性表的链式存储(单向链表)3.受限线性表3.1 栈3.1.2 栈的顺序存储3.1.3 栈的链式存储3.1.4 栈的应用3.2 队列4. 树和二叉树4.1 树的定义4.2 二叉树4.3 二叉树的遍历4.4 二叉树的非递归遍历5.查找5.1 二叉排序树5.1.1 存储结构5.1.1 插入算

2021-03-19 11:34:00 175 1

原创 C提高笔记(3):文件操作、链表、函数指针、预处理、动态库封装和使用、递归函数

C提高笔记(3):链表、文件操作、函数指针、预处理、动态库封装和使用、递归函数1 链表2.文件操作2.1流2.2文件打开关闭3.函数指针和回调函数3.1 函数指针3.2 函数指针(指向函数的指针)4. 预处理4.1 文件包含指令(#include)4.2 宏定义4.3 条件编译5.动态库的封装和使用6.递归函数1 链表链表是一种常用的数据结构,它通过指针将一些列数据结点,连接成一个数据链。相对于数组,链表具有更好的动态性(非顺序存储)。数据域用来存储数据,指针域用于建立与下一个结点的联系。建立

2021-03-12 20:54:41 88 1

原创 C提高笔记(2):位运算、多维数组、结构体

C提高笔记(2):1.位运算2.多维数组3.结构体1.位运算1.1位逻辑运算符4个位运算符用于整型数据,包括char.将这些位运算符成为位运算的原因是它们对每位进行操作,而不影响左右两侧的位,常规的位的逻辑运算符对整个值进行操作。按位取反~:一元运算符 ~ 将每个1变为0,将每个0变为1,~(10011010) 01100101位与(AND)&:二进制运算符&通过对两个操作数逐位进行比较产生一个新值。对于每个位,只有两个操作数的对应位都是1时结果才为1。

2021-03-11 20:39:45 163

原创 C提高笔记(1):数据类型、内存分区、指针

C提高笔记(1):数据类型、内存分区、指针1.数据类型3.程序的内存分区4.指针1.数据类型1.1数据类型是为了更好进行内存的管理,让编译器能确定分配多少内存,数据类型可以理解为创建变量的模具: 固定大小内存的别名。1.2占用内存空间字节:(32位机)char(1) short(2) int(4) long(4)float(4)double(8)void 数字类型修饰函数参数和函数返回,可以指向任何类型的数据,用于数据类型的封装。sizeof告诉我们编译器为某一特定数据或者某一个类型的数据在内

2021-03-11 15:56:23 161 1

原创 解决问题(2):Visual Studio添加自定义代码段,减少重复性工作

打开VS工具栏-代码片管理器-语言Visual C++点击VisualC++文件夹,将位置的地址复制,按Win+R键进入运行窗口,将地址粘贴运行进入.snippent缀名的文件夹,任意选择一个文件,复制粘贴到,打开该文件进行修改Title可修改,Shortcut是自己设置的快捷键,在Code中选择语言,并将自己要修改的代码段复制过来,保存后重新启动。在编辑器中,使用自己设置的快捷键可以看到代码段的标记,再按enter键即可快速得到自己设置的代码段。...

2021-03-08 21:23:21 308

原创 卡尔曼滤波原理及应用仿真(3):非线性滤波之扩展Kalman滤波

标量非线性系统EKF标量系统状态方程:观测方程:MATLAB仿真设置时间长度为50s,过程噪声方差Q=0.01,观测噪声方差R=1,初值X(0)=0.1,协方差P(0)=1%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %函数功能:标量非线性系统扩展kalman滤波问题%状态函数:X(k+1)=0.5X(k)+2.5X(k)/(1+X(k)^2)+8cos(1.2k)+w(k)%观测方程:Z(k)=X(k)^2/20+v(k)%%%%%%%%%%%%%%%..

2020-09-28 17:02:27 1031

原创 卡尔曼滤波原理及应用仿真(2):线性卡尔曼滤波

Kalman滤波器状态空间模型描述的动态系统:Kalman滤波器:Kalman滤波在船舶GPS导航定位系统中的应用MATLAB仿真%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%功能说明:kalman滤波在船舥GPS导航定位系统中的应用function gps_kfclc;clear;T=1;N=80/T;X=zeros(4,N);X(:,1)=[-100,2,200,20];Z=zeros(2,N);Z(:,1)=[X(1,1),X(3,..

2020-09-28 11:19:41 955

原创 解决问题(1):成功解决Keil5在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符

Keil5中编辑C++代码,出现如下错误:在多字节的目标代码页中,没有此 Unicode 字符可以映射到的字符。主要的问题是“参数值”未进行中文转义造成的,发现代码存储的路径中有中文字符,因此猜测是路径下有中文造成的,所以将文件名修改为全英文的字符,再去打开代码发现出现的红叉全部消失了。Tis:代码的编辑过程中不要出现中文,保存路径也是。...

2020-09-16 10:37:53 16765 8

原创 卡尔曼滤波原理及应用仿真(1):MATLAB的基本使用

3. Matlab的常用数学代码3.1矩阵类① % 生成矩阵% 直接法a = [1,2,3;4,5,6;7,8,9];% 冒号一维矩阵 a = 开始:步长:结束,步长为1可省略b = 1:1:10; % 1,2,…10b = 1:10; %与上一个等价% 函数生成% linspace(开始,结束,元素个数),等差生成指定元素数的一维矩阵,省略个数则生成100个c = linspace(0,10,5);% 特殊矩阵e =

2020-09-15 20:01:47 1356

原创 无人机起降(3):飞控初始设置及校准

AcFly飞控上机后,需要对飞控进行一系列设置:飞控初始化飞控上电后会处于M00_init 模式下进行初始化,待状态灯三色慢闪变化后代表所有校准完成,进入 M01_Ground模式。校准使用的是FS-i6s遥控器,先按照遥控器的说明书进行遥控器的设置和相关按键的了解FS-i6s遥控器有8个通道,包括4个摇杆和4个按钮,校准的第一个按钮用来切换定点和姿态模式。校准的第二个按钮支持一键起飞和航点自动飞行功能。校准的第三个按钮支持一键返航功能。然后按照飞控用户手册在 ACFly Prop

2020-09-04 20:47:03 5984

原创 无人机起降(2):AcFly飞控模块与M8N GPS模块的接口修改

假如AcFly飞控想使用M8NGPS而不是AcFly GPS,需要将接线进行更换。AcFly飞控接口定义由飞控手册查阅外设接口:◼ 超声波: Ultrasonic 接口◼ 光流传感器: Uart5 接口◼ GPS: Uart8 接口◼ 外置罗盘: IIC1 接口◼ 激光测距: Uart7 接口◼ 数传串口: Uart1 接口M8N模块参数可以看到M8N GPS的接口定义,再与飞控的飞控接口定义进行比较。GPS模块包括GPS和外置罗盘,查看飞控中对应的接口定义说明:1、UART8:

2020-09-03 11:20:17 3822

原创 无人机起降(1):(论文)基于多传感器融合的舰载无人机自动着舰技术的研究

目录前言一、无人机自动起降系统总体方案设计二、基于模板匹配的无人机目标识别定位方法三、多传感器融合算法四、无人机自动起降系统软硬件设计与实现五、实验与验证前言论文的主要工作如下:(1)以基于模板匹配及图像尺寸测量的图像识别定位技术为例,从原理上分析了单目视觉在引导舰载无人机自动着舰过程中的缺陷与不足,提出了利用UWB定位数据修正该过程的解决方案;(2)研究UWB测距原理及基于空间测边交汇法的三维空间定位方法,并基于联合卡尔曼滤波设计了融合UWB定位、单目视觉定位和GPS/INS数据的目标定位算法,

2020-09-02 17:26:39 1953

空空如也

空空如也

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

TA关注的人

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