RT-Thread学习(二)RTT内核框架介绍

系列文章目录



内核框架介绍

在这里插入图片描述
内核资源占用最小为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是主线程
在这里插入图片描述

  • 22
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RT-Thread作品秀】基于RTT的可拓展遥控小车作者:李泽彬 概述近年来,随着信息技术的不断发展,有越来越多的小朋友们开始学习信息技术,开始学习编程。编程需要一个良好的平台,降低儿童的入门门槛,同时也要有足够的吸引力,能够吸引儿童进行创作,最后需要有足够的大的平台,能尽可能的实现儿童的各种类型的创意。基于以上的需求,我设计了一套基于RTT ART-pi的可拓展遥控小车的方案。首先RTT ART-pi是RTT团队开发的开源硬件平台,RT-Thread团队为其搭配了丰富的SDK包,极大的降低了上手难度。其次,对于儿童来说,遥控车,永远是一个极富吸引力的平台,同时,遥控车的可拓展性也很强,能够满足儿童不同的创意。 开发环境硬件:ART-Pi H750 XB RT-Thread版本:RT-Thread 4.0.3 开发工具及版本:RT-Thread Stduio RT-Thread使用情况概述内核部分:调度器,信号量,消息队列。 调度器:创建多个线程来实现不同的工作。 信号量:用来同步线程。 消息队列:用来实现线程之间传递的数据。 硬件框架,主控采用了基于STM32H750的ART-Pi开发板,为了实现上述方案,我设计了一款拓展版。首先拓展板集成了art-pi接口,能够接入ART-Pi平台。其次,为了接入更多的开源设备,我设计了Arduino接口,能够方便的接入各类Arduino模块,让小车的可拓展性进一步提升。驱动方面,采用了两颗TB6612fng,体积小巧。遥控采用了开源的SONY PS2遥控手柄。 软件框架说明软件模块说明Led_thread_entry: led线程,用于调度板载led实现500ms翻转 oled_thread_entry: OLED刷新线程,用于刷新OLED key_thread_entry:按键处理线程,用于按键处理 Scan10ms_thread_entry:10ms扫描线程,用于每隔10ms对按键、PS2遥控器进行扫描 PS2_thread_entry:PS2手柄处理线程,用于处理PS2手柄得指令 PS2_Anolog_thread_entry:手柄模拟杆接收处理线程,用于处理模拟杆信息 演示效果比赛感悟上得来终觉浅,绝知此事要躬行。陆游的这首诗,完美的诠释了我在这次比赛中的收获. 我现在是一名信息管理与信息系统专业得大二学生,在疫情在家期间,第一次接触到了RT-Thread,了解到RTOS得相关概念。我通过RT-Thread文档助手进行了理论学习,了解了线程、信号量、消息队列等基本得概念。但是始终没有对RTOS有一个全面得了解。就是感觉都懂,但却有不懂这样迷茫得概念。 通过这次活动,我把最近所学得知识进行了实践,把线程调度、信号量、消息队列等理论知识进行了实践。 最后,还是要感谢活动主办方,提供了这个良好得平台,让我能够在这个平台上,学习相关的知识,发挥自己的创意。
RT-Thread作品秀】基于RT-Thread的姿态解算控制平台设计作者:黄国盛 概述是一个姿态解算算法验证平台以及控制算法验证平台 实现步骤: 使用CubeMax HAL库开发; 使用Python project_generator生成工程; 精简RTT Master内核并加入C++支持; 配置调试接口; 构建C/C++混合编程框架; 硬件IIC驱动GY-86传感器驱动; MATLAB设计IIR Butterworth四阶低通滤波器; 传感器校准; Mahony互补滤波算法 实现姿态解算; 加入mavlink/私有协议、UDP/USB上传数据到PC; 通过MATLAB/STM32验证和比较各种算法; 搭建单轴单桨一维角度控制平台; …… 开发环境硬件: 碳纤管碳纤桨电机座、电机电调电源、ART_Pi、GY86、按键模块、硅胶线…… RT-Thread版本: Master 4.0.3 开发工具及版本: STM32CubeMX 6.0.1、IARforARM8.32.1、BeyondCompare4、MATLAB R2019b、VSCode、SmartGit20.1.5、匿名飞控地面站-0512…… RT-Thread使用情况概述Pin、serial、cplusplus、time、finsh 硬件框架ART_Pi、GY86、按键模块、电调…… 软件框架说明C/C++混合编程,进程和Loop Schedule结合 软件模块说明核心部分:关于GY86的驱动以及姿态解算的Mahony 演示效果演示视频: 比赛感悟4/11/2020Will_Watson 关于AHRS,卡尔曼滤波或互补滤波理解起来 简单但实施难度较大因为很多参数有待测定; 发现各开源项目用的最多的是Mahony算法,关于它的PI部分的本质着实难以理解; 当发现BP神经网络逼近好像可以和卡尔曼滤波一样,就当成滤波器,而且它还可以是一个逼近式的滤波器,免不了一番测试比较; 而后查看Madgwick原文中提到“梯度下降法”,瞬间明白了它的根源和本质; 当学习BP神经网络逼近的时候的思考流程如下: 逼近的需求来源是什么?可能是为了预测系统下一个输出,为了做前馈控制? 预测 ——> 观测器 ——> 逼近式滤波器??? 神经逼近网络的特性有哪些?不具有长时记忆,短时记忆即可以说只具有最近时刻原系统的逼近特性; 尝试检测滤波特性,从这个角度理解逼近网络也是一个不断修正的预估观测器或者说卡尔曼滤波器 从执行流程/滤波效果上 分析一维卡尔曼滤波 和 NNI-BP逼近一维非线性系统的 区别: 卡尔曼滤波流程:先验估计值——>先验估计方差——>依据各方差融合传感器数据做后验估计——>更新后验估计方差; NNI-BP逼近流程: 由网络前状态和新输入直接计算输出——>与原系统输出比较修正网络状态(是为了下一次直接获得预估输出); 注:把原系统输出当成需滤波数据;把神经网络输出当成滤波后数据 卡尔曼滤波没有阶数的概念,而NNI-BP逼近的滤波特性具有一定延迟 卡尔曼滤波器的主要控制参数(基于现实过程噪声和观测噪声)不可控,转移矩阵协方差矩阵需测得; NNI-BP逼近 的主要 控制参数(学习速率和动量因子)可控 即滤波效果可调节,逼近系统特性; 也有一部分“内闭环软拟硬输入输出”思想 当然算法的表现依然可以看起来就是加减乘除那么简单,双重卡尔曼看起来和做起来可能没那么友好;

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值