您的位置:首页 > 其它

RT-Thread 学习笔记(五)---编辑、下载、调试程序

2015-03-18 16:32 555 查看
软件环境:Win7,Keil MDK 4.72a, IAR EWARM 7.2, GCC 4.2,Python 2.7 ,SCons 2.3.2

硬件环境:Armfly STM32F103ZE-EK v3.0开发板

接前文,当程序编译完成后,就可以接上JLINK 或其他调试工具下载和调试了。

【1】开发环境设置

(1)修改用scons --taget=mdk4 -s命令生成的keilMDK工程的Options->Output页面的Brows information选项默认没有选择问题

使用Notepad++打开开发分支目录的下的template.uvproj文件,定位到52行附近,使能<BrowseInfromation>标签,修如下:

<DebugInformation>1</DebugInformation>

<BrowseInformation>1</BrowseInformation>

<ListingPath>.\build\</ListingPath>

修改完成后保存并关闭该文件。

(2)需要说明两点(针对MDK4开发环境):

第一,如果改动了源文件的路径,需要重新用scons --tartget=mdk4 -s生成一次,以更新文件路径。

第二,需要在MDK 环境中重新设置目标代码的位置,如下图


设置完毕后,点击KeilMDK IDE界面的Download按钮,开始下载代码,结果如下图。



按下开发板上的Reset按钮,可以在串口终端上看到如下信息:



如果看不到上面信息,请看下终端的COM口有没连接对。

如果一切正确,按下Debug按钮就可以进入调试界面。

【2】解决使用Scons编译和使用KeilMDK编译输出目录不一致问题

在测试过程中发现,在命令终端使用Scons编译时,中间文件输出到Build目录,如下图



rtthread-stm32.bin和rtthread-stm32.axf文件输出到了所建分支的根目录下,但是在KeilMDK环境中下载时,KeilMDK 默认定位的输出目录是Build,这样会导致使用KeilMDK编译时中间文件会输出到分支的根目录下,看起来很乱。网上也没找到解决办法,经过对编译脚本的一番研究,找到了解决办法。

打开rt-rthread-1.2.2/tools/building.py,定位到196行,可以看到如下代码:

# board build script

objs = SConscript('SConscript', variant_dir='build', duplicate=0)

Repository(Rtt_Root)

# include kernel

编译产生的build目录就是从这里来的,所以只需在分支根目录下的Sconstruct文件的第13行修改成如下代码:

TARGET = 'build/rtthread-stm32.' + rtconfig.TARGET_EXT

上面一行红色字题的只添加上去的注意那个斜杠可linux风格是一致的,可不是反斜杠,然后保存,用scons -c清除之前的编译结果,重新运行scons编译,结果如下:



再在管理器中浏览一下,如下图。



rtthread-stm32.axf文件生成在了build目录之下,这样就解决了上面遇到的问题。

【3】,点亮开发板上的LED灯

开发板上的LED1 和LED2硬件接口对应PF6和PF7引脚, 打开stm32f103ze-ek/diriver/led.c,定位到29行,修改如下:

#else

#define led1_rcc RCC_APB2Periph_GPIOF

#define led1_gpio GPIOF

#define led1_pin (GPIO_Pin_6)

#define led2_rcc RCC_APB2Periph_GPIOF

#define led2_gpio GPIOF

#define led2_pin (GPIO_Pin_7)

#endif // led define #ifdef STM32_SIMULATOR

然后保存,用scons命令编译下,下载到开发板上,然后按下复位按钮,OK,LED1在闪烁,LED2常亮。

【4】rtconfig.h配置文件中关于FINSH_USING_MSH编译选项问题

在默认情况下,FINSH_USING_MSH编译选项是没有打开的,当希望使用msh命令行风格时,就需要打开此选项可参考RT-Thread编程指南

(1)打开rtconfig.h,定位到80行附近,代码修改如下:

/* SECTION: finsh, a C-Express shell */

#define RT_USING_FINSH

/*Support MSH style*/

#define FINSH_USING_MSH

/*Support MSH style only,not support C-Express*/

//#define FINSH_USING_MSH_ONLY

/*Support work dictionary,when use MSH style shell,suggest open this option*/

#define DFS_USING_WORKDIR

/*Support historical retrospect*/

#define FINSH_USING_HISTORY

/* Using symbol table */

#define FINSH_USING_SYMTAB

#define FINSH_USING_DESCRIPTION

(2)将msh相关代码加入到工程

msh功能的代码在msh.c和msh_cmd.c文件中,文件components/finsh目录下,将其加入工程中,如下图。



(3)修该Sconscript脚本,确保在componets/finsh目录下Sconscript文件的24行加入了如下代码:

msh_src = Split('''

msh_cmd.c

msh.c

''')


上面这些代码在默认情况下是已经加入进去了的,一般情况下不用修改。

然后保存编译,下载到开发板中,

finsh />list()

--Function List:

led -- set led[0 - 1] on[1] or off[0].

fs_test -- file system R/W test. e.g: fs_test(3)

list_mem -- list memory usage information

mkfs -- make a file system

df -- get disk free

ls -- list directory contents

rm -- remove files or directories

cat -- print file

copy -- copy file or dir

mkdir -- create a directory

cd -- change current working directory

hello -- say hello world

version -- show RT-Thread version information

list_thread -- list thread

list_sem -- list semaphone in system

list_event -- list event in system

list_mutex -- list mutex in system

list_mailbox -- list mail box in system

list_msgqueue -- list message queue in system

list_mempool -- list memory pool in system

list_timer -- list timer in system

list_device -- list device in system

list -- list all symbol in system

msh -- use module shell

--Variable List:

dummy -- dummy variable for finsh

0, 0x00000000

finsh />msh()

0, 0x00000000

msh />

可以看到命令提示符已经变成msh了

msh />help

RT-Thread shell commands:

version - show RT-Thread version information

list_thread - list thread

list_sem - list semaphore in system

list_event - list event in system

list_mutex - list mutex in system

list_mailbox - list mail box in system

list_msgqueue - list message queue in system

list_mempool - list memory pool in system

list_timer - list timer in system

list_device - list device in system

ls - List information about the FILEs.

cp - Copy SOURCE to DEST.

mv - Rename SOURCE to DEST.

cat - Concatenate FILE(s)

rm - Remove (unlink) the FILE(s).

cd - Change the shell working directory.

pwd - Print the name of the current working directory.

mkdir - Create the DIRECTORY.

ps - List threads in the system.

time - Execute command with time.

free - Show the memory usage in the system.

exit - return to RT-Thread shell mode.

help - RT-Thread shell help.

msh />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: