| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 嵌入式 -> RT-Thread——概述与体验 -> 正文阅读 |
|
[嵌入式]RT-Thread——概述与体验 |
目录 1、RT-Thead目录结构以RT-Thread Nano的源码结构为例子: 主要涉及3个目录
1.2 核心文件以理解使用RT-Thread为目标的话,最核心的文件只有5个: src\thread.c src\timer.c src\scheduler.c src\ipc.c include\rtservice.h 这些文件的作用列表如下:
1.3 移植时涉及的文件移植RT-Thread,包含CPU部分移植和BSP部分移植 1.3.1 CPU部分CPU部分移植就是移植libcpu目录,主要涉及cpuport.c和context.xx.S 比如:libcpu\arm\contex-m3\cpuport.c和context_rvds.S,这表示Context-M3架构在RVDS或Keil工具上的移植文件
如果,RT-Thread还没支持你使用的CPU,你才需要实现这两个文件。 一般来说,对于大部分的CPU,RT-Thread都已经支持,不需要我们移植 1.3.2 BSP部分、BSP就是Board Support Package,板级支持包,就是开发板的相关文件 BSP部分主要涉及main.c board.c和rtconfig.h 比如:bsp\stm32\stm32f103-simulator目录下,包含applications\main.c、board\board.c、和rtconfig.h
1.4 内存管理RT-Thread操作系统在内存管理上,根据上层应用及系统资源的不同,有针对性地提出了不同的内存分配管理算法 总体上可以分为3类:内存堆管理和内存池管理,而内存对管理又根据具体内存设备划分为三种情况 总结起来就是: 内存堆管理:它可以分为3种,三种只能选择一种 针对小内存块的分配管理算法(小内存管理算法):src\mem.c 针对大内存块的分配管理算法:(slab管理算法):src\slab.c 针对多内存堆的分配情况(memheap管理算法):src\memheap.c 内存池管理:先从内存堆里申请空间、然后进行二次管理,对应文件src\memppool.c 注意: src\mem.c、src\slab.c、src\memheap.c这三个文件只能选择一个文件 src\mempool.c:先从堆里分配的到一块内存,把这块内存当作内存池 1.5 启动流程及main函数1.5.1 启动流程RT-Thread启动流程如下所示,在图中标出颜色的部分需要用户特别注意(黄色表示libcpu移植相关的内容,绿色部分表示板级移植相关的内容) RT-Thread启动代码统一入口为rtthread_startup(),芯片启动文件在完成必要工作(初始化时钟、配置中断向量表、初始化堆栈、初始化PC指针、调用C库函数-main最终去到C的世界)后,最终会在程序跳转市,跳转至RT-Thread的启动入口中,RT-Thread的启动流程如下; 1、全局关中断,初始化与系统相关的硬件、 2、打印系统版本信息、初始化系统内核对象(如定时器、调度器) 3、初始化用户 main线程,同时会初始化线程栈,在main线程中对各类模块依次进行初始化、 4、初始化软件定时器线程、初始化空闲线程、 5、启动调度器,系统切换到第一个线程开始执行(如mian)线程,并打开全局中断 我们习惯从main函数开始阅读源码,但是RT-Thread的主要启动流程反而不在main函数里 可以分析看到,在stm32的启动代码中,先调用SystemInit:系统初始化、比如初始化时钟,调用__main函数:重定位,比如把代码段从Flash复制到内存,然后执行$Sub$$main 第二个文件:src\components.c:执行一系列的 初始化,调用rt_application_init(初始化RTT组件包括创建SHEEL线程:因为有SHEEL线程,所以即使main函数为空,也是可以操作开发板的),调用main函数:可以写为空函数;启动调度器:rt_system_scheduler_start 整体启动流程详细可以见上图 1.5.2?移植目录结构这里不详细展开,RT-Thread的官方文档中有详细的说明 1.6 RT-Thread编程规范官方的代码风格和编程风格文档如下: documentation/contribution_guide/coding_style_cn.md · RT-Thread/rt-thread - Gitee.com 1.7 手把手教你移植RT-Thread到STM32最后在添加一个个人认为比较详细的将RT-Thread移植到STM32上的博客,本人亲测有效 |
|
嵌入式 最新文章 |
基于高精度单片机开发红外测温仪方案 |
89C51单片机与DAC0832 |
基于51单片机宠物自动投料喂食器控制系统仿 |
《痞子衡嵌入式半月刊》 第 68 期 |
多思计组实验实验七 简单模型机实验 |
CSC7720 |
启明智显分享| ESP32学习笔记参考--PWM(脉冲 |
STM32初探 |
STM32 总结 |
【STM32】CubeMX例程四---定时器中断(附工 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 20:53:41- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |