rt-thread移植STM32F103C8

转载请注明出处:https://blog.csdn.net/luomin5417/article/details/78133906


1.获取rt-thread代码
        最近刚刚知道有个国产的rt-thread的嵌入式系统,正好手头有个stm32的板子,就想移植下试试,当然首先看了下官网,做的还满漂亮的,通过官网获取到了rt-thread的源码地址 https://github.com/RT-Thread/rt-thread.git ,使用git clone直接获取就可以了,当然也可以git clone --depth=1  https://github.com/RT-Thread/rt-thread.git 不用获取所有的库版本,直接获取最新的提交版本。
2.编译rt-thread

     根据rt-thread官方提供的文档,大概了解下rt-thread的编译方式,编译方法很简单,我是在ubuntu-16.04下编译的,如图进入rt-thread目录后,根据文档修改bsp下面stm32f10x目录下的rtconfig.py文件,如图2-1所示。

rt-thread移植STM32F103C8_第1张图片

图 2-1 编译目录

主要的修改如图2-2所示,把CROSS_TOOL改为了'gcc',把build='debug'改为了build='',防止编译文件过大,STM32_TYPE=STM32F10X_MD,应为我用的是stm32f103C8,属于中等水平的内存容量,修改完了之后就可以直接编译了,用scons -b命令编译就可以了,如果没有scons直接用apt-get下载,编译完成后会文件目录下会多一些文件,如图2-1所示,rtthread.bin就是我们需要的二进制文件了。

rt-thread移植STM32F103C8_第2张图片

图 2-2 rtconfig.py配置文件

3.烧写rt-thread系统
    我使用的是j-link来烧写二进制文件到flash,首先需要用exec Device=STM32F103C8命令选择器件,不然烧写不了,如图3-1所示:

图 3-1 选择SOC
使用loadbin命令烧写二进制文件,使用loadbin rtthread.bin 0x8000000,需要注意rthread.bin文件的目录问题。
rt-thread移植STM32F103C8_第3张图片
图3-2 烧写rthread.bin
到这里就已经把rt-thread烧写到了flash里面了,但是可能出现启动串口没有输出的问题,此时应该注意把boot0拉底,因为系统是烧写到了flash中。
rt-thread移植STM32F103C8_第4张图片
图 3-3 启动模式
4.解决启动问题
   复位开发板,但是发现串口输出如图4-1所示,启动出错了。
rt-thread移植STM32F103C8_第5张图片
图 4-1 启动输出
根据pc指针的指向,在0x080052ba,在rtthread-stm32.map中定位到了rt_system_heap_init函数出错,如图4-2,在原文件中找到该函数调用位置,发现是在rthread_startup函数中,如图4-3所示。

图 4-2 定义出错函数
根据找到的函数怀疑是STM32_SRAM_END长度定义错了,应为我使用的STM32F103C8的sram只有20k。
rt-thread移植STM32F103C8_第6张图片
图 4-3 定位出错点
在编译目录中的board文件夹下找到board.h打开一看,果然sram被定义为了64,赶紧改为20,重新编译。

图 4-4 sram设置
重新下载编译的bin文件,重启动开发板,终于移植成功。
rt-thread移植STM32F103C8_第7张图片
图 4-5 rt-thread启动图
国产的rt-thread系统做的也蛮好的,大家多多支持去github上点个赞吧。

你可能感兴趣的:(操作系统)