自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux线程调度策略

自Linux 2.6.23开始,默认的调度器就是CFS调度器,即完全公平调度器,其期待了早起的“O(1)”调度器。Linux提供了以下系统调用来控制CPU调度行为、调度策略、进程(线程)优先级。nice函数:为调用线程设置新的nice值,并返回新的nice值getpriority函数:返回一个线程、进程组或由特定用户拥有的线程集的nice值setpriority函数:设置一个线程、进程组或由特定用户拥有的线程集的nice值。

2023-09-18 07:58:49 516

原创 Linux内存布局详解

从堆段分配出nmemb*size字节的内存,即分配一块可容纳nmemb个元素、每个元素大小为size字节的数组的内存,将这块内存的初始化为0,并返回这块内存的起始地址。这个128KB可通过。:重新调整ptr所指向的已分配的内存大小为size字节,不会改变原来的内存的内容,也不会初始化新增的内存。从内存映射区申请内存,且释放时也可直接归还内存映射区的这块内存给内核,但是内核需要建立一系列复杂的数据结构来完成内存映射区的内存申请。:从堆段分配出size字节的内存,不会初始化这块内存,返回这块内存的起始地址。

2023-09-09 09:09:25 633

原创 《ROS中级课程》第19课 tf2之四元数基础

本节课学习了四元数的基本概念以及相关的数学操作,如逆矩阵和旋转矩阵。还学习了两种不同类型间的四元数类型的转换。

2023-08-23 08:06:07 399

原创 《ROS中级课程》第18课 tf2之调试debug

学习了如何使用系统化的方式来调试tf2相关的问题,包括tf2_echo和工具。

2023-08-23 07:30:45 146

原创 《ROS中级课程》第17课 tf2之Traveling in time(C++)

在本课程中,你见识了tf2的一个高级特点。tf2能够及时转换数据,并通过turtlesim示例学习了这一功能。tf2允许你回到过去并使用API实现在海龟的旧姿态和当前姿态之间的坐标系转换。

2023-08-22 08:09:22 36

原创 《ROS中级课程》第16课 tf2之使用时间(C++)

在本节课中,学习了如何获取指定时间戳的转换、如何使用函数等待tf2树中的转换可用。

2023-08-22 07:19:36 156

原创 《ROS中级课程》第15课 tf2之添加一个坐标系(C++)

本课程中,学习了tf2转换树及其结构和特点。还学习了在本地坐标系下考虑问题更简单,学些了添加额外的固定和动态坐标系。

2023-08-21 07:25:32 96

原创 第九课Linux设备驱动的软件架构思想

学习linux驱动框架,梳理platform、i2c、spi、misc、uart总线框架

2023-05-14 10:30:41 139

原创 第七课 中断与时钟

顶半部和底半部的结合能够改善系统的响应能力,但不可僵化的认为设备驱动中的中断处理一定要分两个半部。如果中断处理工作本身就很少,完全可以直接在顶半部全部完成。文件保存了系统中中断的统计信息,包括每个中断号上的中断在每个CPU上发生的次数。

2023-04-24 07:09:47 119

原创 第六课 阻塞与非阻塞I/O

阻塞和非阻塞I/O是用户空间对设备访问的两种方式,驱动程序应支持这两种方式。阻塞操作指在执行设备操作时,若不能获得资源,则挂起该进程直至资源可获得后,再唤醒该进程去操作资源。非阻塞操作指在执行设备操作时,若不能获得资源,则该进程要么放弃进行设备操作,要么不停查询直至资源可获得,该进程不会被挂起。

2023-04-18 07:43:01 100

原创 第五课 并发控制与竞态

顺序锁是对读写锁的一种优化,允许读执行单元和写执行单元同时访问共享资源,即在写执行单元对被顺序锁保护的共享资源进行写操作时,读执行单元仍可以继续读,不必等待写执行单元完成写操作,写执行单元也不必等待所有读执行单元完成读操作才进行写操作。RCU不能代替读写锁,当写执行单元比较多时,写执行单元之间的同步开销会比较大,需要延迟数据结构的释放,复制被修改的数据结构,还必须使用某种锁机制来同步并发的其他写执行单元的修改操作。自旋锁可保证临界区不受其他CPU和本CPU内的抢占进程的影响,但仍可能受中断和底半部的影响。

