自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(31)
  • 资源 (3)
  • 收藏
  • 关注

原创 《从0开始写一个微内核操作系统》6-GIC中断

从0开始写一个微内核操作系统

2022-11-04 18:23:56 703 1

原创 《从0开始写一个微内核操作系统》5-页表映射

从0开始写一个微内核操作系统

2022-11-03 19:20:38 572

原创 《从0开始写一个微内核操作系统》4-关于mmu

《从0开始写一个微内核操作系统》

2022-11-02 18:41:08 859

原创 《从0开始写一个微内核操作系统》3-实现printf

从0开始写一个微内核操作系统

2022-11-01 18:23:05 182

原创 《从0开始写一个微内核操作系统》2-系统启动

从0开始写一个微内核操作系统

2022-11-01 18:22:33 495

原创 《从0开始写一个微内核操作系统》0-环境准备

从0开始写一个微内核操作系统

2022-11-01 18:21:50 395

原创 《从0开始写一个微内核操作系统》1-构建GN-base

从0开始写一个微内核操作系统

2022-11-01 18:20:08 559

原创 OS-基于位图的RR调度算法

OS-基于位图的RR调度算法位图原理有这么个业务场景,在10亿个不重复的随机整数中查找某个数 x 是否存在其中,32为操作系统,4G内存。普通算法我们可以使用10亿个int类型的空间来存储这10亿个数据,然后再进行x查找。这1亿个int数据就需要占用:1000000000*4 = 3.72G字节空间。光存储这10亿数据就要花到这么多内存实在是太恐怖了。其次在查找的时候,最快的hash查找,光数据结构的空间都要需要很庞大的内存空间。位图算法我们先把数据量缩小,假设只有10个随机数(0-9)

2022-04-12 17:04:51 491

原创 OS-实现一个RR调度算法

OS-实现一个RR调度算法原理RR调度相比于FCFS要公平一点,RR为每一个任务分配了一段固定的时间片(timeslice),当这个任务消耗完分配的时间片后,就会切换到下一个任务进行调度,这样相同优先级的任务都能够得倒相对公平的调度机会。在RR调度中就是timeslice的大小的划分,太大就退化成了FCFS,太小会引起过多的上下文切换,无味的消耗CPU是很浪费的。什么是timeslice?OS会使用一个timer来定时发生中断,timer的定时周期就是timeslice,比如说我们设定timer

2022-04-12 11:47:25 694

原创 OS-实现一个FIFO调度算法

OS-实现一个FIFO调度算法原理FIFO是在FCFS调度上加入了优先级来进行任务抢占,调度器从ready队列里获取优先级最高的任务进行调度,除非高优先级任务放弃CPU资源,低优先级的任务永远得不到调度,优先级相同的任务采用FCFS进行调度。什么时候会发生调度?主动放弃cpu资源(sleep/suspend)被动放弃cpu资源(mutex/semaphore)被更高优先级任务抢占扩展数据结构FIFO加入了优先级这个维度,我们把之前的ready队列扩展成二维,每一个优先级对应一个队列,相同

2022-04-11 17:48:33 1766

原创 OS-实现一个FCFS调度算法

OS-实现一个FCFS调度算法原理FCFS也叫先来先服务调度算法,是非常简单的一种调度算法,他基于队列的排队思想,调度器必须排队处理加入队列的任务,不能进行抢占,我们只需要使用一个队列的数据结构就能够很方便的实现LINUX下的SCHED_FIFO调度策略和FCFS是不一样的,虽然都是排队,但是SCHED_FIFO是基于优先级的,高优先级可抢占的,当相同优先级时和FCFS相同准备数据结构队列(queue)任务控制块(tcb)queuelist_head是一个双向循环链表,我们可以用他来

2022-04-11 16:06:22 1216

原创 OS-任务调度状态机

OS-任务调度状态机

2022-04-07 14:51:58 597

原创 OS-任务调度

