FreeNOS学习笔记二(阅读)

FreeNOS简介:

FreeNOS是github上一个开源项目,该项目是用C++写的一个操作系统微内核,各种宏内核中的服务作为一个独立的services在微内核中,基于消息的通信方式,该项目代码风格良好,完全基于面向对象,还有常见的设计模式,良好的注释,doxygen,scons。对深入理解操作系统以及代码习惯风格的养成很有帮助。

关于如何看:

  • 通读:建议参照文档查看,附文档地址: http://www.freenos.org/doxygen/

  • 详读:从FreeNOS/kernel/intel/pc/Main.cpp开始看(不要太关注如何装载内核等等,更多的关注代码风格,常用函数实现等等)

根目录下文件含义

  • bin文件夹:封装的是一些常用命令,如ls、cat等等,想让内核运行成功,再细看这些功能的实现。
  • config文件夹:配置文件。
  • kernel文件夹:重中之重,内核文件,从这里开始看。
  • lib文件夹:标准库,分配器、仿真库、posix标准等等;知道文件实现了哪些功能,然后了解相关函数接口,有空回头详细看,由整体到部分的过程。
  • server文件夹:提供相应的服务,网络、序列化、终端等等,还没仔细看…
  • support文件夹:工具依赖,doxygen与scons。

1、Main.cpp:

  • 初始化堆Kernel::heap()函数,启动内核调试串行控制台(生成IntelSerial对象,调用setMinimumLogLevel()函数),构造函数(constructors()),创建并运行内核(生成IntelKernel()对象,运行run()函数)

2、Kernel类(继承于单例类):类API,分体式分配器,int控制器,计时器

  • 数据结构:CPU状态

  • 所包含的函数:中断处理程序,中断钩子处理,内核堆,获取物理内存分配器,获取进程管理,API,获取内存上下文,获取核心信息,获取计时器,执行run(),硬件中断处理,函数挂接处理硬件中断,执行中断处理程序,装载boot镜像,装载boot程序。

3、InterKernel类继承于Kernel类:

  • 功能:X86兼容,Intel内核陷阱(trap),执行内核陷阱,CPU检测到故障时调用,系统时钟中断处理程序,实例PIT计时器,实例APIC,实例PIC。

4、Allocator类:(分配器)分配器地址对齐,子类:BitAllocator,BubbleAllocator,PageAllocator,PoolAllocator,
SplitAllocator。

涉及的部分C++知识:

1、纯虚函数与虚函数:

  • 虚函数:父类中提供虚函数的实现,为子类提供默认的实现,子类可以重写父类中的虚函数。

  • 纯虚函数:C++中包含纯虚函数的类称之为"抽象类",父类不提供实现,由子类实现。

2、虚构函数:

  • 虚构函数在以下三种情况时,会被调用:(1)实例化对象的生命周期结束销毁时。(2)delete指向对象的指针时,或delete指向对象的基类类型指针,而其基类虚构函数是虚函数时。(3)对象i是对象o的成员,o的析构函数被调用时,对象i的析构函数也被调用。

  • 虚函数的调用顺序是子类先调用,父类后调用,多继承时,后继承的先调用。

  • 如果父类的析构函数不加virtual关键字 :子类继承父类,父类的指针指向子类时,delete掉父类的指针,只调动父类的析构函数,而不调动子类的析构函数。 如果父类的析构函数加virtual关键字 :子类继承父类,父类的指针指向子类时,delete掉父类的指针,先调动子类的析构函数,再调动父类的析构函数。

  • 注:若类中存在成员变量类时,会先调用该类的的析构函数,然后再接着调用成员变量类的析构函数。

3、可以直接使用"类名.静态成员名"访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存。

学习出现的知识点部分地址

未完待续~(这个工程还是有点大)

  • 5
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
卡尔曼滤波器学习笔记) 在上一篇笔记中,我们介绍了卡尔曼滤波器的基本原理和数学模型。现在,让我们继续深入学习卡尔曼滤波器的实际应用。 1. 状态方程(State Equation): 卡尔曼滤波器的核心是状态方程,描述系统的状态如何随时间变化。通常表示为x(k+1) = A * x(k) + B * u(k) + w(k),其中x(k)表示系统在时刻k的状态,A是状态转移矩阵,u(k)表示输入,B是输入矩阵,w(k)表示过程噪声。 2. 观测方程(Measurement Equation): 观测方程描述了系统状态与观测值之间的关系。通常表示为z(k) = H * x(k) + v(k),其中z(k)表示观测值,H是观测矩阵,v(k)表示观测噪声。 3. 卡尔曼增益(Kalman Gain): 卡尔曼增益决定了如何将先验估计与观测值相结合,得到更准确的后验估计。卡尔曼增益的计算公式为K(k) = P(k|k-1) * H^T * (H * P(k|k-1) * H^T + R)^-1,其中P(k|k-1)表示先验误差协方差矩阵,R表示观测噪声的协方差矩阵。 4. 预测步骤(Prediction Step): 预测步骤用于根据系统的模型预测下一时刻的状态和误差协方差矩阵。预测步骤的计算公式为x(k+1|k) = A * x(k|k) + B * u(k),P(k+1|k) = A * P(k|k) * A^T + Q,其中x(k|k)表示先验估计,P(k|k)表示先验误差协方差矩阵,Q表示过程噪声的协方差矩阵。 5. 更新步骤(Update Step): 更新步骤用于根据观测值修正先验估计,得到后验估计和后验误差协方差矩阵。更新步骤的计算公式为x(k+1|k+1) = x(k+1|k) + K(k+1) * (z(k+1) - H * x(k+1|k)),P(k+1|k+1) = (I - K(k+1) * H) * P(k+1|k),其中x(k+1|k+1)表示后验估计,P(k+1|k+1)表示后验误差协方差矩阵,K(k+1)表示卡尔曼增益。 以上就是卡尔曼滤波器的基本概念和计算步骤。在实际应用中,我们需要根据具体问题来确定状态方程、观测方程和相关参数。卡尔曼滤波器的优势在于可以有效地处理噪声和不确定性,广泛应用于目标跟踪、导航、机器人等领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值