2023-04-17 07:07:22 81

原创 第四课 字符设备驱动

内核空间虽然可以访问用户空间的缓冲区,但在访问之前,一般需要先检查该缓冲区的合法性,即传入的缓冲区是否确实属于用户空间。是一个有全局内存的虚拟设备,该设备驱动中会分配一片大小为4KB的内存空间,并在驱动中提供针对该片内存的读写、控制、定位函数,用户空间进程可通过系统调用操作这片内存的内容。函数时,需要注意:用户空间不能直接访问内核空间的内存,需通过一些函数完成用户空间缓冲区到内核空间的复制,以及内核空间到用户空间缓冲区的复制。中获得主设备号和次设备号,以及通过主设备号和次设备号生成。函数中可将设备结构体。

2023-04-14 07:22:40 70

原创 第三课 Linux文件系统与设备文件

以后的内核的设备驱动核心层代码已处理好设备、总线和类的关系,内核中的总线和其他内核子系统会完成与设备模型的交互。文件系统把连接在系统上的设备和总线组织成一个分级的文件,这些文件可由用户空间存取,向用户空间导出内核数据结构以及它们的属性。该文件系统是虚拟的文件系统,可以产生一个包括所有系统硬件的层级视图,可以展示设备驱动模型中各组件的层次关系。Linux内核中,设备和驱动分别独立注册,注册设备或驱动时,不要求相应的驱动或设备已经存在。目录可获取系统中包含的所有设备文件,其中有设备的主设备号和次设备号信息。

2023-04-11 07:46:12 364

原创 第二课 Linux内核模块

方式加载模块和传递参数。但可以修改bootloader,在bootargs里设置“模块名.参数名=值”的形式向该内置模块传递参数。加载模块时,可通过模块参数方式向模块中的变量传递参数,该变量本身对应模块内部的全局变量。:加载模块,但不会自动解析该模块所依赖的其他模块,也不会加载依赖的其他模块。:打印系统中已加载的所有模块以及模块间的依赖关系。:加载模块,自动解析和加载该模块所依赖的其他模块。:打印模块的信息,如模块作者、模块说明、模块许可证等。:存放内核已加载模块的信息,一个目录对应一个模块。

2023-04-09 10:31:49 388

原创 word自定义目录格式时设置的标题格式不生效

写毕业论文时,遇到自定义目录格式不生效的问题,一番搜索后,终于还是靠自己解决了这个问题,特此记录一下。问题描述:正文部分设置了三级标题,如图1-1所示,在自定义目录格式时,设置了目录1(TOC1)格式为小四宋体加粗,目录2(TOC2)和目录3(TOC3)格式为小四宋体常规,生成的目录如图1-2所示,发现目录格式并不是自己定义的格式。图1-1 正文三级标题格式图1-2 生成自定义目录解决方法:经过试验发现,自己在设置正文标题时,直接选中了word提供的“标题1”、“标题2”和“标题3”样式,由于这

2021-03-08 09:39:13 17961 4

原创 mbed中STM32F446的SPI1和SPI3引脚重映射问题

STM32F446的PB3、PB4和PB5引脚分别是SPI的SCK、MISO和MOSI,可重映射到SPI1和SPI3;STM32F446的PC10、PC11和PC12引脚分别是SPI的SCK、MISO和MOSI,可重映射到SPI3。在使用mbed的SPI类的过程中,发现将PB3、PB4与PB5和PC10、PC11与PC12都配置为SPI后,会有一路SPI无法使用,在查看mbed源码后“PeripheralPins.c”,发现这6个引脚都映射到了SPI3,修改该源文件的代码后,将PB3、4、5映射到SPI

2020-12-26 17:33:16 1894

原创 C++类的拷贝控制成员(拷贝构造、拷贝赋值、移动构造、移动赋值和析构函数)