OS-任务调度业务类型通常我们把业务划分为两种类型CPU密集型IO密集型CPU调度准则不同的 CPU 调度算法具有不同属性,选择一个特定算法会对某些进程更为有利。为了选择算法以便用于特定情景,我们必须考虑各个算法的属性。为了比较 CPU 调度算法,可以采用许多比较准则。选择哪些特征来比较,对于确定哪种算法是最好的有本质上的区别。这些准则包括:CPU 使用率:应使 CPU 尽可能地忙碌。从概念上讲,CPU 使用率从 0% 到 100%。对于一个实际系统,它的范围应从 40%(轻负荷系

2022-03-31 14:45:23 770

原创 从一个ELF程序的加载窥探操作系统内核-(5)

从一个ELF程序的加载窥探操作系统内核-(5)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》LINUX下的ELF加载器究竟是如何完成的ELF加载器其实和OS的实现是紧密捆绑在一起的,

2022-03-30 16:21:46 1523

原创 从一个ELF程序的加载窥探操作系统内核-(4)

从一个ELF程序的加载窥探操作系统内核-(4)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》为什么需要栈栈一种先入后出的数据结构,恰好满足我们的设计需求而已,像矩阵存在的意义一样

2022-03-30 14:23:22 602

原创 从一个ELF程序的加载窥探操作系统内核-(3)

从一个ELF程序的加载窥探操作系统内核-(3)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》进程和线程究竟有何区别让我们先回到MCU的世界:由于MCU没有MMU单元,所以在RT

2022-03-29 17:21:50 710

原创 从一个ELF程序的加载窥探操作系统内核-(2)

从一个ELF程序的加载窥探操作系统内核-(2)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》linux下运行一个ELF程序都经历了什么当我们在shell终端下执行一个ELF程序,首先

2022-03-29 15:15:16 1291

原创 从一个ELF程序的加载窥探操作系统内核-(1)

从一个ELF程序的加载窥探操作系统内核-(1)操作系统加载一个ELF程序看似一个EASY的动作,其实下面隐藏了很多很多OS内核的关键实现,让我们一起来解密其中的流程作者是一个micro kernel的开发者,在设计动态链接器的时候,在此留下一些笔记,重点参考了以下资料文献《程序员的自我修养》《深入理解计算机系统》《现代操作系统-原理与实现》《深入理解LINUX内核》《设计模式/JAVA》一个ELF程序的构成与运行这里的ELF程序指的是可执行类型的文件,动态库和静态库也是ELF

2022-03-29 11:05:17 998

原创 MMU地址空间映射

MMU地址空间映射虚拟地址-物理地址虚拟地址,和芯片位数相关,对于32位芯片,一个指针的大小为4字节,寻址范围为【0x0000,0000 ~ 0xFFFF,FFFF】,寻址范围为4G,也就是说最多能够访问到4G的内存空间。但是实际情况下缺很尴尬,在早期,内存的真实物理容量都很小,通常只有几百兆,在这种情况下,如何让用户拥有4G的寻址空间呢?虽然这是一个假象。可以通过内存映射的方式,为每一个进程都营造出可以访问到4G内存空间的假象。为什么要使用虚拟地址呢?在单片机上,没有MMU单元,我们都是直接访问的内

2021-09-17 10:15:37 770

原创 如何使用MMU隔离地址空间

如何使用MMU隔离地址空间划分空间在32位ARM架构下,我们可用使用的地址空间为4G(0x0000 0000 ~ 0xFFFF FFFF ),也就是我们能操作的地址空间范围,但是这只是我们软件上的可操作范围。实际上我们的物理内存可能低于4G或者超过4G,超过4G空间我们就需要用64位的ARM,64位的ARM理论上是没有物理内存范围限制的。还有就是你所选的ARM,他具体支持多大的物理内存,不是所有的32位ARM都支持4G物理内存,这个和SOC公司相关,SOC公司会根据ARM核心(v7/v8)来重新设计

2021-09-17 10:02:17 417

原创 ELF加载器的原理与实现

ELF加载器为什么需要ELF隔离应用服务和内核服务有了ELF,我们的应用程序都可以通过编译成ELF的方式从外部加载,系统内核部分只提供关键的内核服务(内存管理/中断/调度/IPC)和系统服务(文件/网络),用户服务程序都可以通过ELF的方式进行加载。同时库的同步更新可以在不更新内核的情况进行同步更新。提供统一编程接口我们通过提供统一的POSIX标准库,来为用户提供标准的编程接口,方便了应用程序开发人员进行标准开发应用程序可以动态加载和卸载通过ELF,用户可以动态的加载和卸载相关服务,

2021-08-19 15:05:03 2439

原创 卡尔曼滤波-EKF

EKFEKF称为扩展卡尔曼滤波,他和标准卡尔曼滤波有何区别呢?他的出现主要是为了解决在非线性系统下的最优估计问题,前面我们提到标准卡尔曼滤波只适用于线性系统,对于非线性系统我们可以用EKF来进行最优估计。GitHub demoAHRS_EKF_Matlab线性与非线性https://zhuanlan.zhihu.com/p/84365683线性(Linear)系统的一阶导数为常数,线性系统满足比例性和叠加性。可以用简单的一句话来描述线性系统:若该系统的的微分方程满足线性性,则该系统为线性系统

2021-01-12 14:30:11 10737 3

原创 卡尔曼滤波-实战IMU姿态估计

实战 IMU 卡尔曼滤波基础知识已经准备的差不多了,本章开始通过一个实际应用来真正感受一下卡尔曼滤波的魅力!IMU 滤波陀螺仪加速度计加速度计传感器得到的是 3 轴的重力分量,是基于重力的传感器,但是无法感知 Z 轴上的旋转,我们可以通过三角函数来计算,X,Y 轴的旋转角度。从图表中可以看出,在一分钟内,角度没有随着时间有漂移现象,但是伴随着的噪声很大,必须经过滤波处理才能使用。建立系统模型代码实现卡尔曼滤波关键元素:1、 F 矩阵2、 P 矩阵3、 Q

2021-01-08 10:52:09 6416 8

原创 卡尔曼滤波-多维卡尔曼滤波器

多维卡尔曼滤波所谓多维,无非就是你关注的系统状态从一个变成了多个而已,描述多维度最好的工具就是矩阵,所以对矩阵不熟悉的,要回去补一补课咯。一维 VS 多维对比一下,其实,标准的公式就是把我们一维的卡尔曼拓展到了多维度,然后一般通用化的表示而已,接下来我们就把一维拓展到多维,这里会用到关键工具:矩阵,为什么要用矩阵,并不是矩阵有多牛逼,而是矩阵的一些运算法则正好满足我们的系统模型而已,他并没有那么恐怖!欢迎来到多维世界用矩阵描述问题预测更新总结标准

2021-01-08 10:41:08 942

原创 卡尔曼滤波-一维卡尔曼滤波器

一维卡尔曼从本章开始,我开始逐步从一维到多维介绍卡尔曼,由于原来是在Word上记录的,现在转到Markdown下面,好多公式没法同步,只能截图了。没有过程噪声的卡尔曼滤波在α滤波其中,我们已经熟悉了两个方程:1》状态更新方程2》状态预测方程在这一章中,我们将引入剩下的 3 个卡尔曼滤波方程。在这之前,我们回顾一下我们之前位置估计的例子,通过雷达测量值和真实值之间是有误差的,当时我们是用高斯噪声来模拟这个误差的,这个误差我们叫测量误差(measurementerror),当然这个误差是随机的

2021-01-08 10:30:05 1337

原创 卡尔曼滤波-α滤波器

标准卡尔曼滤波也就是系统模型是线性的,理解了标准卡尔曼滤波后,其他的也就理解了概述从网上看了很多很多关于卡尔曼滤波的文章,最容易理解的居然是国外的一个教程https://www.kalmanfilter.net/default.aspx英文不好的也可以切换到中文版哦!!!当然国内也有翻译过后的版本https://zhuanlan.zhihu.com/c_1149619223558012928,这两篇文章几乎从无到有的过程给你讲述了什么是卡尔曼滤波,我下面写到的大多也是基于上述两篇文章,再加上.

2021-01-07 16:12:49 975

原创 卡尔曼滤波

姿态估计-卡尔曼滤波???? 注意在系列文章中的第一章,我介绍了关于姿态估计的一些基础知识,包括传感器,坐标系,欧拉角,DCM,四元数等知识。这一章节我们开始逐步消化我们的正餐:卡尔曼滤波。什么是卡尔曼滤波???? 警告我们要估计一个系统的某一个状态,我们可以通过很多方法来得到这个状态值,但是每一种方法都会有自己的误差,有的大,有的小。卡尔曼滤波就是通过误差来融合不同方法最后得到最优的状态值,所以卡尔曼滤波也叫做最优状态估计。举一个最简单的例子,我们要测量车子当前时刻的速度,我们可以通

2021-01-07 15:26:23 508

原创 HMC5983求解偏航角

文章目录前言一、偏航角的定义二、计算偏航角1.坐标系定义2.坐标系旋转3.求解方程总结前言飞控中使用的磁力计为HMC5983,我们通常用他来求解姿态角中的偏航角。一、偏航角的定义我们定义坐标系为NED坐标系,对应的偏航角为右手定则下,机头(X轴)与正北的夹角。二、计算偏航角1.坐标系定义从技术手册看出,X轴朝下,Y轴朝右,Z轴朝上,当磁力计的X轴指向正南时候,我们使用yaw=arctan(my/mx)得到的偏航角就为正北0度,此时逆时针为正。arctan不能确定象限,需要使用atan

2020-12-15 14:02:29 3128 1

原创 IMXRT1052 FlexRAM配置与空间分配

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、存储器架构1.整体存储空间架构2.FlexRAM空间分配2.FlexRAM配置3.FlexRAM地址空间映射二、代码区域分布分析1.众所周知,代码经编译链接后生成的文件分为5个部分2.在ROM还是在RAM,加载域和执行域3.分析域的执行逻辑4.程序是如何在flash和ram里运行的总结前言NXP IMXRT架构其实挺异类的,下面是我的一点经验分析。一、存储器架构1.整体存储空间架构IMXRT1052内置512K

2020-12-14 10:28:35 1449

原创 无人机飞控算法-姿态估计-欧拉角-旋转矩阵-四元数

无人机飞控算法-姿态估计(EKF卡尔曼滤波)此系列记录了我理解的卡尔曼滤波从0到1的过程,从姿态估计到位置估计,我们从核心点一个个出发,并结合实际模块的应用来一一揭开卡尔曼滤波的神秘面纱。提示:在系列文章中,我参考了大量CSDN,知乎,简书等其他朋友的各种文档资料,并从中获益良多,对此表示非常感谢!在更新的过程中不免出现很多错误,希望大家能够及时指出和交流,一起学习,一起进步!系列文章目录无人机飞控算法-姿态估计(EKF卡尔曼滤波)前言一、姿态估计是什么?二、惯性测量单元(IMU)1.加速度计2.陀

2020-12-06 19:39:43 5694 4

原创 飞控算法-姿态解算之互补滤波

飞控乱入之姿态解算姿态解算是通过读取各个传感器的数据进行融合最终得到当前飞行器的姿态,姿态通常用Euler角(Roll-Pitch-Yaw)来表示姿态解算框架姿态解算的数据源可来自于陀螺仪或加速度计,他们分别都可以得到当前姿态,但实际上他们都有各自的传感器性能的优缺点,需要取长补短,进行数据融合才能得到真实的姿态,这种方法简称 互补滤波 算法传感器特性互补滤波姿态解...

2020-04-03 16:24:09 9633 3

飞控东北天下的欧拉角旋转矩阵四元数和加速度计磁力计之间的关系

文档描述了,在东北天下的欧拉角,旋转矩阵,四元数,之间的转换关系,以及加速度计,磁力计的转换关系,有助于姿态解算时的推导。

2020-12-17

空空如也

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

TA关注的人

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