RT-Thread
文章平均质量分 94
邻居家的小南瓜
这个作者很懒,什么都没留下…
展开
-
组件-utest
utest组件原创 2022-11-04 16:21:27 · 2444 阅读 · 1 评论 -
组件-ulog
注:关闭使能后,断言的日志将不会被编译到 ROM 中。原创 2022-11-03 14:04:26 · 2763 阅读 · 1 评论 -
内核-内核移植
注:PRIMASK:1 bit寄存器。注:此汇编代码会设置 PendSV 异常优先级为最低优先级,并将MSP设置为SCB_VTOR(向量表放的第一个元素是sp)线程环境下,如果调用 rt_hw_context_switch() 函数,那么可以马上进行上下文切换;1)使用 MRS 指令将 PRIMASK 寄存器的值保存到 r0 寄存器里。而在中断环境下,需要等待中断处理函数完成之后才能进行切换。2)使用 “CPSID I” 指令关闭全局中断。NVIC_PENDSV_PRI:内核寄存器。原创 2022-10-22 20:34:51 · 1928 阅读 · 0 评论 -
内核1-介绍和内存分布
内核是一个操作系统的核心,是操作系统最基础也是最重要的部分。它负责管理系统的线程、线程间通信、系统时钟、中断及内存等。原创 2022-10-14 16:22:00 · 586 阅读 · 0 评论 -
I/O 设备模型-2
旧版本接收缓冲区统一为 RT_SERIAL_RB_BUFSZ ,旧版本没有发送缓冲区的设置。原创 2022-10-10 11:14:17 · 986 阅读 · 0 评论 -
组件-FinSh组件
【代码】组件-FinSh组件。原创 2022-10-08 10:57:04 · 1137 阅读 · 0 评论 -
I/O 设备模型-3
调用设备驱动层注册的control()函数,cmd为RT_DEVICE_CTRL_WDT_STOP。调用设备驱动层注册的control()函数,cmd为PWM_CMD_SET_PERIOD。调用设备驱动层注册的control()函数,cmd为PWM_CMD_SET_PULSE。调用设备驱动层注册的control()函数,cmd为PWM_CMD_SET。调用设备驱动层注册的control()函数,cmd为PWM_CMD_GET。最终会调用设备驱动层注册的control()函数。原创 2022-10-06 16:40:34 · 721 阅读 · 0 评论 -
I/O 设备模型-1
RT-Thread 提供了一套简单的 I/O 设备模型框架,它位于硬件和应用程序之间,共分成三层,从上到下分别是 I/O 设备管理层、设备驱动框架层、设备驱动层。I/O 设备管理层实现对设备驱动程序的封装。应用程序通过 I/O 设备层提供的标准接口访问底层设备,设备驱动程序的升级、更替不会对上层应用产生影响。这种方式使得设备的硬件操作相关的代码能够独立于应用程序而存在,双方只需关注各自的功能实现,从而降低了代码的耦合性、复杂性,提高了系统的可靠性。设备驱动框架层。原创 2022-09-27 13:28:02 · 1690 阅读 · 0 评论 -
Device IPC-1
该接口向 rb 指向的 ringbuffer 里写入数据块,数据块的起始地址为 ptr,数据块大小为 length,并返回写入的字节数。不过若写入时 ringbuffer 已满,该接口会继续写入剩余的数据,即用新的数据覆盖旧的数据。原创 2022-09-24 13:41:03 · 987 阅读 · 0 评论 -
Device IPC-2
pipe基于设备框架,基于ringbuffer实现?原创 2022-09-24 16:37:05 · 748 阅读 · 0 评论 -
内核4-启动流程与组件初始化
rtthread_startup函数(位于components.c)int rtthread_startup(void){ rt_hw_interrupt_disable(); //关中断 rt_hw_board_init(); //板级初始化,在该函数中初始化堆 rt_show_version(); //显示版本 rt_system_timer_init(); //系统定时器系统初始化 rt_system_scheduler_init(); /...原创 2022-08-31 14:07:47 · 681 阅读 · 0 评论 -
Rt-Thread 6-空闲线程
rt_list_isempty的原型为“int rt_list_isempty(const rt_list_t *l)”。因此,编译器有充分的理由在rt_thread_idle_excute中不更改rt_thread_defunct列表,从而将“while”循环优化为“if”循环。所以在这里添加volatile限定符。3)如果是静态线程对象,脱离对象后直接返回。关中断为什么在二处之间,而不是循环外说明。原创 2022-09-14 11:19:54 · 1097 阅读 · 0 评论 -
Rt-Thread 5-调度
【代码】Rt-Thread 5-调度。原创 2022-09-13 16:46:35 · 706 阅读 · 0 评论 -
内核6-时钟管理
软件定时器:timer线程调用回调,rt_soft_timer_list,rt_thread_timer_entry线程硬件定时器:ISR调用回调,rt_timer_list停止:原创 2022-08-20 16:48:46 · 1141 阅读 · 0 评论 -
内核5-线程
线程结构体rt_thread//线程结构体struct rt_thread{ char name[RT_NAME_MAX]; /* 线程名字 */ rt_uint8_t type; /* 对象类型 */ rt_uint8_t flags; /**< thread's flags原创 2022-09-13 16:16:09 · 1083 阅读 · 0 评论 -
内核-中断管理
1、进中断当进入中断服务程序时,该函数将被BSP调用。void rt_interrupt_enter(void){ rt_base_t level; RT_DEBUG_LOG(RT_DEBUG_IRQ, ("irq coming..., irq nest:%d\n", rt_interrupt_nest)); //打印信息 level = rt_hw_interrupt_disable(); //关中断 rt_interrupt_nest ++; //rt_inter原创 2021-04-27 14:36:49 · 785 阅读 · 0 评论 -
内核2-链表
链表结构体定义//定义双向链表节点结构体struct rt_list_node{ struct rt_list_node *next; /* 指向下一个节点 */ struct rt_list_node *prev; /* 指向前一个节点 */};typedef struct rt_list_node rt_list_t; /* 定义类型rt_l原创 2021-04-26 19:54:19 · 740 阅读 · 0 评论 -
内核 3-对象模型
rthread对象类型:线程、信号量、互斥量、事件、邮箱、消息队列、内存堆、内存池、设备、定时器、模块(通过宏可以控制是否使能相应的功能)。对象结构体rt_object定义//对象结构体struct rt_object{ char name[RT_NAME_MAX]; /* 对象名字 */ rt_uint8_t type; /* 对象类型 *....原创 2021-04-24 15:23:11 · 1222 阅读 · 0 评论 -
内核7-线程间同步
信号量控制块信号量控制块是操作系统用于管理信号量的一个数据结构,由结构体 structrt_semaphore 表示。另外一种 C 表达方式 rt_sem_t,表示的是信号量的句柄,在 C 语言中的实现是指向信号量控制块的指针。rt_semaphore 对象从 rt_ipc_object 中派生,由 IPC 容器所管理,信号量的最大值是 65535。struct rt_object{ char name[RT_NAME_MAX]; /*原创 2021-04-21 09:16:38 · 1364 阅读 · 0 评论