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

转战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个回答
Xinfeng 回答时间:2018-4-28 09:07:19
楼主你好,我现在用的还是MDK开发程序,很想学习使用gcc,makefile等工具开发程序,可以推荐一些上手的资料,书籍么。谢谢。
select326 回答时间: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,而且目前我调试都是用串口很少用调试器来调试
黑皮男 回答时间: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

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

查看全部评分

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

我是使用 Jlink调试下载,debug用的jlink 的GDBserver

评分

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

查看全部评分

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 18:52:54
select326 发表于 2018-4-28 09:17
转战LINUX平台下开发的前提是,板子要能够支持openocd下载调式。
目前出了什么子官方板子外,其他板子很少 ...

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

评分

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

查看全部评分

12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版