自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Duran.L的专栏

不积跬步无以至千里

  • 博客(27)
  • 收藏
  • 关注

原创 C++ std::conditional的简明指南

C++ 11标准引入了,这是一个非常有用的类型转换模板,它允许我们在编译时根据条件选择不同的类型。这个模板类通常用于条件类型推断,可以帮助我们根据条件在编译时决定使用哪种类型。在本篇文章中,我们将深入了解的用法,并提供一些相关的例子来帮助理解。

2023-08-07 18:16:59 407 2

翻译 CMake 依赖使用指南

在实际的项目开发中,项目经常依赖于其他的项目或工件。CMake提供了许多方法来将这些东西合并到构建中。用户可以灵活地选择最适合他们需要的方法。本文将详细介绍如何在CMake中使用这些依赖。

2023-07-15 21:24:19 780

翻译 CMake 安装各种文件

本文介绍如何使用CMake来完成软件的安装。这里所谓的安装类似于Windows平台上的各种应用的安装程序要完成的事情,只是没有UI界面罢了。

2023-07-08 22:20:02 403

翻译 CMake 构建系统中的概念解析

本文介绍CMake构建系统中的基本概念。这些概念对于进一步理解CMake并使用更加高级的特性非常重要。若希望更好地掌握CMake,理解这些概念是必经之路。本文基于CMake官方文档,对其进行了翻译和必要的补充解释,以及个人理解。

2023-07-02 16:36:04 185

原创 C++ std::distance的简明指南

在C++标准库中,是一个非常有用的函数,可用于计算两个迭代器之间的距离。本文介绍了函数的基本用法和示例,以及一些注意事项。

2023-06-22 16:08:25 4011

原创 Qt/C++ QVariant内容的零拷贝访问(获取与修改)

本文介绍了一种直接访问QVariant内部数据的方法,可以节省不必要的拷贝,提升程序的性能。对于读改写操作,则需要谨慎使用。

2023-06-17 16:19:01 617

翻译 CMake 用户交互指南

通过CMake系列博文中的第一篇CMake快速入门,相信大家对于CMake已经有了一个感性的认识。本文在此基础上,主要介绍如何使用cmake交互程序完成构建任务。文章的内容主要翻译自,重点关注了针对Windows和Linux平台的内容,并增加了一些必要的解释。

2023-06-11 16:13:16 366

原创 CMake 快速入门

相信学习或者从事过C、C++程序开发的同学都清楚,make是一种管理c或者c++代码构建(编译、安装、部署等)的构建系统,而它通过Makefile脚本文件进行编程。通常我们会为每一个子模块(功能)编写一个makefile文件,如果这个工程很大,而且相关性比较强的话,makefile的书写就会变得相对繁琐。而CMake是一种更简单,更易用源代码构建管理工具。本文将通过5个例子,让读者能够快速入门CMake。

2023-06-03 18:09:12 169

原创 FreeRTOS学习-链表(List_t)

在FreeRTOS中,List是为了任务调度器深度定制的链表,因此,理解FreeRTOS内核中的链表有助于理解任务调度的原理和实现。当然该链表也可以为应用程序所用。本文将介绍FreeRTOS中List的基本用法和关键的数据结构。

2023-05-14 11:22:11 485

原创 FreeRTOS学习-任务通知(Task Notification)

任务通知本质上就是一种进程间通信机制。之前的文章介绍的消息队列、事件组、信号量等都是一种间接的通信方式,而任务通知则是更加直接的方式,允许两个任务(或中断和任务)之间直接通信。

2023-05-03 11:02:15 338

原创 C++ std::result_of/std::invoke_result的简明指南

在C++中,有时我们需要获取函数或可调用对象的返回值类型,以便进行后续的操作,在泛型编程中尤其常用。在早期的C++版本中,我们需要手动推导函数返回值类型,这个过程非常复杂,也容易出错。为了解决这个问题,C++11引入了和(C++14),这两个模板可以方便地获取函数或可调用对象的返回值类型。而在C++17中,废弃了而引入了更好用的和。下面则先介绍再介绍。综上所述,和是两个非常有用的工具,可以方便地获取函数、成员函数和可调用对象的返回值类型。它们可以避免手动推导函数返回值类型的复杂过程,减少错误和代码量。

2023-04-20 23:24:48 3534 3

原创 Qt/C++ 如何删除QListWidget的指定项

本文简单介绍了一种如何在QListWidget删除匹配指定字符串的项的方法。

2023-04-19 15:21:53 3008

原创 FreeRTOS学习-事件组(Event Groups)

事件组是FreeRTOS提供的另一种同步机制。允许任务进入blocked状态,等待一个或者多个事件;事件组会唤醒所有等待这个事件或事件组的任务。所以,事件组通常用于多个任务(中断)之间的同步。

2023-04-16 11:56:36 1221

原创 C++ std::enable_if的简明指南

std::enable_if是在 C++20 的概念之前利用SFINAE(Substitution Failure Is Not An Error)的便捷方式,特别是用于根据类型特征有条件地从候选集中删除函数,允许基于这些不同类型特征的单独函数重载或特化。本文通过例子介绍了其用法。

2023-03-30 16:08:23 1677 2

原创 Qt/C++ Qt状态机框架(QStateMachine)的简明指南

Qt状态机框架提供了创建和执行状态图的类。概念和符号基于Harel的状态图,这也是UML状态图的基础。状态机执行的语义基于状态图XML (SCXML)。

2023-03-25 22:05:19 2936 1

原创 FreeRTOS学习-共享资源的同步访问

对于多任务的系统,对于某个共享资源(全局变量,外设等)的并发访问容易引起数据的不一致性,这将会导致一些意外的结果。而共享资源的同步访问则是为了解决这个问题而提供的一种同步机制,例如临界区、互斥锁等,他们的基本思想就是互斥访问。本文将介绍FreeRTOS中的临界区、互斥锁与递归互斥锁。

