自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Windows常用操作及配置记录(持续更新)

Win + S,输入控制面板,然后点击打开系统给出的最佳匹配控制面板应用所有控制面板项窗口,找到并点击调整计算机的设置下的安全和维护安全和维护窗口,左侧点击更改用户账户控制设置用户账户控制设置窗口,可以看到默认的设置是开启了用户账户控制功能。拖动拉杆,将其拖动到最底部,设置为从不通知。

2023-05-14 15:55:26 185

原创 算法-快速乘、快速幂

【代码】算法-快速乘、快速幂。

2022-12-29 17:36:23 181

原创 RT-Thread源码-9-内存堆剖析

前言本次主要介绍RT-Thread中另一种内存管理方式,内存堆。相对于内存池来说,内存池是一种静态内存管理方法,内存堆则是一种动态的管理方式。基本数据结构struct rt_memheap_item{ rt_uint32_t magic; /**< magic number for memheap */ struct rt_memheap *pool_ptr; /

2022-05-14 17:50:47 688

原创 RT-Thread源码-8-内存池剖析

前言在C中,可以通过malloc、calloc、realloc进行动态的、任意大小的内存块申请,以及通过free进行内存块释放;在C++中,能够通过new及delete执行上述操作。这样的优点非常明显,它们使内存块的申请分配变得非常灵活方便。但是,由于它的灵活性,将会有如下缺点:由于内存本身是连续的,在任意申请又释放达到一定次数后,在没有内存管理的情况下,它难免会出现内存碎片;在内存操作过程中,若非原子操作,在多线程环境下将容易出现线程安全问题;RT-Thread中提供了内存池的管理方法。它

2022-05-12 00:35:54 302

原创 RT-Thread源码-7-IPC相关剖析

IPCIPC(Inter Process Communication),进程间通信,用于在不同进程间传递或同步信息。在RT-Thread中主要提供的方式有消息队列、互斥锁、信号量、事件、邮箱及信号()。几个公用函数IPC对象的基础数据结构struct rt_ipc_object{ struct rt_object parent; /**< 父对象节点 */ rt_list_t suspend_thr

2022-05-08 21:01:52 736

原创 RT-Thread源码-6-定时器功能剖析

RT-Thread中,除了处理器提供硬件定时器外设,也提供了软件定时器。这里,软件定时器分为了软定时器及硬定时器,二者的区别在于对超时事件的处理时机的不同。软定时器于系统timer线程中执行超时事件处理函数,而硬定时器于系统时钟中断中处理。软定时器线程只有在使能软定时器(宏RT_USING_TIMER_SOFT)才能开启此线程。初始化在系统启动时,首先初始化了软定时器列表,定时器列表结构仍为rt_list,定时器数量即定时器列表大小由宏RT_TIMER_SKIP_LIST_LEVEL决定,.

2022-05-07 01:28:07 928

原创 RT-Thread源码-核心数据结构rt_list及rt_slist

在RT-Thread中,基本上所有内核对象的实现都离不开,rt_list及rt_slist,这两个数据结构实际上就是普通的链表数据结构。rt_list表示的是双向链表结构,而rt_slist表示的是单向链表结构,以下为这两个数据结构的实现:struct rt_list_node{ struct rt_list_node *next; /**< point to next node. */ struct rt_list_node.

2022-05-05 01:19:01 1066

原创 RT-Thread源码-5-空闲线程分析

前言空闲线程是系统中优先级最低的线程,且永远不会被挂起,当系统无其他线程轮转调度时,调度器将调度到空闲线程。初始化空闲线程初始化于函数rtthread_startup函数中,在调度器启动前执行,具体看RT-Thread西东启动流程分析。函数名为rt_thread_idle_init,具体实现为:/** * @ingroup SystemInit * * This function will initialize idle thread, then start it. * * @no

2022-05-05 00:21:36 677 2

原创 RT-Thread源码-4-线程函数剖析

前言TCB 线程控制块RT-Thread中每个线程的信息用线程控制块(Thread Control-Block,缩写为TCB)表示,它是定义在rtdef.h中的struct结构体,用来描述一个线程所有必要信息;线程的优先级别用非负整数(即无符号整数)表示。数值越小,优先级越高;系统的线程优先级的数目固定,最多支持256级;系统中的线程数目不做任何限制,线程的数目仅受限于系统RAM的大小。线程控制块存储的数据结构为链表;线程创建在RT-Thread中分为静态创建和动态创建,二者实现

2022-05-04 16:03:02 894

原创 RT-Thread源码-__rt_ffs函数剖析

在RT-Thread中,获取已就绪最高优先级线程索引会使用此函数。而此函数所包含的算法为bitmap算法。为什么使用此函数获取已就绪最高优先级线程索引?为什么使用bitmap算法?目的在于提升索引值获取的执行效率,以及保证系统的稳定执行。通常,为了获取已就绪最高优先级线程,最简单的方法就是遍历当前线程列表中的每一个线程状态及优先级,通过比较最后获取。而这种方法会随着最大支持线程数的增加而增加时间复杂度,且执行时间非恒定,影响系统的稳定。此函数在RT-Thread中实现如下,const rt_ui.

2022-05-02 19:01:44 655

原创 RT-Thread源码-3-线程调度函数剖析

初始在RT-Thread的启动流程中,rtthread_startup的最后一步,调用了rt_system_scheduler_start开启了线程调度器,此函数源码如下:void rt_system_scheduler_start(void){ register struct rt_thread *to_thread; register rt_ubase_t highest_ready_priority;#if RT_THREAD_PRIORITY_MAX > 32

2022-05-02 17:17:10 1033 2

原创 RT-Thread源码-2-上下文切换函数剖析

PendSV_Handler/* r0 --> switch from thread stack * r1 --> switch to thread stack * psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack */.global PendSV_Handler.type PendSV_Handler, %functionPendSV_Handler: /* 失能中断进行上下文切换 */ .

2022-05-01 01:25:09 716

原创 RT-Thread源码-1-启动流程剖析

本文参考代码为 RT-Thread Nano 3.1.3版本代码。在初始篇中仅针对此操作系统的初始化及启动流程进行分析。不同的处理器系列及版本,以及使用的编译器之间会存在一些差别,但基本流程不变。以Cortex-M4、GCC版本为例初始化从上电启动或复位重启,从栈顶初始化中断向量表后跳转到ResetHandler函数的栈地址,开始执行。ResetHandler函数中:跳转执行系统初始化SystemInit跳转执行main函数,对RTOS进行初始化启动从main函数进入RT.

2022-04-30 23:35:42 458

原创 UNIX环境高级编程(APUE)读书笔记

未完待续第一章 基础1.1 引言所有操作系统都为它们所运行的程序提供服务。典型服务包括:执行新程序、打开文件、写入/读取文件、分配存储区以及获得当前时间等。1.2 UNIX体系结构内核:从严格意义上来说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。UNIX体系结构(从里到外):内核->系统调用->shell/公用函数库->应用程序内核的接口称为系统调用(system call)shell是一个特殊的应用程序,为运行其他应用程序提供了一个接口.

2022-04-30 19:08:30 315

原创 跟我一起Makefile 读书笔记

源码文件较多时用make,即GNU makeMake:在当前目录下查找以Makefile(或makefile、GNUmakefile)命名的文件,找到后按照Makefile中定义的规则编译生成最终的目标文件。若目标文件不存在或者目标所依赖的文件比目标文件新,就会执行后面的命令更新目标。make -f (或 --file) xxx 可指定特定的MakefileMakefile(修改日期变更就会更新):准备几个C文件。编写如(冒号后为依赖,冒号后TAB行为命令,第一行为默认目标(..

2022-04-30 19:04:04 79

原创 Effective Modern C++读书笔记

本笔记主要用于记录要领、体会及摘抄书中精华第1章 类型推导1.1 理解模板类型推导在模板类型推导过程中具有引用(&)或指针(*)类型的实参会被当成非引用类型来处理。换言之,其引用或指针会被忽略。template<typename T>void f(T& param);int x = 27;const int cx = x;const int& rx = x;f(x); // 此处T的类型被推导为int,param为int&f(.

2022-04-30 18:50:02 1344

原创 现代C++教程1X读书笔记

C++1X(11、14、17)各版本变化传统C++指的是C++1X以前有些特性变化高版本不一定向下兼容可用性强化常量nullptr传统C++:只支持NULLC++ 11:引入nullptr,此关键字类型为nullptr_t。由于不同编译器不一样的问题,为了区别于NULL一样为0或的问题,引入此关键字。能够隐式的转换为任何指针或成员指针的类型,能和他们进行比较相等或不等的比较。C++14、17:同C++11constexpr传统C++:支持constC++11:让用

2022-04-30 18:39:59 247

空空如也

空空如也

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

TA关注的人

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