0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

请教一下bsp如何适配到RT-Thread上呢?

冬至子 来源:张世争 作者:张世争 2023-08-01 16:10 次阅读

前言

前面准备了 RT-Thread qemu mps2-an385 bsp 制作相关的环境与相关文件,本篇开始讲解 bsp 如何适配到 RT-Thread

CPU 部分已经适配好了,也就是通过 使能 ARCH_ARM_CORTEX_M3 ,来使能 rt-thread/libcpu/arm/cortex-m3,这部分不需要改动

定时器部分:systick 部分,这部分需要配置,mps2-an385 系统时钟应该是 25MHz

RT-Thread 启动入口的执行, 在使用 gcc 时,入口函数为 :entry

mps2-an385 MCU 上电,第一次执行的是 Reset_Handler,可以查看 链接脚本 qemu-mps2-arm/drivers/CMSDK_CM3/Source/GCC/gcc_arm.ld ENTRY(Reset_Handler)

创建 main.c

创建 main.c,位置 qemu-mps2-arm/applications/main.c,可以其他的 bsp 复制一份,代码简单一点即可,注意把 构建脚本 SConscript 也复制一份过来

#include
int main(void)
{
rt_kprintf("Hello RT-Thread!n");
while (1)
{
rt_thread_mdelay(5000);
}
}

配置 VS Code gdb 调试

使用 qemu 最方便 gdb 调试,使用 VS Code,可以源码调试,非常的方便,同时利于 代码执行流程的梳理,问题的排查定位

在没有配置或者启动 RT-Thread 前,在没有开启 uart 串口前,使用 gdb 调试,无疑是必要的。

qemu 正常启动脚本:qemu.sh chmod +x qemu.sh

qemu-system-arm --version
qemu-system-arm -M mps2-an385
-kernel rtthread.bin
-nographic

qemu 调试启动脚本:qemu-dbg.sh chmod +x qemu-dbg.sh
qemu-system-arm --version
qemu-system-arm -M mps2-an385
-kernel rtthread.bin
-nographic
-s -S
VS Code debug 脚本: .vscode/launch.json,点击VS Code 左栏 调试按钮,初次创建 launch.json

1.jpg

{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "Launch QEMU RTOSDemo",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/qemu-mps2-arm/rtthread.elf",
"cwd": "${workspaceFolder}",
"miDebuggerPath": "/home/zhangsz/linux/tools/gcc-arm-11.2-2022.02-x86_64-arm-none-eabi/bin/arm-none-eabi-gdb",
"miDebuggerServerAddress": "localhost:1234",
"stopAtEntry": true,
}
]
}

初次调试 确认是否进入 Reset_Handler

运行 qemu-dbg.sh, 进入 qemu-mps2-arm 目录,先执行 ./qemu-dbg.sh,此时会 qemu 会卡住

点击 VS Code 调试按钮,然后点击 开始调试按钮,【Start Debugging F5】,我的 VS Code 不能直接点击 F5,这里使用鼠标点击 开始调试

1.jpg

如果正常进入 Reset_Handler,说明 启动脚本参与编译并工作了,接下来就需要对接 entry RT-Thread 入口函数了

系统时钟 25MHz

Reset_Handler 是 程序的入口, 第一个执行的函数: SystemInit,单步进入,这里可以获取到系统的时钟:SYSTEM_CLOCK 为 25MHz94b8b39.html

1.jpg

Reset_Handler 继续执行,复制 Flash 中的 .text 段 到 SRAM,并且 清零 .bss,启动文件的一些符号,可以通过查看对比 链接脚本 获取到

【备注】这里 bl _start 应该直接进入 main 函数,由于 RT-Thread 在 main 函数之前,做了初始操作,所以需要改为 RT-Thread entry 入口函数

1.jpg

1.jpg

进入 RT-Thread entry

Reset_Handler >> bl _start 改为 bl entry,这样调试发现进入了 RT-Thread 的 entry 入口,开始 RT-Thread 系统初始化

1.jpg

1.jpg

RT-Thread 自动初始化等预留的符号

RT-Thread 自动初始化、MSH shell 等符号,在使用 gcc 编译工具链时,需要在 链接脚本中预留,否则 RT-Thread 自动初始化失效、MSH shell cmd 也不能正常的使用

修改链接文件 qemu-mps2-arm/link.lds,在 .text 段,增加

1.jpg

