系列文章目录
内核框架介绍
内核资源占用最小为3KB ROM和1.2KB RAM
线程调度:基于优先级的全抢占式多线程调度,只有中断处理函数、调度器锁定和禁止中断的代码不可抢占;0代表最高优先级(和stm32的中断优先级排布一样,0最高),最低优先级给IDLE线程;相同优先级采用时间片轮转调度;线程数目只受硬件内存的限制;调度器切换时,寻找就绪态最高优先级的线程所花时间一样。
时钟管理:
像之前学习FreeRTOS一样,分为软件定时器和硬件定时器,其中分为单次定时器和周期定时器
一些相关介绍可以参考: FreeRTOS实时操作系统(十四)软件定时器
线程间同步:(线程同同步指的是让线程之间有序协作执行,防止竞争冒险的出现)信号量与互斥量完成线程同步;互斥量采用优先级继承的方式(比如一个高等优先级任务阻塞,在等待一个低等优先级任务的互斥量释放,但是为了防止中等优先级任务一直抢占CPU资源,导致无法使低等优先级任务优先释放互斥量,会临时提高低等任务的优先级,这也是常说的优先级翻转问题)
线程间通信:支持邮箱和消息队列等通信机制,邮箱中一封邮件的长度固定为4字节,消息队列能接收不固定长度的消息,并缓存在内存空间中。邮箱效率更高。这些方法可以在中断中发送,通信支持优先级或先进先出获取。
内存管理:支持静态内存池管理及动态内存堆管理。静态内存分配的内存块的时间是一样的,里面为空(用光时),申请内存块的线程会挂起阻塞,可以立刻返回,也可以等待一段时间,可以设置(像FreeRTOS),一直等到其他线程将内存块释放时再唤醒。
动态内存堆管理:提供了面向小内存系统的管理算法和大内存的SLAB算法,还有memheap,对不连续内存块进行操作(memheap在FreeRTOS也有)
IO设备:像PIN、IIC、USART这些,都搞成像LINUX的设备注册,可以通过统一的API访问。事件触发的时候传递给上层程序了。
内核启动流程
如何在RTT studio中全局搜索(ctrl+H):(直接ctrl+F是当前文件下搜索)
查看快捷键:也可在“窗口-首选项-常规-键”中修改。
启动流程:先通过在汇编文件中创建好C语言执行的环境,之后对rtthread_startup()函数进行统一的启动入口,之后进去用户入口main(),这里汇编是通过开发工具GCC的entry分支进去的
汇编启动文件:位置在libraries下
在rt_application_init()里面调用到了mian函数:
默认线程
对于标准版本的RT-Thread来说:
对于默认线程有这些:
tshell就是串口显示的这个终端,命令行解释器
tidle是空闲线程
timer是一个用作软件定时器的线程
main是主线程