2023-03-20 23:02:59 794

原创 FreeRTOS学习-中断管理

中断管理是一个操作系统中最核心的功能之一。在FreeRTOS中,中断总是可以打断task(尽管是最高优先级的task),而task永远不可能打断中断ISR(interrupt service routine)。本文先介绍了FreeRTOS中的中断管理,然后介绍了中断处理函数中如何使用FreeRTOS的API,最后介绍了中断处理函数与任务之间的同步方法——信号量。

2023-03-04 20:44:34 3036

原创 FreeRTOS学习-软件定时器管理

软件定时器用于在未来的某个时间执行某个预先指定的函数,或者以一个固定的频率周期性调度该函数。这个预先指定的函数称为软件定时器回调函数, 它是由软件定时器服务调用的.软件定时器由FreeRTOS的内核控制,不需要硬件的支持,不与硬件定时器和硬件计数器关联。

2023-02-19 15:27:47 870

原创 FreeRTOS学习-队列管理

在FreeRTOS中,提供了多种任务间通讯的机制,包括消息队列、信号量和互斥锁、事件组、任务通知。消息队列、信号量和互斥锁、事件组都是间接的任务间通信机制,而任务通知则是直接的通信方式,因此,任务通信的性能比其他几种间接的通信方式要高。严格来说,互斥锁并不是一种任务间通信机制,将他们放在一块是因为互斥锁是基于信号量实现的,便于理解。在FreeRTOS中,信号量又是基于消息队列实现的,因此,先介绍消息队列,然后再介绍信号量和互斥锁。最后介绍事件组和任务通知。

2022-12-17 22:07:42 1361 6

原创 Qt/C++ 借助QVariant实现可存储通用类型的容器

有一种场景的需求如下:1. 需要一个能够同时存储多种数据类型的容器;2. 该容器需要提供拷贝的功能;3. 该容器需要支持序列化与反序列化。我们姑且将满足以上需求的容器称为可存储通用类型的容器。本文假设项目中使用了Qt库,在此基础上,为实现这种容器提供了一种可行的思路,并给出实现这种容器的要点。

2022-12-04 23:22:52 1132

原创 FreeRTOS学习-任务管理(Task管理)(2)

本文将分别从对外接口(外特性)和内涵(内部实现)进行剖析。对外接口的部分,不包含前面已经提及的内容,主要是介绍内核内部使用的接口,所谓对外,是从任务管理模块的角度而言的,这些接口会被例如队列管理、任务通知等其他内核模块使用。

2022-11-27 12:47:53 662

原创 Qt/C++ 临时屏蔽控件信号(signal)的实用方法

本文介绍了在Qt/C++中,一种可以临时屏蔽某个控件的信号的方法,通过blockSignals()并非使用disconnect()实现。

2022-11-23 16:03:15 3721

原创 FreeRTOS学习-任务管理(Task管理)(1)

任务管理(或称进程管理)是所有操作系统内核的最基本组成模块之一,FreeRTOS也不例外。想要了解一个操作系统,不得不理解其任务管理的设计和实现。任务管理的介绍由两篇文章组成,第一篇先介绍了FreeRTOS的任务管理的重要概念和外部特性以及相关联的重要实现,第二篇介绍任务管理实现的细节(关键数据结构和内部函数的实现)。温馨提示由于文章较长,可当作工具文使用,即仅挑选感兴趣的部分阅读;为了解释FreeRTOS系统调用的行为,文中难免会涉及一些操作系统原理、ARM体系结构相关的概念,请读者自行查阅资料。

2022-11-18 22:45:53 3479 4

原创 Qt/C++ QDataStream序列化和反序列化64-bit整型的问题

讨论本人在实际开发中遇到的一个64-bit整型数序列化和反序列化的问题。由于本人参与的项目是需要支持Windows和Linux两个操作系统,本人先在Windows完成了开发,然后另一个同事在Linux上进行跨平台验证时发现了编译错误。

2022-11-16 11:00:42 839

原创 C++ STL 移动一个vector的元素到另一个vector

有的时候,我们需要提取某个现有的vector中的元素到另一个vector中,或者对多维的vector进行纬度的转换。在这种场景下,往往原始的vector中的数据可能并不需要了,为了节省内存空间,我们可以使用STL的移动语义。实现元素移动的常见方法有3种。通过例子的形式说明.

2022-11-15 17:46:50 5303

原创 FreeRTOS学习-内存管理

虽然从v9.0.0后,FreeRTOS开始支持内核对象的静态分配方式,因此,内存管理库可以被裁剪。但在大多数嵌入式应用中,堆的使用还是非常常见的。因此,还是有必要研究一下FreeRTOS的内存管理。本文介绍了如何使用FreeRTOS的内存管理接口,并分别介绍了FreeRTOS对他们的5种实现。

2022-11-06 21:08:35 2716

原创 FreeRTOS学习-前言与FreeRTOS发行版

因为工作的需要,学习FreeRTOS已经有一段时间了。接下来一段时间会定期更新本人学习FreeRTOS的系列笔记。系列笔记主要参考了官方的说明手册和FreeRTOS的源代码。其主要思想是先了解FreeRTOS的对外接口,即理清其对外可见的功能,以此作为切入点,逐步深入其内涵(即内部实现)。由浅入深,逐渐深入;满足不同需求层析的人的需求:对于只需要了解如何使用FreeRTOS的童鞋,只需要学习外延部分即可;对于有更加深入要求的童鞋,也可以从中求得解答。另外,实现部分主要基于。

2022-11-05 21:25:50 835

空空如也

空空如也

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

TA关注的人

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