上节,我们介绍了如何编译链接生成helloworld程序。在些基础上,接下来我们就要把这个helloworld程序在stm32板子上运行起来。我使用了两种方法来启动运行这个程序。一种是下章节要介绍的:烧写到内部flash中直接启动运行;另一种则是本节所介绍的:使用redboot引导运行内存中的helloworld程序。

要想使用redboot引导运行内存中的helloworld程序,首先移植好redboot并能成功运行。这已经在stm32移植ecos #4,移植redboot(ROM启动方式)上篇stm32移植ecos #5,移植redboot(ROM启动方式)下篇两篇文章中介绍了。

当然你也可以跳过本章节,直接使用下章节介绍的方法。

下面开始介绍如何实现使用redboot引导运行。

1. 确保redboot可成功运行

首先,确保你的redboot可使用ROM方式正常启动了。如果还没有,请参考上述两篇文章。

2. 配置ecos的启动类型为RAM类型

这是关键一步,使用ecos图形配置工具配置ecos的启动类型(Startup type)为RAM类型,如下图所示。

配置ecos启动类型为RAM方式

配置ecos启动类型为RAM方式

3. 重新编译

重新配置ecos启动类型后,重新编译ecos,然后也记得重新编译helloworld程序(先make clean,然后再make一下)。编译方法详见:http://velep.com/archives/551.html

编译helloworld程序后将生成hello.srec和hello.bin两种格式的目标可执行文件,这里我们使用hello.srec文件,因为这种格式的目标文件包含了应用程序入口地址和内存使用范围,使我们在redboot引导启动程序时不需要再指定入口地址了。

4. 打开超级终端,加载helloworld程序到内存中

打开超级终端,板子上电,进入到redboot的命令行。然后我们使用串口的modem方式把hello.srec加载到内存中去。在redboot的命令行中执行如下命令:

load -v -m yMODEM

该命令中,选项-v使能加载过程 的详细方式。-m yMODEM选项告知Redboot使用Y调制解调协议传输目标程序文件。键入该命令后,会出现字母C,表示redboot已经作好传输目标程序文件的准备。

在超级终端中,选择传送—>发送文件菜单传输hello.srec文件。这时会弹出如下图所示的对话框。选择对应的目标执行文件,然后选择协议,最后点击发送,则开始传输文件。

使用MODEM方式传输hello.srec文件

使用MODEM方式传输hello.srec文件

注意,协议要选择Ymodem

传输完成后,对话框自动关闭,redboot会输出信息。如下图所示。

输出文件完成后,redboot输出信息

输出文件完成后,redboot输出信息

输出的信息包括应用程序的入口(Entry point)和使用的内存范围(address range)以及文件传输状态的概况。这样就把目标执行程序文件加载到内存中指定地址(即入口(Entry point))了。

5. 启动执行内存中的helloworld程序

由于redboot知道了应用程序的加载地址,因此不需要指定redboot go命令的入口地址了。在redboot命令中执行命令:go,则开始运行程序并可看到我们程序打印的输出信息。如下图所示。

在reboot命令行中执行go命令启动helloworld程序运行

在reboot命令行中执行go命令启动helloworld程序运行

» 文章出处: reille博客—http://velep.com , 如果没有特别声明,文章均为reille博客原创作品
» 郑重声明: 原创作品未经允许不得转载,如需转载请联系reille#qq.com(#换成@)
分享到:

  9 Responses to “stm32移植ecos #9,移植ecos并成功运行helloworld程序,使用redboot引导运行内存中的helloworld程序”

  1. RedBoot> load -v -m ymodem
    CCCC
    开始 ymodem 传输。 按 Ctrl+C 取消。
    100% 67 KB 3 KB/s 00:00:22 0 Errors

    Entry point: 0x64008019, address range: 0x64008000-0x6400d94c
    xyzModem – CRC mode, 539(SOH)/0(STX)/0(CAN) packets, 6 retries
    RedBoot>
    RedBoot>
    RedBoot>
    RedBoot> go

    你好!~我到了这步,执行go,它就不动了~~~请问这个大概是什么原因???

    • 没有任何提示吗?你的板子是怎样的?

      • 我的板子是我公司的手持机的板子,MCU STM32F207ZG, 跟st的开发板MCU F207IG一样的。板子上外部SRAM没调通,nandfalash已经调通,是不是hello程序是加载到外部SRAM的??

        • 之前调readboot的时候,串口不通,后来发现是我板子用的是外部8M晶振,而且用的是UART1,而ST开发板用的是UART3/4,后来我改的CDL文件后就好了!~~

        • hello程序可以用ROM启动方式直接烧写到flash中运行,所以可以不用加载到外部的SRAM中

  2. 我用的是RHEL 5.6, 电路板就是那个百为的 应该是完全兼容的,用minicom传送的,ymodem无法传送,不停的显示Retry 0: NAK on sector。最后显示Tranfer incomplete。退出文件传输,就看到Redboot显示Error:Illegal command: “” 。我怀疑68000e34应该是hello的入口地址。编译hello也没有问题。hello.srec里面也没有68000e34,只有6800e348,会不会是串口设置问题 导致它多发一个0,可是那个6800e348又不是第一行。你能帮我分析分析吗?? 谢谢

    • 首先,确定minicom支不支持xmodem和ymodem传输。如果不带的话,用windows下的超级终端试下。
      hello.srec本身带入口地址的,传完后就会在串口中显示出来,或者你用交叉编译工具也可以查看到

  3. 我怎么load不了啊 ymodem显示 Error command: “”

Leave a Reply to cwd Cancel reply

(必须)

(我会替您保密的)(必须)

*

This site uses Akismet to reduce spam. Learn how your comment data is processed.

   
© 2012 velep.com | reille blog | 管理| 粤ICP备15065318号-2| 谷歌地图| 百度地图| Suffusion theme|Sayontan Sinha

无觅相关文章插件,快速提升流量