你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

转战rt-thread

[复制链接]
黑皮男 提问时间:2018-4-27 22:19 /
    自从入坑STM32,便一发不可收拾,从裸机开始,学习了uCos,但这个RTOS只是入坑RTOS的垫脚石,实际工作中用的是FreeRTOS,免费的吗,必须选它了,虽然最开始接触FreeRTOS感觉好难,代码风格不是我喜欢的类型一脸茫然,之后开窍了,干嘛非得看源码,会用就行,通过不断的玩耍,逐渐深入认识了FreeRTOS,现在看来,看看源码也能看懂用的是如鱼得水,爱不释手,手上有板子就要拿来跑一下。
    之后又偶遇rt-thread,只知道这个是国人写的,简单了解了一下,有点linux的风格,借鉴了一下设备驱动框架,拿来自己用了一下。其实自己一行是想入坑linux驱动开发,看了基本书了,开发板搞了两块,进展太慢,总是搁置,看完了书,照着实验也做了一下,之后有迷茫了,没办法,老是迷失方向。想一想这么大一个系统哪有那么容易学,慢慢用,多做实验吧,现在还在默默的看书。在这期间也想试着用一下rt-thread,但是资料就官网上的那几篇,而且移植还需要调整目录接口,平台是mdk,但是我有个毛病,管理代码不喜欢更改代码的目录接口,就那ST的库来说,基本就是整个Drivers复制过来,直接加入工程,好处就是这种代码库后期方便升级,而且越来越不喜欢用mdk这样的软件来写代码,更倾向于免费的 工具gcc,makefile,cmake等来开发,虽然现在调试主要还是用IAR,所以,又扔一边了,中间也有一次成功在stm32f767-nucleo上跑起来,也就是跑了一下串口。发现rt-thread的官网和论坛最近比较活跃,所以又折腾了一下,在stm32f412-nucleo上跑起来了,这次算是足足的被吸引了,就在刚刚,一个新的工具env,成功运行这个工具并编译成功,这个用起来确实方便,有packages管理功能,用menuconfig进行配置,再加上gcc来开发代码,很好很好,我想我要从FreeRTOS逐渐迁移到rt-thread上。贴两张图,我不是打广告的,只是感觉不错,分享一下,顺便晒晒板卡。
env.PNG
rtt.PNG
QQ图片20180427211916.jpg

如何适配F412
首先在bsp目录先建一个目录,用来适配自己的板卡
env.PNG
一、建立applications,drivers,libraries三个目录,并从其他bsp从其他板卡(有f4的板卡)文件夹中复制rtconfig.h,rtconfig.py,SConscript,SConstruct,stm32_rom.ld这几个文件,可以参考官网的env使用说明,需要Kconfig这个文件,env这个工具使用起来确实很方便。这里不使用env工具。参考已有的f4的板卡,Libraries中存放stm32f4的库,有两个文件夹,分别是CMSIS,STM32F4xx_HAL_Driver,把applications,drivers,Libraries目录中的SConscript复制过来。
以下是目录结构
bsp
|----stm32f412-nucleo
      |----applications
      |----drivers
      |----Libraries
            |----CMSIS
            |----STM32F4xx_HAL_Driver
CMSIS和STM32F4xx_HAL_Driver是直接从ST的库中复制过来的,这里就不展开目录结构了。

二、需要修改的文件
1、rtconfig.py
  1. # toolchains options
  2. ARCH='arm'
  3. CPU='cortex-m4'
  4. CROSS_TOOL='gcc'
复制代码
  1. # cross_tool provides the cross compiler
  2. # EXEC_PATH is the compiler execute path, for example, CodeSourcery, Keil MDK, IAR
  3. if  CROSS_TOOL  == 'gcc':
  4.         PLATFORM         = 'gcc'
  5.         EXEC_PATH         = 'C:/gcc-arm-none-eabi-5_4-2016q3-20160926-win32/bin'
复制代码
这两处CROSS_TOOL和EXEC_PATH是要更改的。
rtconfig.h见附件,我的这个文件是env生成的,这个只是一些宏。注意不要使用RT_USING_USER_MAIN,这个宏打开后,kernel的初始化工作都是由kernel自动完成的,但是经过测试并不能成功运行,主要是入口函数的问题,关掉这个,从main入口开始需要调用kernel的初始化相关的代码。
二、CMSIS文件夹下的SConscript需要修改,以适配F4

  1. Import('rtconfig')
  2. from building import *

  3. cwd = GetCurrentDir()
  4. src = Split('''
  5. Device/ST/STM32F4xx/Source/Templates/system_stm32f4xx.c
  6. ''')
  7. CPPPATH = [cwd + '/Device/ST/STM32F4xx/Include', cwd + '/Include']
  8. CPPDEFINES = [rtconfig.STM32_TYPE]

  9. # add for startup script
  10. if rtconfig.CROSS_TOOL == 'gcc':
  11.         src += ['Device/ST/STM32F4xx/Source/Templates/gcc/startup_stm32f412zx.s']
  12. elif rtconfig.CROSS_TOOL == 'keil':
  13.         src += ['Device/ST/STM32F4xx/Source/Templates/arm/startup_stm32f412zx.s']
  14. elif rtconfig.CROSS_TOOL == 'iar':
  15.         src += ['Device/ST/STM32F4xx/Source/Templates/iar/startup_stm32f412zx.s']

  16. group = DefineGroup('CMSIS', src, depend = [''], CPPPATH = CPPPATH, CPPDEFINES = CPPDEFINES)

  17. Return('group')
