intrtthread_startup(void){rt_hw_interrupt_disable();/* 板级初始化: 需在该函数内部进行系统堆的初始化 */rt_hw_board_init();/* 打印 RT-Thread 版本信息 */rt_show_version();/* 定时器初始化 */rt_system_timer_init();/* 调度器初始化 */rt_system_scheduler_init();#ifdef RT_USING_SIG...
URC 数据:AT Server 主动发送给 AT Client 的数据,一般出现在一些特殊的情况,比如 WIFI 连接断开、TCP 接收数据等,这些情况往往需要用户做出相应操作。 3.1 AT 组件简介 AT 组件是基于 RT-Thread 系统的 AT Server 和 AT Client 的实现,组件完成 AT 命令的发送、命令格式及参数判断、命令的响应、响应数据的接收...
thread1 对象的内存空间,包括线程控制块 thread1 与栈空间 thread1_stack 都是编译时决定的,因为代码中都不 存在初始值,都统一放在未初始化数据段中。thread2 运行中用到的空间都是动态分配的,包括线 程控制块(thread2_ptr 指向的内容)和栈空间。 静态对象会占用 RAM 空间,不依赖于内存堆管理器,内存分配时间确...
RT-thread内核之对象管理系统 一、数据结构 1、对象控制块:在include/rtdef.h中定义 1/**2* Base structure of Kernel object3*/4structrt_object5{6charname[RT_NAME_MAX];/*对象名称,RT_NAME_MAX在rtconfig.h中定义*/7rt_uint8_t type;/*内核对象类型*/8rt_uint8_t flag;/*内核对象标志*/910#...
所以个人理解内核对象管理器,主要是为其他内核功能模块提供数据管理支撑,属于内核底层支持功能组件,并从设计上兼顾了可扩展、可裁剪的需求。 怎么实现的呢? RT-Thread内核对象子系统其主要核心数据结构如下: 其中rt_object_class_type枚举定义内核对象类别:
先看看 rtthread_startup: 开始分析之前先做几个说明,RT-Thread 中用的最多的是双向循环链表,而且是插入式链表,这样的链表只起链接作用,本身不携带数据,因此可以插入到各种自定义的结构体中,这些不同的结构体也能灵活的连接起来。这也是个人最喜欢的地方,对比 ucos 一个结构体一个链表的臃肿设计,RT-Thread 这个...
在RT-Thread 中,线程控制块由结构体struct rt_thread 表示,线程控制块是操作系统用于管理线程的一个数据结构,它会存放线程的一些信息,例如优先级、线程名称、线程状态等,也包含线程与线程之间连接用的链表结构,线程等待事件集合等,详细定义如下: 代码语言:javascript ...
学习RT-Thread,除了基础的应用,应该花点时间,研究下底层内核的实现方法。 RT-Thread内核,整体代码量不大,很适合研究,后期,打算在这个基础上,开发一些软件包。 之前了解了一点数据结构的知识,主要为结构体、链表。不过感觉没有真正的使用起来。 程序= 数据结构+算法。
所以个人理解内核对象管理器,主要是为其他内核功能模块提供数据管理支撑,属于内核底层支持功能组件,并从设计上兼顾了可扩展、可裁剪的需求。 怎么实现的呢? RT-Thread内核对象子系统其主要核心数据结构如下: 其中rt_object_class_type枚举定义内核对象类别:
[RT-Thread 源码分析] 1. 内存管理1 rt-thread的小内存管理是其默认的堆内存管理算法。是采用静态链表来实现的,源文件为mem.c。 1.数据结构 === struct heap_mem { /* magic and used flag */ rt_uint16_t magic; // 如果此内存块被分配了,则置0x1ea0,以此标志 /...