rtthread内核
文章平均质量分 60
hello_world^_^
这个作者很懒,什么都没留下…
展开
-
RT-Thread底层汇编及在arm与riscv上的差异
一、内核寄存器SCB_VTOR 0xE000ED08 向量表偏移寄存器ICSR 0xE000ED04 中断控制状态寄存器PENDSVSET_BIT 0x10000000 值来触发PendSV异常SHPR3 0xE000ED20 系统优先级寄存器PENDSV_PRI_LOWEST 0xFFFF0000 PendSV和SysTick优先级值二、三个中断2.1 全局中断/* * rt_base_t rt_hw_interrupt_disable(); */ .global rt_hw原创 2022-05-21 16:10:04 · 1438 阅读 · 0 评论 -
【rtthread内核系列】第五篇:内存分配
一、内存分配概念计算机系统中,变量存放在ram中,只有在使用时才将它调入cpu运行,rtthread提供了两类内存分配方法:动态内存堆静态内存池。动态内存堆根据系统资源的情况有3种分配算法:小内存管理算法:一般用于内存小于2M的设备slab管理算法:近似多内存池的快速算法。memheap算法:适用于存在多个内存堆的系统。虽然采用的内存分配算法,但提供给应用程序的api完全相同。二、动态内存分配api//内存堆初始化:在相同初始化时执行。 这个函数会把参数begin_addr, e原创 2021-05-12 21:38:36 · 999 阅读 · 0 评论 -
【rtthread内核系列】第四篇:线程间同步
一、线程间同步的概念rtthread通过线程间同步建立线程间的执行顺序,多个线程访问的同一个内存叫做临界区。rtthread提供的同步的工具信号量互斥量事件集二、信号量2.1 信号量概念rtthread将信号量抽象成rt_semaphore.struct rt_semaphore{ struct rt_ipc_object parent; /* 继 承 自 ipc_object 类 */ rt_uint16_t value; /* 信 号 量 的 值 */};/*原创 2021-05-12 21:35:59 · 495 阅读 · 0 评论 -
【rtthread内核系列】第三篇:线程间通信
一、线程间通信在裸机中使用全局变量进行功能间的通信,rtthread提供了三个工具用于线程间的通信。邮箱:消息队列信号二、邮箱2.1 邮箱概念邮箱中的每一份邮件内容为4字节,在32位系统中刚好为一个指针的大小。rtthread将邮箱抽象成rt_mailbox。struct rt_mailbox{ struct rt_ipc_object parent; rt_uint32_t* msg_pool; /* 邮 箱 缓 冲 区 的 开 始 地 址 */ rt_uin原创 2021-05-12 21:33:03 · 1412 阅读 · 0 评论 -
【rtthread内核系列】第二篇:中断
一、中断的概念1.1 rtthread中断处理过程rtthread将中断分为三个过程:前导程序、中断服务程序、后续程序。前导程序:保存cpu中断现场,m3核该部分由硬件完成,关于保存现场的寄存器有 PSR、 PC、 LR、 R12、 R3-R0。之后通知内核处理中断。中断服务程序:在中断触发后要执行的用户操作。后续程序:通知内核中断处理完成,恢复cpu现场。1.2 中断栈rtthread会在中断的前期处理中切换栈指针到预先留出的中断栈空间,等中断退出时恢复用户的栈指针。1.3 中断低半部原创 2021-05-12 21:30:01 · 1062 阅读 · 1 评论 -
【rtthread内核系列】第一篇:定时器
一、定时器概念1.1 时钟节拍时钟节拍是系统的最小时间单位,宏RT_TICK_PER_SECOND为100时,一个时钟节拍的时间为10ms,时钟节拍也是线程时间片的最小单位。在stm32中,时钟节拍通过systick中断实现,在每次systick中断,全局变量rt_tick加1。void SysTick_Handler(void){ /* 进 入 中 断 */ rt_interrupt_enter(); …… rt_tick_increase(); /* 退原创 2021-05-12 21:27:58 · 818 阅读 · 0 评论 -
【rtthread内核系列】第零篇:线程
一、线程1.1 线程的概念RT-Thread 的线程调度器是抢占式的,保证最高优先级的线程执行。有一下几种抢占的情形:当一个线程使比它优先级高的线程满足条件,高优先级线程会立刻执行。如果这个过程发生在中断中,中断结束后高优先级线程立刻执行。1.2 关于线程的知识点1.2.1 线程栈当切换线程时,当前线程上下文会被保存在线程栈中,恢复运行时从线程栈恢复上下文。线程栈大小确定方法:先分配1k,运行起来后通过finsh输入list_thread查看线程栈的深度,在此基础上加上余量确定线程栈原创 2021-05-12 21:26:06 · 1061 阅读 · 0 评论