
嵌入式实时操作系统的设计与开发
文章平均质量分 79
饼干饼干圆又圆
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
RTT学习
SMP:对称多处理(Symmetrical Multi-Processiong)简称SMP,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。系统上电后,每个CPU都在ROM中的代码控制下独自运行,但是只有主处理器(简称CPU0)跳转到RTT的初始化入口,而其它处理器(次级CPU)会暂停在某个状态下,等待CPU0将它们唤醒。CPU0完成RTT的全局初始化过程,包括外设初始化,中断控制器的中断分发部分初始化、全局变量的初始化、全局内核对象的创建等等。原创 2024-08-16 13:23:48 · 1038 阅读 · 0 评论 -
RTT学习
在进入新的休眠模式,大部分时钟源会被停止,如果外设不支持休眠的冻结功能,那么从休眠唤醒的时候,外设的时钟就需要重新配置外设。绝大部分的嵌入式系统都包含一些I/O(输入/输出)设备,例如仪器上的数据显示屏、工业设备上的串口通信,数据采集设备上用于保存数据的Flash或SD卡,以及网络设备的以太网接口等,都是嵌入式系统中容易找到的I/O设备例子。外设或应用通过投票机制对所需的功耗模式进行投票,当系统空闲时,根据投票数决策出合适的功耗模式,调用抽象接口,控制芯片进入低功耗状态,从而降低系统功耗。原创 2024-08-16 08:58:11 · 899 阅读 · 0 评论 -
RTT学习
在动态创建线程和初始化线程的时候,会使用到内部的线程初始化函数_rt_thread_init(),_rt_thread_init()函数会调用栈初始化函数rt_hw_stack_init(),在栈初始化函数里会手动构造一个上下文内容,这个上下文内容会被作为每个线程第一次执行的初始值。因此,我们会编译得到一个稍微冗余的固件。默认使用的libc,提供了printf、scanf等很多标准库函数,但是这些库函数相对较大,而且很可能一些复杂的可能,我们在项目中并没有使用到,这样会造成代码体积的增大。原创 2024-08-12 14:46:03 · 1255 阅读 · 0 评论 -
RTT DEMO学习
同理的,如果内存池是空的,里面没有数据,接收邮件里面的 RT_WAITING_FOREVER 会使得nrf24l01_thread 线程阻塞,并挂起,然后 MCU 就会去干别的事情去了,在 ds18b20_thread 线程中采集温度,并申请内存块塞数据进去,内存块一旦有数据,就会发邮箱,另外一边一有邮箱收到了,就又开始工作了。我们创建两个线程去工作,onenet_mqtt_init_thread线程用于初始化 MQTT 客户端,onenet_upload_data_thread 线程去上传数据给云。原创 2024-08-11 10:58:18 · 1230 阅读 · 0 评论 -
RT-Thread简介
RT-Thread是一款完全由国内团队开发维护的嵌入式实时操作系统(RTOS),具有完全的自主知识产权。经过16个年头的沉淀,伴随着物联网的兴起,它正演变成一个功能强大、组件丰富的物联网操作系统。RT-Thread,全称是Real Time-Thread,顾名思义,它是一个嵌入式实时多线程操作系统,基本属性之一是支持多任务,允许多个任务同时运行并不意味着处理器在同一时刻真地执行了多个任务。事实上,一个处理器核心在某一时刻只能运行一个任务。原创 2024-01-07 11:31:57 · 3484 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发——移植内核
什么是移植内核?移植内核就是将已在某一特定CPU(或SOC芯片)上运行的RTOS内核在另一CPU上运行起来。移植大部分是和,需要针对具体CPU或芯片进行有区别的代码编写。aCoral的移植包括两个部分:一是硬件抽象层(Hardware Abstraction Layer,HAL)移植,二是项目移植。硬件抽象层(HAL)移植是针对不同目标板改写相关代码。不同开发板的硬件资源不一样,具体体现在不同架构处理器的指令集不一样(ARM与RISC);原创 2024-01-07 09:04:54 · 1077 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发——启动内核
由于将Flash中的代码复制到RAM中的操作会带来一定的时间开销,因此,对于此类系统启动时无须BootLoader,而直接在NORFLASH或ROM等可以做主存的非易失性存储介质中运行,以达到较快的启动速度。从上面可以看出,在PC上,BIOS满足上面的特性,因为PC启动时就是从BIOS的地址处启动的,然后BIOS的代码读取硬盘的第一扇区的数据,即引导程序,然后将控制器交给引导程序,然后将控制器交给引导程序,再由引导程序加载操作系统内核代码运行。这样镜像文件的入口点就是__ENTRY。原创 2024-01-06 10:12:17 · 1371 阅读 · 0 评论 -
移植内核(学习)
对于项目移植,由于不同开发环境(如Windows下的ADS、KEIL、IAR、Linux下的MAKEFILE)的编译器、汇编器、链接器不一样,所以即使用C语言编写的代码,也存在兼容性问题(但基本兼容,只是针对一些扩展性能不兼容,如inline,增加段相关操作等),汇编就更加不一样了,因此需要针对不同开发环境编写专门的汇编代码,同时实现很小量的C语言的扩展属性。因此,移植的过程主要是实现硬件抽象层移植,此外,只需要修改部分规则即可完成项目移植。相同架构处理器的不同系列产品,其寄存器资源也不一样。原创 2023-10-24 16:15:36 · 209 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (启动内核学习)
例如,大家知道程序最后运行必须要有随机可读写存储器来存储变量,且速度要快,这导致了RAM的产生,但是RAM价格昂贵,于是又导致了SDRAM的产生,SDRAM和RAM的区别就是它是靠电容的值来保存0,1信息,时间一长就会丢失数据,故需要周期性刷新,这个在SDRAM控制器芯片的控制下能很好解决,且不太影响性能,但是它的速度比RAM低一些,复杂一些,但是价格低很多,容量可以做到很大,故是一种很好的存储器,因此目前无论是嵌入式还是PC设备都广泛使用到了SDRAM。虽然SDRAM解决了可读写和速度问题。原创 2023-10-24 14:02:24 · 424 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(消息)
aCoral并没有采用数组之间存储消息指针的经典实现形式,而是在消息上又包装了一层结构,这样的实现是为了功能上的扩展,只要稍作改进,就可以实现消息功能的进一步增加,如消息最大生存时间,一次唤醒多个等待线程等功能。消息发送时,首先将包含消息的消息结构挂到消息容器的消息链上,然后判断是否有等待的线程,如果有的话,则唤醒最高优先级的线程。这里的消息容器,只是一个线程间的通信结构acoral_msgctr_t,是消息的存储容器,一个消息容器可以通过它的消息链指针成员,挂载多条消息结构。原创 2023-10-24 10:40:43 · 483 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (邮箱)
邮箱机制依赖于事件控制块acoral_evt_t,acoral_evt_t的Data成员就是用来挂载线程间传递的消息,当前版本aCoral的Data只支持存放一条信息。前面叙述了aCoral的互斥、同步机制,在实际的嵌入式应用软件开发过程中,仅有这两种机制还不够,线程之间、线程与中断服务子程序之间还需要通信机制。线程2在同步点从邮箱中接收消息,如果线程1此时还没有执行到同步点,则邮箱中是不会有消息的,此时线程2会将自己挂起;所谓通信,是指线程之间或者线程与中断服务子程序之间的信息交互。原创 2023-10-24 09:35:09 · 715 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(信号量学习)
针对上述情况,有三种类型的信号量,按照功能来分,可以分为线程对临界资源互斥访问的互斥信号量、用于线程间同步的信号量、控制系统中临界资源的多个实例使用的计数信号量。当信号量用来实现同步时,其初始值为0,如一个线程正等待某个I/O操作,当该I/O操作完成后,中断服务程序发出信号量,该线程得到信号量后才能继续往下执行。用于互斥的信号量初始值在创建时设置为1,此时1-semNum=0,是小于等于0的,表明当前没有线程获取该信号量。,但在具体实现时,并不是和大家想象的数字一样,如1代表有1个资源,2代表有2个资源…原创 2023-10-24 08:59:08 · 835 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(互斥量学习)
一个无论多么小的系统,都会有大系统的缩影,就像俗话说“麻雀虽小五脏俱全”。嵌入式实时操作系统中除了基本调度机制(创建线程、调度线程、挂起线程等),事件处理机制(中断管理、时钟管理)、内存管理机制外,也有一般操作所具有的线程交互机制,如 互斥机制、同步机制、通信机制等。并发线程可共享系统中的各类资源,如全局变量、表格、队列、打印机等,这些资源被称为临界资源,当诸线程在访问这些临界资源时,必须互斥访问。互斥,顾名思义,大家都要相互排斥,因此在同一个时刻,只能有一个任务拥有互斥量。原创 2023-10-23 21:31:11 · 318 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(任意大小的内存管理)
任意大小的内存管理是根据用户需要为其分配内存,即用户需要多大内存就通过acoral_malloc2()为之分配多大内存,同时每块分配出去的内存前面都有一个控制块,控制块里记录了该块内存的大小。同时未分配出去的内存也有一个控制块,寻找空闲内存块要进行遍历。任意大小内存的管理机制是:“一分为二”,将一块分为两块,一块分配给用户使用,剩下一块留给后续使用,同时改变大小标志。可见用户不断调用acoral_malloc2()会产生很多内存碎片。原创 2023-10-22 10:44:27 · 177 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(内存资源池存储管理)
分配线程空间时提到:线程分配空间函数acoral_alloc_thread()通过调用acoral_get_res()为线程的资源控制块分配空间“return (acoral_thread_t *)acoral_get_res(&acoral_thread_pool_ctrl);每个资源池有一个ID,当资源池空闲时,ID的高16位表示该资源对象在资源池的编号,分配后表示该资源的ID,next_id为空闲链表指针,空闲时该16位指向下一个空闲的资源对象编号,分配完后,就没有意义了,属于资源ID的一部分。原创 2023-10-22 10:10:42 · 379 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (伙伴系统内存分配)
如果系统中剩余的基本内存块小于申请的内存对应的内存块的数量,则不分配。如果申请的内存大于最高层的内存块的大小,则越界了,也不分配。例如,基本内存块的大小为1KB,而申请的内存为5KB,则分配8KB,则通过函数返回3,即所对应的逻辑层为3。传入的参数是用户需要的内存大小,这个函数将需要内存的大小转换成可以分配满足这个大小的内存块所对应的逻辑层。当某一内存块被分配完后,向更上一层申请内存块。基本块大小的,则取大于申请的内存的最小2。传入的参数是回收内存的起始地址。原创 2023-10-21 14:14:58 · 178 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (第一级内存管理算法)
根据前面的描述,只要根据第m层的free_cur[m]找出空闲位图块对应的标号i,然后读取bitmap[m][i]的值,再判断bitmap[m][i]首先出现“1”的那一位,并找到该位对应的内存块序号,便可确定该内存块对应的基本内存块标号,最后得到相应物理地址返回给用户,并将刚才的“1”置为0,如果此时空闲状态位图块变为了0(32位每一位都为0),更改free_cur[m]=free_list[m][i],由此可见,根据空闲内存块链表数组就能快速找到空闲内存块,而对链表的维护的复杂度也是O(1)。原创 2023-10-20 11:25:21 · 282 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (内存管理机制简介)
从1946年的第一台计算机到当代最先进的超级计算机都没有跳出冯.诺依曼体系结构,即由运算器、控制器、存储器、输入/输出设备为基础的计算机体系结构。计算机运行过程中,把要执行的程序和处理的数据首先存入存储器,计算机指向程序时,将按顺序从主存储器中取出指令并执行。这些指令就是抽象出来的基本运算单元,如加/减法、读写存储器等。后来随着中央处理器的飞速发展,存储器的读取速度限制了整体的效率,于是就出现了内存与外存的分类。内存管理,就是把物理的存储资源用一定的规则和手段管理起来,以供给操作系统和应用程序使用。原创 2023-10-19 10:44:44 · 376 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (中断管理)
根据ARM的中断机制,0x00到0x1C存放的是8条跳转指令,其中0x00处存放的是“LDR pc,VECTOR_TABLE+0”,意味着当系统复位时,pc将跳转到0x00(这地方是一条四字节的跳转指令),此时,pc值将变成“VECTOR_TABLE+0”,“VECTOR_TABLE”是ARM处理器中断向量表的起始地址。中断请求IRQ被中断控制器汇集成中断向量(Interrupt Vector),每个中断向量对应一个中断服务程序ISR,中断向量存放了ISRs的入口地址或ISRs的第一条指令。原创 2023-10-19 08:39:19 · 213 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (线程操作学习)
在aCoral操作系统中,线程退出采用了和Linux一样的方式,线程函数不用死等或显示调用退出相关函数,也就是说用户不用担心函数执行完后的事情。uc/OS II任务函数与退出如果线程处于挂起状态,则需要从相关链表中取下。将线程设置为退出状态,如果是当前线程,则只能是EXIT状态,表明还不能释放该线程的资源,如TCB,堆栈,因为仅管线程要退出了,还没有走到HAL_SWITCH_TO函数,该函数还需要堆栈。原创 2023-10-18 20:53:41 · 239 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(调度线程学习)
线程的调度分为两种:主动调度、被动调度。调度的本质就是从就绪队列中找到最高优先级的线程来执行。原创 2023-10-18 13:52:13 · 217 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(调度机制学习)
HAL_STACK_INIT是与硬件相关的函数,不同的处理器有不同的寄存器[寄存器个数、寄存器功能分配(程序指针、程序当前状态寄存器)、连接寄存器、通用寄存器等],这些寄存器体现了当前线程的运行环境**,如果当前线程被其中断或线程所抢占**,将会发生上下文切换。创建线程需要做的第一项工作是为该线程分配内存空间,线程是通过tcb描述的,为线程分配内存空间就是为TCB分配空间,其返回值是刚分配的TCB的指针。个基本内存块的大小,故会分配32KB,32KB包含32个资源对象,故每个资源池的对象的个数更改为32。原创 2023-10-18 09:42:13 · 193 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(调度策略学习)
将调度分为两层,上层为策略,下层为机制,并且采用策略与机制分离的设计原则,调度策略就是如何确定线程的CPU、优先级prio等参数,线程是按照FIFO,还是分时策略来调度。对某些线程要特殊调度处理,然后根据相应操作来初始化线程。原创 2023-10-17 16:12:46 · 697 阅读 · 1 评论 -
嵌入式实时操作系统的设计与开发(aCoral线程学习)
真正的RTOS,基本上没有做到进程,只是停留在多线程,因为多进程要解决很多问题,且需要硬件支持,这样就使得系统复杂了,从而就可能影响系统实时性。线程之间是共享地址的,也就是说当前线程的地址相对于其它线程的地址是可见的,如果修改了地址的内容,其它线程是可以知道,并且能访问的。如果create_task对应的是创建线程的接口,则test输出2.如果是创建进程的接口,则test输出1.原创 2023-10-17 10:41:35 · 375 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(中断和中断服务学习)
中断是一种硬件机制,它由硬件实现的,所以不是任何芯片都可以使用中断,只有那些实现了中断机制的芯片,才能使用中断。对于软件人员来说,其工作主要在中断硬件机制基础上实现对中断的响应,也就是通常所说的中断服务,再进一步,就是设计出中断响应服务的抽象层,并通过一定的封装,将中断与中断服务通过中断号的概念结合起来。中断服务为一段代码或一段程序,该程序的功能就是在对应中断发生时,告诉CPU应该做什么。原创 2023-10-16 09:50:45 · 267 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (前后台系统)
因此,前后台系统需要重点考虑的是中断的现场保护和恢复、中断嵌套、中断处理过程与主程序的协调等问题。由于中断时要付出额外的开销(现场保护和恢复),因此在有较高吞吐量要求的场合,中断的事务处理是不合适的。这种系统的一个极端情况是,后台是一个简单的循环不做任何事情,所有其它工作都是由中断服务程序(ISRs)完成的,这是多任务系统的一种简单形式。在前后台系统中,某些情况下前台的中断级事务与后台的任务需要进行信息或数据的交换,简称前后台交互。因此,前台处理的是中断级别的事务,而后台处理的是非实时程序。原创 2023-10-15 15:18:58 · 670 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发 (启动过程学习)
在ARM中用户模式与系统模式使用的是相同的寄存器,系统模式与用户模式共用堆栈。原创 2023-10-15 14:33:58 · 297 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(轮询系统学习)
轮询系统具有以下工作特点:系统完成一个轮询的时间取决于循环中需要执行的函数个数。此外,轮询的次序是静态固定的,在运行时不能进行动态调整。原创 2023-10-15 09:08:47 · 454 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发(概述学习)
此外,随着嵌入式软件规模的扩大,由于模块间依赖严重,整体结构的RTOS在可剪裁性、可扩展性、可移植性、可重用性、可维护性等方面的缺陷越来越明显,严重制约了其应用。更关键的是,随着嵌入式系统复杂性的增加,系统中需要管理的资源越来越多,如存储器、外设、网络协议栈、多任务、多处理器等。这时,仅用轮询系统或前后台系统实现的嵌入式系统很难满足用户对功能和性能的要求。针对轮询系统的不足,工程师们提出了前后台系统:后台系统与轮询系统一样是顺序执行的,只有一个main程序,程序功能的实现是依靠死循环来实现的;原创 2023-10-14 10:19:40 · 300 阅读 · 0 评论 -
ARM架构过程调用标准AAPCS(学习)
返回值通过R0传递。再看看LR如何使用的呢,m=sum(1,2);的下一条语句的地址是0x8000536,进入sum子函数后,这个地址被保存到了LR中(第二张图),LR的实际保存的是0x8000537,这是因为LR最低位置1表示是thumb状态。AAPCS是ARM架构的处理器规定的一些标准。原创 2023-09-18 06:04:05 · 425 阅读 · 0 评论 -
内存管理机制
开始的时候,系统会根据需要为每一类资源控制块(如TCB)分配一些资源池,一旦资源池的资源用完时,可以重新申请一个资源池,然后挂载到空闲资源池链表上。每个资源池对应一个Pool结构,这个结构有两个重要的指针base_adr和res_free,分别用来指向资源对象数组的基址和空闲资源对象,每个资源对象对应一个资源控制块,如线程控制块TCB。,内存池中内存块的分配和回收是基于第一级内存管理系统的,因为内存池中的内存块时由第一级内存管理的。为了实现资源池的管理,aCoral定义了资源对象。原创 2023-09-13 20:56:22 · 264 阅读 · 0 评论 -
线程退出学习
aCoral操作系统中,采用了和Linux一样的方式退出线程,线程函数不用死等货显示调用退出相关函数,也就是说用户不用担心函数执行完后的事情,因为aCoral操作系统帮你做了线程退出相关函数,当线程代码执行完后,系统会隐式调用acoral_thread_exit()函数进行线程退出相关的处理。原创 2023-09-09 09:25:03 · 216 阅读 · 0 评论 -
周期线程学习
【代码】周期线程学习。原创 2023-09-04 11:23:14 · 118 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发
接下来每当定时器产生一个Tick,Tick处理函数aCoral_Ticks_entry()的time_delay_deal()需要对时间等待链中线程的剩余等待时间进行“减1”操作,如果某个线程的剩余等待时间被减到了0,则将该线程从等待队列中移出,挂载到就绪队列,通过acoral_sched()触发重调度。当采用查分时间等待链后,每当时钟中断产生一个Tick,只需对队列头部结点进行“减1”操作,当减到0时,就将其从等待链中取下,后续结点将成为新的头部,并且被激活。再修改结点C的值即可(10-7)。原创 2023-08-25 10:51:48 · 897 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发New(十)
描述线程优先级时,采用的是优先级队列,每个优先级是一个链表,因此改变优先级不是简单地将线程TCB的prio变量更改,最终要通过thread_change_prio()实现将线程挂到要设置的优先级的链表上去。系统启动后,晶体振荡器为系统产生稳定的Ticks,也成为心跳,Tick是系统的时基,也是系统中最小的时间单位,Tick的大小可以根据晶体振荡器的精度和用户的需求自行设置。当多个线程互斥地访问某一共享资源的时候,可能导致优先级反转,优先级反转将造成实时调度算法的不确定性,进而影响系统实时性的确保。原创 2023-06-27 15:54:34 · 162 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发New(九)
中断发生前,处理器是工作在系统模式/用户模式,中断发生后,处理器自动切换到中断模式(IRQ),而不同模式下寄存器分配及使用是不一样的,在该情况下,内核通过acoral_real_intr_sched()触发重调度,此时任务切换是由HAL_INTR_CTX_SWITCH完成。否则,进入新的线程,相当于中断被终止了,没法复原中断,就比如说中断模式下的堆栈,因为中断没有完全执行完,中断的堆栈没有回收。刚进入中断时,将旧的线程的上下文环境保存到中断的堆栈中,而在线程切换时从中断模式栈顶复制环境到旧的线程的堆栈。原创 2023-06-27 11:20:27 · 172 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发New(八)
例如,伙伴算法设定基本内存块的大小为1KB,资源的大小为1KB,用户一个资源池包含20个资源,这样计算下来需要分配1x20=20KB的空间,而由于伙伴系统只能分配2。创建线程需要做的第一项工作就是为该线程分配内存空间,线程是通过TCB描述的,为该线程分配内存空间就是为TCB分配内存空间,其返回值是刚分配的TCB的指针。资源池管理的资源内存是从第一级内存系统(伙伴系统)分配的,为了最大限度使用内存,减少内存碎片,对象的个数,最大值、可分配内存等都是通过计算后由用户指定的。原创 2023-06-26 21:28:57 · 245 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发New(七)
当用户向根据某种调度策略创建线程时,须根据TCB的policy成员值从策略控制块链表中查找到相应的结点,将信息取出赋值给TCB相应的成员。若要在aCoral中扩展新的调度策略并且生效,须进行注册,只有注册后,用户才能通过此策略创建特定类型的线程。原创 2023-06-26 09:08:23 · 144 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发New(六)
aCoral的优先级与数字大小成反比,即:数字越大,优先级越低。10xff11024000acoral_list_t主要用来将线程结构挂到相应链表队列,它是一个双向链表。以就绪队列ready为例,当用户调用了acoral_rdy_thread或acoral_resume_thread接口时,就会将线程挂到就绪队列acoral_ready_queue上,也就是将就绪队列ready成员挂到这个链表上。这种方式的优点是:可以用相同的数据处理方式来描述所有双向链表,不用再单独为各个链表编写各种函数。原创 2023-06-25 16:00:41 · 375 阅读 · 0 评论 -
嵌入式实时操作系统的设计与开发New(五)
内核启动完成后,若用户要创建某一线程,将调用函数函数acoral_get_free_pool(),从空闲资源池中获取一空闲内存,并获取其ID号,将申请到的内存空间供该线程使用。空闲内存池ID由aCoral内存管理模块在初始化分配内存时,根据当前内存块数而定。定义了6种资源类型:线程型、事件型、时钟型、驱动型…如果资源为线程,其类型Type为0.由于线程控制块是一种资源,采用资源池的内存管理方式。原创 2023-06-25 11:22:18 · 128 阅读 · 0 评论