复制代码
三、board.h文件从需要定义SRAM的大小
  1. #define STM32_SRAM_SIZE         256
  2. #define STM32_SRAM_END          (0x20000000 + STM32_SRAM_SIZE * 1024)
复制代码
四、stm32_rom.ld中DATA的LENGTH要改成256k
  1. MEMORY
  2. {
  3.     CODE (rx) : ORIGIN = 0x08000000, LENGTH = 1024k /* 1024KB flash */
  4.     DATA (rw) : ORIGIN = 0x20000000, LENGTH =  256k /* 128K sram */
  5. }
复制代码
五、安装scons和python2.7,arm-none-eabi-gcc,之后进入stm32f412-nucleo后执行scons,编译成功

Libraries中的文件未上传,库太大


stm32f412-nucleo.zip

下载

1.22 MB, 下载次数: 27, 下载积分: ST金币 -1

收藏 评论19 发布时间:2018-4-27 22:19

举报

19个回答
Inc_brza 回答时间:2018-4-28 09:56:32
select326 发表于 2018-4-28 09:17
转战LINUX平台下开发的前提是,板子要能够支持openocd下载调式。
目前出了什么子官方板子外,其他板子很少 ...

openocd除了给官方MCU的开发板适配了config文件外,其实主要还是target和interface这两个,目前基本除了最最最最新的MCU等待更新外,其他90%的MCU内核均被支持,毕竟openocd不是商业性的,更新没有MDK那些这么快!

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

黑皮男 回答时间:2018-4-28 09:31:19
Xinfeng 发表于 2018-4-28 09:07
楼主你好,我现在用的还是MDK开发程序,很想学习使用gcc,makefile等工具开发程序,可以推荐一些上手的资料 ...

论坛的坛友的帖子不错https://www.stmcu.org.cn/module/forum/thread-603753-1-1.html

比较容易上手,深入了解的话,还是需要看一些书籍,gcc多在网上找找吧,我都是边用边学,现在还是菜鸟,就会那几条命令

how to write Makefile.pdf

下载

384.18 KB, 下载次数: 32, 下载积分: ST金币 -1

我是熊猫大仙 回答时间:2018-4-28 18:52:54
select326 发表于 2018-4-28 09:17
转战LINUX平台下开发的前提是,板子要能够支持openocd下载调式。
目前出了什么子官方板子外,其他板子很少 ...

有个项目叫GNU MCU Eclipse,Eclipse的插件,Jlink支持很简单,ST-Link需要指定一下ST开发板的配置文件,也不难

评分

参与人数 1蝴蝶豆 +2 收起 理由
zero99 + 2

查看全部评分

Xinfeng 回答时间:2018-4-28 09:07:19
楼主你好,我现在用的还是MDK开发程序,很想学习使用gcc,makefile等工具开发程序,可以推荐一些上手的资料,书籍么。谢谢。
CC4 回答时间:2018-4-28 09:17:39
转战LINUX平台下开发的前提是,板子要能够支持openocd下载调式。
目前出了什么子官方板子外,其他板子很少见到过能支持openocd的

评分

参与人数 1蝴蝶豆 +3 收起 理由
zero99 + 3

查看全部评分

黑皮男 回答时间:2018-4-28 09:26:23
select326 发表于 2018-4-28 09:17
转战LINUX平台下开发的前提是,板子要能够支持openocd下载调式。
目前出了什么子官方板子外,其他板子很少 ...

我转战linux,是学习linux设备驱动开发,不是STM32,而且目前我调试都是用串口很少用调试器来调试
andey 回答时间:2018-4-28 10:19:54
提示: 作者被禁止或删除 内容自动屏蔽
Xinfeng 回答时间:2018-4-28 14:08:26
黑皮男 发表于 2018-4-28 09:31
论坛的坛友的帖子不错https://www.stmcu.org.cn/module/forum/forum.php?mod=viewthread&tid=603753&highligh ...

非常感谢。
黑皮男 回答时间:2018-4-28 14:53:34
andeyqi 发表于 2018-4-28 10:19
我是使用 Jlink调试下载,debug用的jlink 的GDBserver

还没在STM32上用过GDB,后面尝试一下
黑皮男 回答时间:2018-4-28 20:44:02
我是熊猫大仙 发表于 2018-4-28 18:52
有个项目叫GNU MCU Eclipse,Eclipse的插件,Jlink支持很简单,ST-Link需要指定一下ST开发板的配置文件, ...

目前对我来说不太常用,还是习惯直接用printf来调,除非是没有串口留出来的项目才会用调试器
pythonworld 回答时间:2018-4-30 06:25:58
谢谢分享!
CC4 回答时间:2018-5-1 21:45:17
黑皮男 发表于 2018-4-28 09:26
我转战linux,是学习linux设备驱动开发,不是STM32,而且目前我调试都是用串口很少用调试器来调试 ...

这里是STM32社区,
CC4 回答时间:2018-5-1 21:47:16
andeyqi 发表于 2018-4-28 10:19
我是使用 Jlink调试下载,debug用的jlink 的GDBserver

求指点如何在LINUX下做下载开发
黑皮男 回答时间:2018-5-2 09:02:20
select326 发表于 2018-5-1 21:45
这里是STM32社区,

是啊,我标题是转战rtthread,这个实时内核可以在STM32上跑,我现在就在STM32上跑这个内核
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版