类中定义了五种特殊的成员函数来控制对象的拷贝、移动、赋值和销毁操作,包括拷贝构造函数、拷贝赋值运算符、移动构造函数、移动赋值运算符和析构函数,统称为拷贝控制操作。拷贝构造函数和移动构造函数定义了 当用同类型的另一个对象初始化正在创建的对象时需要做什么;拷贝赋值运算符和移动赋值运算符定义了 将一个对象赋给另一个同类型的对象时需要做什么;析构函数定义了 当类对象销毁时需要做什么。拷贝构造函数拷贝构造函数的第一个形参必须是自身类类型的引用,且任何其他参数都有默认值。拷贝构造函数的第一个形参必须是引用类

2020-08-22 22:34:56 2211 2

原创 C++多线程编程之condition_variable

参考www.cplusplus.com文章目录std::condition_variable构造函数析构函数condition_variable::notify_allcondition_variable::notify_onecondition_variable::waitcondition_variable::wait_forcondition_variable::wait_untilstd::class cv_statusstd::notify_all_at_thread_exitstd::con

2020-08-14 15:53:44 340

原创 C++多线程编程之timed_mutex

参考www.cplusplus.com文章目录std::timed_mutex构造函数析构函数timed_mutex::locktimed_mutex::try_locktimed_mutex::try_lock_fortimed_mutex::try_lock_untiltimed_mutex::unlocktimed_mutex::native_handlestd::timed_mutextimed_mutex功能与普通的mutex类似,仅多了两个成员函数try_lock_for和try_lock

2020-08-13 22:35:16 451

原创 C++多线程编程之recursive_mutex

参考recursive_mutex文章目录std::recursive_mutex构造函数析构函数成员函数recursive_mutex::lockrecursive_mutex::try_lockrecursive_mutex::unlocknative_handlestd::recursive_mutexclass recursive_mutex;与互斥锁mutex一样,递归锁也是一种锁类型,但允许同一个线程对同一个锁对象多次上锁,获得多层所有权。当解锁时,unlock函数调用的次数需要与lo

2020-08-13 21:47:08 3205

原创 C++多线程编程之unqiue_lock和lock_guard

std::adopt_lock_tstruct adopt_lock_t {};该类是一个空类,用于定义adopt_lock常量对象,adopt_lock可传递给unique_lock和lock_guard的构造函数,使得它们在构造对象时不会对mutex对象上锁,而是假定mutex对象已经被当前线程上锁。adopt_lock常量位于std命名空间中:constexpr adopt_lock_t adopt_lock {};std::defer_lock_tstruct defer_lock_

2020-08-11 23:26:55 257

原创 C++多线程编程之mutex

参考’www.cplusplus.com’mutex构造函数析构函数成员函数mutex::lockmutex::try_lockmutex::unlockmutex::native_handle实例互斥量、互斥锁,用于锁住临界区,防止多个线程同时处于临界区中对临界资源进行操作。C++中的mutex是一个类,可创建可锁对象。mutex对象提供专属所有权,且不支持递归。所谓专属所有权是指,对已经被其他线程占有的mutex对象,当前线程不能再进行锁操作,否则会被阻塞。构造函数constexpr mute

2020-08-08 18:11:04 1266

原创 C++多线程编程之this_thread

参考www.cpluscplus.comthis_threadget_idyieldsleep_untilsleep_forthis_thread是一个命名空间,隶属于std下,存放了一组可用于操作当前线程的函数。get_id在thread类中介绍过该函数,用于获取线程的描述符id。yieldvoid yield() noexcept;yield函数可让当前线程主动放弃处理机,重新进行线程调度。sleep_untiltemplate <class Clock, class Dura

2020-08-08 16:44:09 405

原创 C++多线程编程之thread类

thread头文件:thread名称空间:stdthread类用于创建线程对象。构造函数1、默认构造函数thread() noexcept;//默认构造函数默认构造函数会构造一个thread对象,但该对象不表示任何可执行的线程,并且不是joinable。#include <iostream>#include <thread>int main(int argc, char*argv[]){ //使用默认构造函数创建对象 std::thread th1;}

2020-08-08 15:48:19 516

空空如也

空空如也

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

TA关注的人

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