Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
内核学习营
《内核学习营》+水一方+自用STM32F103VC 板RT-Thread内核移植分享
发布于 2018-08-17 00:59:08 浏览:2767
订阅该版
* 本帖最后由 吉帅虎 于 2018-9-12 09:42 编辑 * 通过在RT-Thread内核和外设学习营群一周的学习,基本理解了RT-Thread内核的运行原理,并功能把RT-Thread内核移植到自己的STM32F103VC板卡上。现经移植步骤分享如下1、准备内容 自用STM32F103VCT6板卡 RT-Thread最新内核文件(rt-thread-3.0.3.zip)下载地址:https://www.rt-thread.org/page/download.html 参考资料:keil下搭载RT_Thread最小系统工程 [https://www.rt-thread.org/docume ... al/project/project/](https://www.rt-thread.org/document/site/rtthread-tutorial/project/project/) 2、准备裸跑最小工程 这一步不是必须的,参考资料里面也没有这一步,但是这一步却很重要,因为作为一个陌生的OS,移植过程中难免会出现各种问题,没有基本的最小功能很难检测移植是否正常。最小系统一般用最简单的LED指示灯周期闪烁即可。见下图 ![TIM图片20180817000353.png](/uploads/201808/17/000408z456nv6uln7c957y.png) 3、按参考资料复制内核文件 如果对内核的文件结构不熟悉,最好按照参考资料里的建议新建文件夹,内核文件中复制到工程文件夹下。参考资料里用了HAL库,我用的是STD库,这一点在复制BSP文件夹下文件的时候略有差别。如下图 ![TIM图片20180817000850.png](/uploads/201808/17/000931kj8ex8x3uruecw4u.png) 4,调整工程文件 按照参考资料的文件树结构把复制到文件下的文件添加到工程文件中,并添加响应的头文件路径。keil中添加文件组、文件、头文件路径的过程不再赘述,既然使用keil学习RT-Thread的话肯定熟悉了keil的基本操作,不了解的话可以通过其他途径学习。其他设置参考上面提到的文件,但不要迷信,对keil的一些设置是根据自己的工程的实际情况确定的,要灵活掌握。把相关文件添加进来后,编译,一般都会有些错误,最常见的就是找不到头文件,解决方法除了参考上面的资料,还可以在工程文件文下查找响应文件,然后查看路径,把相应的路径添加进来即可。再一个就是变量未定义或者重复定义。未定义变量最常见的元件就是文件添加有误,仔细确定文件是否正确即可。重复定义一般就是文件的重复添加,或者自己定义的文件和库文件里有内容重复的内容,通过全部变量搜索到重复的内容,删除不用的即可。在我的移植过程中,最终只有一个变量问题没有定义。见下图 ![TIM图片20180817002139.png](/uploads/201808/17/002147sjnndolssnwhliay.png) 此变量所在的函数是确定操作系统的Systick周期的。SystemCoreClock的意思也很明白,是系统内核时钟频率。通过全局变量,查找不到这个变量的定义。根据上下文,我们知道rt_hw_board_init函数的功能是初始化板卡硬件。我们可以把此段代码修改成如下 ![TIM图片20180817002749.png](/uploads/201808/17/002759ajijis4gffjyteto.png) SystemInit()函数是STD库的系统初始化函数,系统内核时钟具体是多少在STD库的system_stm32f10x.c文件内定义的,我用的是板卡内核时钟频率为72MHz,为了简单,我在此处直接写了72000000,为了方便日后移植,可以把此值定义成一个常量,便于以后统一修改。 5、完成上述杀虫操作后,编译没有问题了。可以先用仿真环境下调试运行,结果很无语,系统没有运行起来。 问题的查找应该一步一步进行,根据一般常识(即便不了解RT_Thread也一样),一个完整的系统肯定要初始化系统时钟,硬件端口等内容。因此我们可以在这些地方设置断点进出问题查找。想到这一点,我们去查找 rt_hw_board_init()函数,发现程序并未执行到这里,并且一直没有执行到。于是往上查找,即调用 rt_hw_board_init()的地方,如此可以找到函数的最初入口处,如下 ![TIM图片20180817004054.png](/uploads/201808/17/004202nscuuuhfwzwbpbqi.png) 通过上下文我们可以知道,如果没有定义RT_USING_MAIN,代码即不会执行到此处。查到此处,解决办法就很简单了,在rtconfig.h中定义RT_USING_MAIN重新编译,调试,一切正常。 ![TIM图片20180817004719.png](/uploads/201808/17/004736f46egljlw477pv5g.png) 修改调试方式,下载到硬件板卡上。一切正常 ![微信图片_20180817004844.jpg](/uploads/201808/17/004900mxc1l7ytxixxdvyb.jpg) 6、经验分享 首先就是重复学习RT-Thread的代码结构,了解每一部分代码的实现的功能,了解内核运行的机理。这样对移植过程中文件位置的分配会有所帮助,一般情况下,要严格按照官方的文件路径放置文件,虽然这些不是必须的,只要满足编译器的规则即可。但是合理的放置文件在使用和移植,迁移过程都会有所帮助。 其次是Debug能力,移植过程中一般很难做到一次性成功,要充分利用编译器编译过程中的错误提示,能快速定位 问题所在,便于快速解决问题。对于一些警告信息,要引起重视,忽略不影响功能的警告,必须处理影响功能的警告,不明白的警告可以通过网络渠道查找原因。 接下来是 分析代码的能力,通过程序的流程,联系上下文查找问题,并定位问题,最终便可解决。 对于OS的移植,关键是对OS的理解,并细心分析查找。另外参考一个成功的例程也会有所帮助。希望大家在日后的学习中都有所收获。
查看更多
1
个回答
默认排序
按发布时间排序
aozima
2018-08-17
调网络不抓包,调I2C等时序不上逻辑分析仪,就像电工不用万用表!多用整理的好的文字,比截图更省流量,还能在整理过程中思考。
不错的分享
撰写答案
登录
注册新账号
关注者
0
被浏览
2.8k
关于作者
吉帅虎
这家伙很懒,什么也没写!
提问
12
回答
12
被采纳
0
关注TA
发私信
相关问题
1
【内核学习】rtthread内核移植记录-STM32F103ZET6-HAL库
2
《内核学习营》+水一方+项目中创建标准的 RT-Thread工程
3
内核学习营+坦然+探索者stm32f407板子RT-thread循环点亮led灯
4
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口字符点灯
5
<内核学习营>+坦然+探索者stm32f407板子RT-thread的pwm点灯实验
6
<内核学习营>+坦然+探索者stm32f407板子RT-thread串口实验
7
<内核学习营>+坦然+野火stm32f103板子RT-thread读写SD卡实验
8
<内核学习营>+坦然+探索者stm32f407板子RT-thread的RTC闹钟实验
9
【内核学习营】+王秀峰+led_rgb
10
【内核学习营】+青春+简单使用GPIO驱动LED灯闪烁
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
如何在master上的BSP中添加配置yml文件
2
使用百度AI助手辅助编写一个rt-thread下的ONVIF设备发现功能的功能代码
3
RT-Thread 发布 EtherKit开源以太网硬件!
4
rt-thread使用cherryusb实现虚拟串口
5
《C++20 图形界面程序:速度与渲染效率的双重优化秘籍》
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
WIZnet_W5500
UART
ota在线升级
PWM
cubemx
freemodbus
flash
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
GD32
flashDB
socket
中断
Debug
编译报错
msh
SFUD
keil_MDK
rt_mq_消息队列_msg_queue
ulog
C++_cpp
at_device
本月问答贡献
踩姑娘的小蘑菇
7
个答案
3
次被采纳
a1012112796
14
个答案
2
次被采纳
张世争
9
个答案
2
次被采纳
rv666
5
个答案
2
次被采纳
用户名由3_15位
13
个答案
1
次被采纳
本月文章贡献
程序员阿伟
9
篇文章
2
次点赞
hhart
3
篇文章
4
次点赞
大龄码农
1
篇文章
5
次点赞
RTT_逍遥
1
篇文章
2
次点赞
ThinkCode
1
篇文章
1
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部