/* section information for finsh shell /
. = ALIGN(4);
__fsymtab_start = .;
KEEP(
(FSymTab))
__fsymtab_end = .;
. = ALIGN(4);
__vsymtab_start = .;
KEEP((VSymTab))
__vsymtab_end = .;
/
section information for initial. /
. = ALIGN(4);
__rt_init_start = .;
KEEP(
(SORT(.rti_fn*)))
__rt_init_end = .;

待续: 接下来开启 RT-Thread 系统 tick 定时器,适配 uart 串口,让 RT-Thread 运行起来

小结

本篇主要通过 VS Code gdb 的方式,调试入口函数的执行,通过修改入口函数 _start,执行 RT-Thread 入口函数 entry,从而进入 RT-Thread 世界

由于没有 tick 定时器、串口打印,所以需要进一步完善设备驱动

注意连接脚本:需要为 RT-Thread 自动初始化、MSH shell cmd 等预留 符号在 .text 段

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SRAM存储器
    +关注

    关注

    0

    文章

    86

    浏览量

    13146
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38900
  • Flash单片机
    +关注

    关注

    0

    文章

    111

    浏览量

    9294
  • gcc编译器
    +关注

    关注

    0

    文章

    78

    浏览量

    3233
  • gdb调试器
    +关注

    关注

    0

    文章

    10

    浏览量

    1080
收藏 人收藏

    评论

    相关推荐

    从0到1教你写RT-Thread之新建工程

    仿真,然后我们再开始一步一步地教大家把 RT-Thread 内核从 0 到 1 写出来,让大家彻底搞懂 RT-Thread的内部实现和设计的哲学思想。最后我们再把 RT-Thread 移植到STM32 开发板上,到了最后的移植其
    发表于 11-18 14:17 1169次阅读

    怎么在 RT-Thread Studio 使用 RT-Thread Nano

    请教一下如何在 RT-Thread Studio 使用 RT-Thread Nano?
    发表于 04-02 07:27

    RT-Thread的STM32BSP制作教程

    、概念BSP是板级支持包(Board Support Package)的意思,概念详见BSP百科。二、参考资料1、官方版本文字制作教程:RT-Thread的STM32
    发表于 08-03 08:04

    请教一下大神如何使用RT-Thread Studio进行离线开发

    离线安装好软件,启动时提示欢迎使用 RT-Thread Studio ,没有具体内容。然后关闭后软件就跟着关闭了。请教一下大神如何使用RT-Thread Studio进行离线开发
    发表于 07-27 10:39

    请教一下各位RT-Thread钩子函数该怎样去使用

    请教一下各位RT-Thread钩子函数该怎样去使用
    发表于 08-09 10:26

    请教一下RT-THREAD STM32F的中断程序该怎么去写

    请教一下RT-THREAD STM32F的中断程序该怎么去写
    发表于 08-11 09:54

    请教一下怎样去解决rt-thread air724启动顺序错误的问题

    请教一下怎样去解决rt-thread air724启动顺序错误的问题
    发表于 11-21 14:29

    请教一下大神使用RT-Thread Studio如何进行SVN的代码管理

    请教一下大神使用RT-Thread Studio如何进行SVN的代码管理
    发表于 01-09 16:41

    RT-Thread Studio配置u8g2点亮OLED SSD1306

    RT-Thread的大佬竟然把它适配到RT-Thread平台上了,而且通过RT-Thread Studio添加软件包再稍微操作一下就可以轻松
    的头像 发表于 08-03 15:47 6466次阅读
    <b class='flag-5'>RT-Thread</b> Studio配置u8g2点亮OLED SSD1306

    比较一下Freertos和RT-Thread

    RT-Thread 内核,是 RT-Thread 的核心部分,包括了内核系统中对象的实现,例如多线程及其调度、信号量、邮箱、消息队列、内存管理、定时器等;libcpu/BSP(芯片移植相关文件 / 板级支持包)与硬件密切相关,由
    的头像 发表于 04-26 15:44 4742次阅读

    RT-Thread文档_Nordic BSP 上手指南

    RT-Thread文档_Nordic BSP 上手指南
    发表于 02-22 18:26 7次下载
    <b class='flag-5'>RT-Thread</b>文档_Nordic <b class='flag-5'>BSP</b> 上手指南

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 7次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植

    手把手教你在RT-THREAD bsp上运行pikascript脚本点亮小灯

    /lt6210925/article/details/130694587 最近有一些结构上的调整,这篇文章大概介绍一下如何使用。以及开发过程中需要注意的问题。 这篇文章几乎适配所有的RT-THREAD
    的头像 发表于 05-25 07:45 541次阅读
    手把手教你在<b class='flag-5'>RT-THREAD</b> <b class='flag-5'>bsp</b>上运行pikascript脚本点亮小灯

    RT-Thread中的Github Actions

    RT-Thread中一共有五个Github Action(rt-thread/.github/workflow) 分别是: RT-Thread BSP build check(.git
    的头像 发表于 06-01 03:10 353次阅读
    <b class='flag-5'>RT-Thread</b>中的Github Actions

    RT-Thread qemu mps2-an385 bsp移植制作 :环境搭建篇

    最近打算系统地研究一下 RT-Thread,包括 RT-Thread BSP 的移植,由于一直在使用 QEMU 进行一些软件功能的验证,qemu 支持很多的CPU 与 开发板,所以想移
    的头像 发表于 08-02 14:45 357次阅读
    <b class='flag-5'>RT-Thread</b> qemu mps2-an385 <b class='flag-5'>bsp</b>移植制作 :环境搭建篇