Re: 有用GCC编译过STM32F40x的BSP的吗?

67 views
Skip to first unread message

jcqi...@gmail.com

unread,
Feb 15, 2012, 6:02:16 AM2/15/12
to rt-threa...@googlegroups.com
我可以的,已经编译好,不过有些模块没启用! newlib 的,也只是编译通过没有错误!

在 2012年2月15日 下午7:00,leavic <lea...@gmail.com>写道:
两天了,都快崩溃了,在ourdev也发了帖不过没人理:
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612&bbs_page_no=1&search_mode=3&search_text=leavic&bbs_id=9999

用的是slickedit+yargarto,编译参数这些在上面的帖子里都有说明。

集中一下问题:
1、到底用什么LD文件?F40x目录下没有提供ld文件,我直接用F1的LD文件修改一下FLASH和RAM大小可以吗?
2、到底是该用yargarto自带的newlib还是RTT目录下的newlib还是minilibc?因为Finsh的Shell.c里面用到了
memcpy函数,如果没有外部lib提供的话,这个函数根本没法提供。
3、如果是要用RTT自带的newlib或者minilibc,是不是只要在rtconfig.h中定义一个#define
RT_USING_NEWLIB,需要做别的什么吗?如何避免工具链使用自带的newlib呢?
4、编译RTT自带的newlib时,rt_console_init()这个函数来自哪里?总提示implicit declaration of
function,类似的还有close,lseek,makedir,open,read等函数。

大侠救命吧。。。。

jcqi...@gmail.com

unread,
Feb 15, 2012, 6:08:48 AM2/15/12
to rt-threa...@googlegroups.com
我之前0.4版本下过正常使用.现在刚把1.0的编出来.可以发给你,你去看看吧,我没下载试过. yargarto + ECLIPSE
配好ECLIPSE的BULID就可以的.

在 2012年2月15日 下午7:05,leavic <lea...@gmail.com>写道:
我通过禁用finsh,不调用自带的newlib,改F1的ld文件,也可以编译完成,可是烧进去完全没跑啊,连show version都没出来,这
可是scheduler启动之前的东西啊。
你用的是什么环境呢?能不能把工程发一份给我,谢谢!


On Feb 15, 7:02 pm, "jcqi2...@gmail.com" <jcqi2...@gmail.com> wrote:
> 我可以的,已经编译好,不过有些模块没启用! newlib 的,也只是编译通过没有错误!
>
> 在 2012年2月15日 下午7:00,leavic <lea...@gmail.com>写道:
>
>
>
>
>
>
>
> > 两天了,都快崩溃了,在ourdev也发了帖不过没人理:
>

bernard

unread,
Feb 15, 2012, 9:45:04 AM2/15/12
to rt-threa...@googlegroups.com
现在ourdev去得少了,比较忙。有问题也可以发到官网论坛去,那边看得频繁些。当然发邮件列表最好!

1. ld文件,如果memory空间变化不大,那么用f1或f2的修改下即可;
2. RT-Thread目录下的newlib是移植newlib必须要用到的函数,而不是完整的newlib。所以如果使用newlib,应该是编译器带的newlib + RT-Thread newlib移植。minilibc是一个非常小的、几乎是不使用gcc内置的libc时才使用的c库。newlib和minilibc是二选一,建议条件许可的情况下选择newlib。
3. 当使用GCC时,如果使用newlib则rtconfig.h中定义RT_USING_NEWLIB;否则编译脚本会自动编译并链接minilibc。
4. 使用newlib需要把DFS文件系统打开,把devfs打开。。。这个确实挺麻烦,后续考虑是否能够把它给脱离开来。

在 2012年2月15日 下午7:00,leavic <lea...@gmail.com>写道:

bernard

unread,
Feb 15, 2012, 9:46:17 AM2/15/12
to rt-threa...@googlegroups.com
另外不建议使用yargarto,推荐codesourcery g++ lite或者上次发的那个有ARM工程参与维护的gcc版本。

Grissiom

unread,
Feb 15, 2012, 10:20:07 AM2/15/12
to rt-threa...@googlegroups.com
2012/2/15 bernard <bernar...@gmail.com>
另外不建议使用yargarto,推荐codesourcery g++ lite或者上次发的那个有ARM工程参与维护的gcc版本。



必须添加到书签里啊 ;)



--
Cheers,
Grissiom

xuzheng lim

unread,
Feb 15, 2012, 8:29:09 PM2/15/12
to rt-threa...@googlegroups.com
建议直接使用NEWLIB,事实上一,如果你使用finsh,那么使用newlib是必要的。这里的newlib是gcc工具自带的newlib,不是1.0带的组件,事实已经证明只要编写好ld文件,包含标准库编译,并且选择startup,s,完全可以正常跑动。

在 2012年2月16日 上午12:44,leavic <lea...@gmail.com>写道:
现在 还剩下四个文件了,这些函数的声明在哪里呢?我用SI去找都只看到函数本体,看不到声明。

Components\finsh\src\finsh_token.c: In function 'token_proc_char':
Components\finsh\src\finsh_token.c:340:4: warning: implicit
declaration of function 'atoi' [-Wimplicit-function-declaration]
Components\finsh\src\finsh_token.c: In function 'token_proc_number':
Components\finsh\src\finsh_token.c:463:4: warning: implicit
declaration of function 'isalpha' [-Wimplicit-function-declaration]

Components\libc\newlib\libc.c: In function 'libc_system_init':
Components\libc\newlib\libc.c:18:2: warning: implicit declaration of
function 'rt_console_init' [-Wimplicit-function-declaration]
Components\libc\newlib\libc.c:21:2: warning: implicit declaration of
function 'open' [-Wimplicit-function-declaration]
Components\libc\newlib\libc.c:10:6: warning: variable 'fd' set but not
used [-Wunused-but-set-variable]

Components\libc\newlib\math.c: In function 'ln':
Components\libc\newlib\math.c:240:1: warning: control reaches end of
non-void function [-Wreturn-type]

Components\libc\newlib\syscalls.c: In function '_close_r':
Components\libc\newlib\syscalls.c:11:2: warning: implicit declaration
of function 'close' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_lseek_r':
Components\libc\newlib\syscalls.c:83:2: warning: implicit declaration
of function 'lseek' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_mkdir_r':
Components\libc\newlib\syscalls.c:92:2: warning: implicit declaration
of function 'mkdir' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_open_r':
Components\libc\newlib\syscalls.c:101:2: warning: implicit declaration
of function 'open' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_read_r':
Components\libc\newlib\syscalls.c:110:2: warning: implicit declaration
of function 'read' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_rename_r':
Components\libc\newlib\syscalls.c:119:2: warning: implicit declaration
of function 'rename' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_stat_r':
Components\libc\newlib\syscalls.c:135:2: warning: implicit declaration
of function 'stat' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_unlink_r':
Components\libc\newlib\syscalls.c:152:2: warning: implicit declaration
of function 'unlink' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_write_r':
Components\libc\newlib\syscalls.c:169:2: warning: implicit declaration
of function 'write' [-Wimplicit-function-declaration]
Components\libc\newlib\syscalls.c: In function '_exit':
Components\libc\newlib\syscalls.c:335:1: warning: 'noreturn' function
does return [enabled by default]
board.c

On Feb 16, 12:25 am, leavic <lea...@gmail.com> wrote:
> 哦,搞错了,我添加include目录时漏了\newlib,现在可以了。
>
> On Feb 16, 12:21 am, leavic <lea...@gmail.com> wrote:
>
>
>
>
>
>
>
> > 也就是说在GCC下,finsh用到了newlib,而newlib又用到了devfs?难怪我怎么编译都不可能过去。
> > 现在的问题是这样的:
> > #include <sys/stat.h>                     /* used for struct stat         */
> > #include <sys/statfs.h>                   /* used for struct statfs       */
>
> > 对于这两个文件,stat.h包含于工具链的newlib中,statfs.h包含于RTT自带的newlib中,我编译的时候如何让一个sys/路径
> > 同时指向两个文件夹呢?
> > 我在include目录中添加components\libc\newlib\,但是编译时还是提示找不到sys/statfs.h文件。

>
> > On Feb 15, 10:45 pm, bernard <bernard.xi...@gmail.com> wrote:
>
> > > 现在ourdev去得少了,比较忙。有问题也可以发到官网论坛去,那边看得频繁些。当然发邮件列表最好!
>
> > > 1. ld文件,如果memory空间变化不大,那么用f1或f2的修改下即可;
> > > 2.
> > > RT-Thread目录下的newlib是移植newlib必须要用到的函数,而不是完整的newlib。所以如果使用newlib,应该是编译器带的newlib
> > > + RT-Thread
> > > newlib移植。minilibc是一个非常小的、几乎是不使用gcc内置的libc时才使用的c库。newlib和minilibc是二选一,建议条件许可的情况下选择newlib。
> > > 3. 当使用GCC时,如果使用newlib则rtconfig.h中定义RT_USING_NEWLIB;否则编译脚本会自动编译并链接minilibc。
> > > 4. 使用newlib需要把DFS文件系统打开,把devfs打开。。。这个确实挺麻烦,后续考虑是否能够把它给脱离开来。
>
> > > 在 2012年2月15日 下午7:00,leavic <lea...@gmail.com>写道:
>
> > > > 两天了,都快崩溃了,在ourdev也发了帖不过没人理:
>

bernard

unread,
Feb 15, 2012, 8:54:02 PM2/15/12
to rt-threa...@googlegroups.com
因为我们目前的STM32F4的板子不多,所以这上面试的也不多。

STM32F4/STM32F2的板子今天发出去打样,下周乐观估计可以调试好板子。

xuzheng lim

unread,
Feb 15, 2012, 9:38:49 PM2/15/12
to rt-threa...@googlegroups.com
 还是靠自己吧,大多数情况下是没人教你的。只能靠自己慢慢摸索。。这就是现实,我都是这么过来的。。。。




1E3.gif

吴洋勇

unread,
Feb 15, 2012, 9:51:04 PM2/15/12
to rt-threa...@googlegroups.com
自己弄会了去教别人不就有人教了。


在 2012年2月16日 上午10:38,xuzheng lim <xuzhe...@gmail.com>写道:
 还是靠自己吧,大多数情况下是没人教你的。只能靠自己慢慢摸索。。这就是现实,我都是这么过来的。。。。







--
吴洋勇
1E3.gif

bernard

unread,
Feb 16, 2012, 2:25:52 AM2/16/12
to rt-threa...@googlegroups.com
对于一些应用情况,我们只能够提供一些提示,其他的,不是每个人都有这么多的时间。

在 2012年2月16日 下午3:10,leavic <lea...@gmail.com>写道:
那讨论组的意义何在?

On Feb 16, 10:38 am, xuzheng lim <xuzheng...@gmail.com> wrote:
> [?] 还是靠自己吧,大多数情况下是没人教你的。只能靠自己慢慢摸索。。这就是现实,我都是这么过来的。。。。
>
>
>
>
>
>
>
>
>
>
>
>  1E3.gif
> 3KViewDownload

prife

unread,
Feb 16, 2012, 2:33:25 AM2/16/12
to rt-threa...@googlegroups.com
讨论组只是有可能解决问题,大多数情况下都是需要自己解决的,正所谓求人不如求己。自己摸索的过程可能很崩溃,这是必须的。讨论组的意义在于别人可能给出提示,别人很难放下手头的工作照着自己的方式做一遍。



--
把有限的时间投入到无限的学习中去

bernard

unread,
Feb 16, 2012, 2:46:58 AM2/16/12
to rt-threa...@googlegroups.com
谢谢理解。关于你的问题,我在上面已经给出提示了,所以如果按照这种方式依然存在问题,可以就这个话题继续进行讨论。

至于说ourdev.cn的问题,我的第一封回复已经提及了。

在 2012年2月16日 下午3:38,leavic <lea...@gmail.com>写道:
是我过分要求了,毕竟这只是个免费的RTOS,没有人有义务提供任何支持。

Grissiom

unread,
Feb 16, 2012, 2:59:46 AM2/16/12
to rt-threa...@googlegroups.com
唉,我觉得,干活啊,不是非得靠自己,也不是非得靠别人~ 尤其是新出来的东西,自己做的板子,世界上可能就只有你一个人用这种配置的,别人不大清楚具体情况会是什么。这种情况下,别人能有指导自然再好不过;如果没有指导也不要灰心嘛,自己如果能做出来就是 cutting edge 的~

--
Cheers,
Grissiom

Ming Bai

unread,
Feb 16, 2012, 3:57:08 AM2/16/12
to rt-threa...@googlegroups.com
我插一句吧。。这个群里面这么多人我觉得他们都还是很热心的。。至少回帖这么多了。
首先问问题最好明确,最好一次只问一个问题。。
你说去掉finish跑不动,然后另一个帖子又是编译错误(说实话那个log里面全都是warning,也没看见error呀。。)
bernard提示你不要用yagarto也没有看到反馈说换了有没有用。
我看了一路都不知道你现在卡在哪里 =,=|
还有implicit declaration of function明显是函数没声明嘛,这和lib也没关系,该补习c啦。。

2012/2/15 leavic <lea...@gmail.com>

Ren Wei

unread,
Feb 16, 2012, 4:11:50 AM2/16/12
to rt-threa...@googlegroups.com

我觉得最好不要干端起碗来吃肉,放下碗来骂娘的事。

 

毕竟RT-thread还比较松散,大家回答问题都是义务的。

 

不要问你能从这收获什么,而是要问你能贡献什么。

 

论坛吵架的那种风气,是要不得的。

 

另外,可不可以搞个常见问题列表啊,其实很多问题,都是重复回答(估计bernard有这种感触吧),尤其是这种工具链啊,链接之类的问题。

 

我觉得啊,如果要做RT-ThreadBSP,或者修改什么,应该先了解下Scons,了解一下是如何编译的。

 

 

发件人: rt-threa...@googlegroups.com [mailto:rt-threa...@googlegroups.com] 代表 Ming Bai
发送时间: 2012216 16:57
收件人: rt-threa...@googlegroups.com
主题: Re: 有用GCC编译过STM32F40xBSP的吗?

bernard

unread,
Feb 16, 2012, 4:16:12 AM2/16/12
to rt-threa...@googlegroups.com
这块网站上有wiki,其中一个栏目就是FAQ,包括编译相关,内核相关等。

针对libc的问题,在FAQ上确实还未提及到。

miaozhendaoren

unread,
Feb 16, 2012, 4:19:31 AM2/16/12
to rt-thread-cnusers
支持出FAQ,并向做出了贡献的同志致以衷心的感谢!
 

miaozhendaoren via foxmail
 
发件人: Ren Wei
发送时间: 2012年2月16日(星期四) 下午5:11
主题: 答复: 有用GCC编译过STM32F40x的BSP的吗?

miaozhendaoren

unread,
Feb 16, 2012, 4:24:05 AM2/16/12
to rt-thread-cnusers
谢谢,老实说,我还没有开始学!等手里面的项目完了,就上, 祝你们工作愉快,呵呵!
 

miaozhendaoren via foxmail
 
发件人: bernard
发送时间: 2012年2月16日(星期四) 下午5:16
收件人: rt-thread-cnusers
主题: Re: 答复: 有用GCC编译过STM32F40x的BSP的吗?

Wang WolfLouis

unread,
Feb 16, 2012, 4:42:49 AM2/16/12
to rt-threa...@googlegroups.com
开源要有感恩的心,要有折腾的精神。


在 12-2-16,miaozhendaoren<miaozhe...@gmail.com> 写道:
> 谢谢,老实说,我还没有开始学!等手里面的项目完了,就上, 祝你们工作愉快,呵呵!

Vinx Zhu

unread,
Feb 16, 2012, 4:47:33 AM2/16/12
to rt-threa...@googlegroups.com
如果不喜欢用scon可以自己写Makefile或者用其他工具,没有任何问题,官方的编译方法为了适应多平台所以做的较复杂,如果对应特定平台完全可以选取需要的代码自己编译,比如我从来不用scon,照样用rtt,呵呵

On Thu, Feb 16, 2012 at 5:40 PM, leavic <lea...@gmail.com> wrote:
1、yagarto 换成code sourcery没有任何改善,虽然说推荐不用yagarto,但目前我没发现yagarto造成了任何编译上的问
题,在link时的内存溢出检查问题上我觉得yagarto比code sourcery好。
2、我知道那是函数没声明,我用source insight在看代码,或者search整个project也找不到哪个文件里声明了这些函数,所以才
问是不是和libc有关。
3、现在工程里已经完全没有我的代码,我个人认为这种官方发布的bsp出现这么多warning肯定是编译出了问题。
4、我不觉得scon是很好的编译方式,这不比makefile好多少,尤其对我这样刚接触RTT而又不用scon的人来说,官方发布用scon编译的
工程,一旦我们用自己的工具去编译出错,几乎就没办法比较问题出在哪里。
例如到底是CFLAG错了,还是include目录少了,还是宏定义缺了,我看了几次scon文件,就是没发现我哪里错了。
5、为了避免不必要的争吵(虽然我都不知道哪里有争吵的必要,也许就是我没给RTT任何贡献而只向RTT索取吧),我放弃这个问题才,还是谢谢各位的回
复和帮助,不给大家添麻烦了。
> <http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612&bbs_page_no=1...
> h_mode=3&search_text=leavic&bbs_id=9999>

bernard

unread,
Feb 16, 2012, 4:56:15 AM2/16/12
to rt-threa...@googlegroups.com
警告的问题还真有可能,好像mbbill提到过scons编译有些问题,导致gcc编译时warning信息不打印出来。这块晚上查查

在 2012年2月16日 下午5:40,leavic <lea...@gmail.com>写道:
1、yagarto 换成code sourcery没有任何改善,虽然说推荐不用yagarto,但目前我没发现yagarto造成了任何编译上的问
题,在link时的内存溢出检查问题上我觉得yagarto比code sourcery好。
2、我知道那是函数没声明,我用source insight在看代码,或者search整个project也找不到哪个文件里声明了这些函数,所以才
问是不是和libc有关。
3、现在工程里已经完全没有我的代码,我个人认为这种官方发布的bsp出现这么多warning肯定是编译出了问题。
4、我不觉得scon是很好的编译方式,这不比makefile好多少,尤其对我这样刚接触RTT而又不用scon的人来说,官方发布用scon编译的
工程,一旦我们用自己的工具去编译出错,几乎就没办法比较问题出在哪里。
例如到底是CFLAG错了,还是include目录少了,还是宏定义缺了,我看了几次scon文件,就是没发现我哪里错了。
5、为了避免不必要的争吵(虽然我都不知道哪里有争吵的必要,也许就是我没给RTT任何贡献而只向RTT索取吧),我放弃这个问题才,还是谢谢各位的回
复和帮助,不给大家添麻烦了。


On Feb 16, 5:11 pm, "Ren Wei" <renweih...@gmail.com> wrote:
> 我觉得最好不要干端起碗来吃肉,放下碗来骂娘的事。
>
> 毕竟RT-thread还比较松散,大家回答问题都是义务的。
>
> 不要问你能从这收获什么,而是要问你能贡献什么。
>
> 论坛吵架的那种风气,是要不得的。
>
> 另外,可不可以搞个常见问题列表啊,其实很多问题,都是重复回答(估计bernard有
> 这种感触吧),尤其是这种工具链啊,链接之类的问题。
>
> 我觉得啊,如果要做RT-Thread的BSP,或者修改什么,应该先了解下Scons,了解一下
> 是如何编译的。
>
> 发件人: rt-threa...@googlegroups.com
> [mailto:rt-threa...@googlegroups.com] 代表 Ming Bai
> 发送时间: 2012年2月16日 16:57
> 收件人: rt-threa...@googlegroups.com
> 主题: Re: 有用GCC编译过STM32F40x的BSP的吗?
>
> 我插一句吧。。这个群里面这么多人我觉得他们都还是很热心的。。至少回帖这么多
> 了。
> 首先问问题最好明确,最好一次只问一个问题。。
> 你说去掉finish跑不动,然后另一个帖子又是编译错误(说实话那个log里面全都是
> warning,也没看见error呀。。)
> bernard提示你不要用yagarto也没有看到反馈说换了有没有用。
> 我看了一路都不知道你现在卡在哪里 =,=|
> 还有implicit declaration of function明显是函数没声明嘛,这和lib也没关系,该
> 补习c啦。。
>
> 2012/2/15 leavic <lea...@gmail.com>
>

> 两天了,都快崩溃了,在ourdev也发了帖不过没人理:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612
> <http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612&bbs_page_no=1...
> h_mode=3&search_text=leavic&bbs_id=9999>
> &bbs_page_no=1&search_mode=3&search_text=leavic&bbs_id=9999
>
> 用的是slickedit+yargarto,编译参数这些在上面的帖子里都有说明。
>
> 集中一下问题:

> 1、到底用什么LD文件?F40x目录下没有提供ld文件,我直接用F1的LD文件修改一下
> FLASH和RAM大小可以吗?
> 2、到底是该用yargarto自带的newlib还是RTT目录下的newlib还是minilibc?因为
> Finsh的Shell.c里面用到了

bernard

unread,
Feb 16, 2012, 4:57:31 AM2/16/12
to rt-threa...@googlegroups.com


在 2012年2月16日 下午5:42,Wang WolfLouis <wolflo...@gmail.com>写道:
开源要有感恩的心,要有折腾的精神。

感恩就算了,只要不骂我就谢天谢地了。折腾 = 开源,这个确实是的。

MingBai

unread,
Feb 16, 2012, 6:26:21 AM2/16/12
to rt-threa...@googlegroups.com
linux���浹��û������� -��-|

On 02/16/2012 05:56 PM, bernard wrote:
��������⻹���п��ܣ�����mbbill�ᵽ��scons������Щ���⣬����gcc����ʱwarning��Ϣ����ӡ ������������ϲ��

�� 2012��2��16�� ����5:40��leavic <lea...@gmail.com>д ����
1��yagarto ����code sourceryû���κθ��ƣ���Ȼ˵�Ƽ�����yagarto����Ŀǰ��û����yagarto������κα����ϵ���
�⣬��linkʱ���ڴ��������������Ҿ���yagarto��code sourcery�á�
2����֪�����Ǻ���û����������source insight�ڿ����룬����search���projectҲ�Ҳ����ĸ��ļ�����������Щ�������Բ�
���Dz��Ǻ�libc�йء�
3�����ڹ������Ѿ���ȫû���ҵĴ��룬�Ҹ�����Ϊ���ֹٷ�������bsp������ô��warning�϶��DZ���������⡣
4���Ҳ�����scon�Ǻܺõı��뷽ʽ���ⲻ��makefile�ö��٣������������սӴ�RTT���ֲ���scon������˵���ٷ��� ����scon�����
���̣�һ���������Լ��Ĺ���ȥ������?������û�취�Ƚ�����������
���絽����CFLAG���ˣ�����includeĿ¼���ˣ����Ǻ궨��ȱ�ˣ��ҿ��˼���scon�ļ�������û������������ˡ�
5��Ϊ�˱��ⲻ��Ҫ����(��Ȼ�Ҷ���֪����������ı�Ҫ��Ҳ�������û��RTT�κι��׶�ֻ��RTT��ȡ��)���ҷ���������� �ţ�����лл��λ�Ļ�
���Ͱ����������鷳�ˡ�


On Feb 16, 5:11 pm, "Ren Wei" <renweih...@gmail.com> wrote:
> �Ҿ�����ò�Ҫ�ɶ����������⣬��������������¡�
>
> �Ͼ�RT-thread���Ƚ���ɢ����һش����ⶼ������ġ�
>
> ��Ҫ�����ܴ����ջ�ʲô������Ҫ�����ܹ���ʲô��
>
> ��̳���ܵ����ַ�����Ҫ���õġ�
>
> ���⣬�ɲ����Ը�����������б?����ʵ�ܶ����⣬�����ظ��ش𣨹���bernard��
> ���ָд��ɣ������������ֹ�������������֮������⡣
>
> �Ҿ��ð������Ҫ��RT-Thread��BSP�������޸�ʲô��Ӧ�����˽���Scons���˽�һ��
> ����α���ġ�
>
> ������: rt-threa...@googlegroups.com
> [mailto:rt-threa...@googlegroups.com] ��� Ming Bai
> ����ʱ��: 2012��2��16�� 16:57
> �ռ���: rt-threa...@googlegroups.com
> ����: Re: ����GCC�����STM32F40x��BSP����
>
> �Ҳ�һ��ɡ������Ⱥ������ô�����Ҿ������Ƕ����Ǻ����ĵġ������ٻ�����ô��
> �ˡ�
> ���������������ȷ�����һ��ֻ��һ�����⡣��
> ��˵ȥ��finish�ܲ�����Ȼ����һ���������DZ������˵ʵ���Ǹ�log����ȫ����
> warning��Ҳû����errorѽ������
> bernard��ʾ�㲻Ҫ��yagartoҲû�п�������˵������û���á�
> �ҿ���һ·����֪�������ڿ������� =��=|
> ����implicit declaration of function�����Ǻ���û��������libҲû��ϵ����
> ��ϰc������
>
> 2012/2/15 leavic <lea...@gmail.com>
>
> �����ˣ���������ˣ���ourdevҲ�������û����:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612
> <http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612&bbs_page_no=1...
> h_mode=3&search_text=leavic&bbs_id=9999>
> &bbs_page_no=1&search_mode=3&search_text=leavic&bbs_id=9999
>
> �õ���slickedit+yargarto�����������Щ������������ﶼ��˵����
>
> ����һ�����⣺
> 1��������ʲôLD�ļ���F40xĿ¼��û���ṩld�ļ�����ֱ����F1��LD�ļ��޸�һ��
> FLASH��RAM��������
> 2�������Ǹ���yargarto�Դ��newlib����RTTĿ¼�µ�newlib����minilibc����Ϊ
> Finsh��Shell.c�����õ���
> memcpy�������û���ⲿlib�ṩ�Ļ�����������û���ṩ��
> 3�������Ҫ��RTT�Դ��newlib����minilibc���Dz���ֻҪ��rtconfig.h�ж���һ��
> #define
> RT_USING_NEWLIB����Ҫ�����ʲô����α��⹤����ʹ���Դ��newlib�أ�
> 4������RTT�Դ��newlibʱ��rt_console_init()������������������ʾimplicit
> declaration of
> function�����ƵĻ���close,lseek,makedir,open,read�Ⱥ���
>
> ��������ɡ�������

jcqi...@gmail.com

unread,
Feb 16, 2012, 6:30:42 AM2/16/12
to rt-threa...@googlegroups.com
我昨天想试我的版子一块板子有点不大对所以今天在试吧.
有很多是要自己摸的,大部分情况下是要靠GOOGLE的.哎
摸上两年基本上就可以解决很多问题了.

在 2012年2月16日 下午7:26,MingBai <mbb...@gmail.com>写道:
linux下面倒是没这个问题 -,-|


On 02/16/2012 05:56 PM, bernard wrote:
警告的问题还真有可能,好像mbbill提到过scons编译有些问题,导致gcc编译时warning信息不打印 出来。这块晚上查查

在 2012年2月16日 下午5:40,leavic <lea...@gmail.com>写 道:
1、yagarto 换成code sourcery没有任何改善,虽然说推荐不用yagarto,但目前我没发现yagarto造成了任何编译上的问
题,在link时的内存溢出检查问题上我觉得yagarto比code sourcery好。
2、我知道那是函数没声明,我用source insight在看代码,或者search整个project也找不到哪个文件里声明了这些函数,所以才
问是不是和libc有关。
3、现在工程里已经完全没有我的代码,我个人认为这种官方发布的bsp出现这么多warning肯定是编译出了问题。
4、我不觉得scon是很好的编译方式,这不比makefile好多少,尤其对我这样刚接触RTT而又不用scon的人来说,官方发 布用scon编译的
工程,一旦我们用自己的工具去编译出错,几乎就没办法比较问题出在哪里。
例如到底是CFLAG错了,还是include目录少了,还是宏定义缺了,我看了几次scon文件,就是没发现我哪里错了。
5、为了避免不必要的争吵(虽然我都不知道哪里有争吵的必要,也许就是我没给RTT任何贡献而只向RTT索取吧),我放弃这个问题 才,还是谢谢各位的回

复和帮助,不给大家添麻烦了。


On Feb 16, 5:11 pm, "Ren Wei" <renweih...@gmail.com> wrote:
> 我觉得最好不要干端起碗来吃肉,放下碗来骂娘的事。
>
> 毕竟RT-thread还比较松散,大家回答问题都是义务的。
>
> 不要问你能从这收获什么,而是要问你能贡献什么。
>
> 论坛吵架的那种风气,是要不得的。
>
> 另外,可不可以搞个常见问题列表啊,其实很多问题,都是重复回答(估计bernard有
> 这种感触吧),尤其是这种工具链啊,链接之类的问题。
>
> 我觉得啊,如果要做RT-Thread的BSP,或者修改什么,应该先了解下Scons,了解一下
> 是如何编译的。
>
> 发件人: rt-threa...@googlegroups.com
> [mailto:rt-threa...@googlegroups.com] 代表 Ming Bai
> 发送时间: 2012年2月16日 16:57
> 收件人: rt-threa...@googlegroups.com
> 主题: Re: 有用GCC编译过STM32F40x的BSP的吗?
>
> 我插一句吧。。这个群里面这么多人我觉得他们都还是很热心的。。至少回帖这么多
> 了。
> 首先问问题最好明确,最好一次只问一个问题。。
> 你说去掉finish跑不动,然后另一个帖子又是编译错误(说实话那个log里面全都是
> warning,也没看见error呀。。)
> bernard提示你不要用yagarto也没有看到反馈说换了有没有用。
> 我看了一路都不知道你现在卡在哪里 =,=|
> 还有implicit declaration of function明显是函数没声明嘛,这和lib也没关系,该
> 补习c啦。。
>
> 2012/2/15 leavic <lea...@gmail.com>
>
> 两天了,都快崩溃了,在ourdev也发了帖不过没人理:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612
> <http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612&bbs_page_no=1...
> h_mode=3&search_text=leavic&bbs_id=9999>
> &bbs_page_no=1&search_mode=3&search_text=leavic&bbs_id=9999
>

MingBai

unread,
Feb 16, 2012, 6:38:54 AM2/16/12
to rt-threa...@googlegroups.com
inlined.

On 02/16/2012 05:40 PM, leavic wrote:
> 1��yagarto ����code sourceryû���κθ��ƣ���Ȼ˵�Ƽ�����yagarto����Ŀǰ��û����yagarto������κα����ϵ���
> �⣬��linkʱ���ڴ��������������Ҿ���yagarto��code sourcery�á�

���Dz�����gccô�����Ұ汾Ҳ�����¡��ܾٸ�����ô�������Ǻ���û�����˼��


> 2����֪�����Ǻ���û����������source insight�ڿ����룬����search���projectҲ�Ҳ����ĸ��ļ�����������Щ�������Բ�
> ���Dz��Ǻ�libc�йء�
> 3�����ڹ������Ѿ���ȫû���ҵĴ��룬�Ҹ�����Ϊ���ֹٷ�������bsp������ô��warning�϶��DZ���������⡣
> 4���Ҳ�����scon�Ǻܺõı��뷽ʽ���ⲻ��makefile�ö��٣������������սӴ�RTT���ֲ���scon������˵���ٷ�������scon�����

���rtthread��ô�������ô��bsp��д��makefile�Ļ�������һ���ɵ�۵� :D
���Ե��ù��ߣ���ɶ���أ���cmake�ɣ��˼�һ��Ҳ��һ���µ����ԡ���
autoconf/automake���ǹ��ƺܶ���Ҫ�����ˡ������� win���滹�����ڣ�ͳһ��
IDE���̰ɣ���ɶ���أ�MDK IAR��Ҫ�չ˵�gcc����
����1 Ҫ��Ӧ������˶���windows���濪������ƽ̨Ҫ��������win�������Ҫ
�á�2Ҫ��Ӧ����ide���ֹ��� (mdk,iar,eclipse...gcc..)��3����̫����������
��չ������ѧϰ�� sconsĿǰӦ������õ�ѡ���ˡ�

> ���̣�һ���������Լ��Ĺ���ȥ������?������û�취�Ƚ�����������
> ���絽����CFLAG���ˣ�����includeĿ¼���ˣ����Ǻ궨��ȱ�ˣ��ҿ��˼���scon�ļ�������û������������ˡ�
> 5��Ϊ�˱��ⲻ��Ҫ����(��Ȼ�Ҷ���֪����������ı�Ҫ��Ҳ�������û��RTT�κι��׶�ֻ��RTT��ȡ��)���ҷ����������ţ�����лл��λ�Ļ�
> ���Ͱ����������鷳�ˡ�
>
>

> On Feb 16, 5:11 pm, "Ren Wei" <renweih...@gmail.com> wrote:

>> �Ҿ�����ò�Ҫ�ɶ����������⣬��������������¡�
>>
>> �Ͼ�RT-thread���Ƚ���ɢ����һش����ⶼ������ġ�
>>
>> ��Ҫ�����ܴ����ջ�ʲô������Ҫ�����ܹ���ʲô��
>>
>> ��̳���ܵ����ַ�����Ҫ���õġ�
>>
>> ���⣬�ɲ����Ը�����������б?����ʵ�ܶ����⣬�����ظ��ش𣨹���bernard��
>> ���ָд��ɣ������������ֹ�������������֮������⡣
>>
>> �Ҿ��ð������Ҫ��RT-Thread��BSP�������޸�ʲô��Ӧ�����˽���Scons���˽�һ��
>> ����α���ġ�
>>
>> ������: rt-threa...@googlegroups.com
>> [mailto:rt-threa...@googlegroups.com] ��� Ming Bai
>> ����ʱ��: 2012��2��16�� 16:57
>> �ռ���: rt-threa...@googlegroups.com
>> ����: Re: ����GCC�����STM32F40x��BSP����
>>
>> �Ҳ�һ��ɡ������Ⱥ������ô�����Ҿ������Ƕ����Ǻ����ĵġ������ٻ�����ô��
>> �ˡ�
>> ���������������ȷ�����һ��ֻ��һ�����⡣��
>> ��˵ȥ��finish�ܲ�����Ȼ����һ���������DZ������˵ʵ���Ǹ�log����ȫ����
>> warning��Ҳû����errorѽ������
>> bernard��ʾ�㲻Ҫ��yagartoҲû�п�������˵������û���á�
>> �ҿ���һ·����֪�������ڿ������� =��=|
>> ����implicit declaration of function�����Ǻ���û��������libҲû��ϵ����
>> ��ϰc������
>>
>> 2012/2/15 leavic <lea...@gmail.com>
>>

>> �����ˣ���������ˣ���ourdevҲ�������û����:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612
>> <http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612&bbs_page_no=1...
>> h_mode=3&search_text=leavic&bbs_id=9999>
>> &bbs_page_no=1&search_mode=3&search_text=leavic&bbs_id=9999
>>

吴洋勇

unread,
Feb 16, 2012, 7:39:59 AM2/16/12
to rt-threa...@googlegroups.com
不显示警告是那个win32长命令补丁引起的。我昨天去掉了可以显示警告了。


在 2012年2月16日 下午7:26,MingBai <mbb...@gmail.com>写道:
linux下面倒是没这个问题
吴洋勇

jcqi...@gmail.com

unread,
Feb 16, 2012, 7:43:34 AM2/16/12
to rt-threa...@googlegroups.com
下进去灯在正常的闪啊!
串口我在看看能不能正常用!

jcqi...@gmail.com

unread,
Feb 16, 2012, 8:22:41 AM2/16/12
to rt-threa...@googlegroups.com
我运行了一下.RTT1.0.0正常啊.

 \ | /
- RT -     Thread Operating System
 / | \     1.0.0 build Feb 15 2012
 2006 - 2011 Copyright by rt-thread team
finsh>>

串口信息也正常!

bernard

unread,
Feb 16, 2012, 9:05:43 AM2/16/12
to rt-threa...@googlegroups.com
确实,scons是目前较好的选择。使用的人不知道,但是做维护的人会感受非常深,要兼顾各个平台、各个编译器

当你真正要去维护3、4种平台时,用其它的肯定要傻眼了。所以linux会衍生出它自己的配置系统、kconfig,是不无道理的。

在 2012年2月16日 下午7:38,MingBai <mbb...@gmail.com>写道:
inlined.

On 02/16/2012 05:40 PM, leavic wrote:
> 1、yagarto 换成code sourcery没有任何改善,虽然说推荐不用yagarto,但目前我没发现yagarto造成了任何编译上的问
> 题,在link时的内存溢出检查问题上我觉得yagarto比code sourcery好。
他们不都是gcc么,而且版本也都很新。能举个例子么?纯粹是好奇没别的意思。

> 2、我知道那是函数没声明,我用source insight在看代码,或者search整个project也找不到哪个文件里声明了这些函数,所以才
> 问是不是和libc有关。
> 3、现在工程里已经完全没有我的代码,我个人认为这种官方发布的bsp出现这么多warning肯定是编译出了问题。
> 4、我不觉得scon是很好的编译方式,这不比makefile好多少,尤其对我这样刚接触RTT而又不用scon的人来说,官方发布用scon编译的
整个rtthread那么多组件那么多bsp,写成makefile的话估计你一样会傻眼的 :D
所以得用工具,用啥好呢,用cmake吧,人家一样也是一套新的语言。用
autoconf/automake?那估计很多人要崩溃了。而且在 win下面还很折腾,统一成
IDE工程吧,用啥好呢,MDK IAR还要照顾到gcc?。
所以1 要适应大多数人都在windows下面开发,夸平台要好尤其是win下面表现要
好。2要适应各种ide各种工程 (mdk,iar,eclipse...gcc..),3不能太复杂且容易
扩展且易于学习。 scons目前应该是最好的选择了。

> 工程,一旦我们用自己的工具去编译出错,几乎就没办法比较问题出在哪里。
> 例如到底是CFLAG错了,还是include目录少了,还是宏定义缺了,我看了几次scon文件,就是没发现我哪里错了。
> 5、为了避免不必要的争吵(虽然我都不知道哪里有争吵的必要,也许就是我没给RTT任何贡献而只向RTT索取吧),我放弃这个问题才,还是谢谢各位的回
> 复和帮助,不给大家添麻烦了。
>
>
> On Feb 16, 5:11 pm, "Ren Wei" <renweih...@gmail.com> wrote:
>> 我觉得最好不要干端起碗来吃肉,放下碗来骂娘的事。
>>
>> 毕竟RT-thread还比较松散,大家回答问题都是义务的。
>>
>> 不要问你能从这收获什么,而是要问你能贡献什么。
>>
>> 论坛吵架的那种风气,是要不得的。
>>
>> 另外,可不可以搞个常见问题列表啊,其实很多问题,都是重复回答(估计bernard有
>> 这种感触吧),尤其是这种工具链啊,链接之类的问题。
>>
>> 我觉得啊,如果要做RT-Thread的BSP,或者修改什么,应该先了解下Scons,了解一下
>> 是如何编译的。
>>
>> 发件人: rt-threa...@googlegroups.com
>> [mailto:rt-threa...@googlegroups.com] 代表 Ming Bai
>> 发送时间: 2012年2月16日 16:57
>> 收件人: rt-threa...@googlegroups.com
>> 主题: Re: 有用GCC编译过STM32F40x的BSP的吗?
>>
>> 我插一句吧。。这个群里面这么多人我觉得他们都还是很热心的。。至少回帖这么多
>> 了。
>> 首先问问题最好明确,最好一次只问一个问题。。
>> 你说去掉finish跑不动,然后另一个帖子又是编译错误(说实话那个log里面全都是
>> warning,也没看见error呀。。)
>> bernard提示你不要用yagarto也没有看到反馈说换了有没有用。
>> 我看了一路都不知道你现在卡在哪里 =,=|
>> 还有implicit declaration of function明显是函数没声明嘛,这和lib也没关系,该
>> 补习c啦。。
>>
>> 2012/2/15 leavic <lea...@gmail.com>
>>
>> 两天了,都快崩溃了,在ourdev也发了帖不过没人理:http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612
>> <http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=5408612&bbs_page_no=1...
>> h_mode=3&search_text=leavic&bbs_id=9999>
>> &bbs_page_no=1&search_mode=3&search_text=leavic&bbs_id=9999
>>
>> 用的是slickedit+yargarto,编译参数这些在上面的帖子里都有说明。
>>
>> 集中一下问题:

>> 1、到底用什么LD文件?F40x目录下没有提供ld文件,我直接用F1的LD文件修改一下
>> FLASH和RAM大小可以吗?
>> 2、到底是该用yargarto自带的newlib还是RTT目录下的newlib还是minilibc?因为
>> Finsh的Shell.c里面用到了

Wang WolfLouis

unread,
Feb 16, 2012, 10:07:37 AM2/16/12
to rt-threa...@googlegroups.com
最关键的是scons本质就是python,那么学习的难度会很低。
在了解Makefile 的管理机制,就差不多可以了。

在 12-2-16,bernard<bernar...@gmail.com> 写道:

bernard

unread,
Feb 16, 2012, 7:43:01 PM2/16/12
to rt-threa...@googlegroups.com
scons中使用GCC编译时warning信息不显示的问题已经修复。

后续继续修复newlib相关的问题(分离newlib与dfs的关联、以及一些警告信息)

苏励

unread,
Feb 17, 2012, 7:24:38 AM2/17/12
to rt-threa...@googlegroups.com

bernard

unread,
Feb 17, 2012, 11:37:47 AM2/17/12
to rt-threa...@googlegroups.com
google svn: newlib完成与dfs文件系统的脱离,即不定义dfs相关文件系统也可以使用newlib。补丁已经在lpc1768上验证通过。

GNU GCC版本信息( GNU Tools for ARM Embedded Processors版本):
D:\pxxiong\Tools\eclipse\arm\bin>arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=d:/pxxiong/tools/eclipse/arm/bin/../libexec/gcc/arm-none
-eabi/4.6.2/lto-wrapper.exe
Target: arm-none-eabi
Configured with: /home/build/work/jenkins-daily-build/src/gcc/configure --build=
i686-linux-gnu --host=i586-mingw32 --target=arm-none-eabi --prefix=/home/build/w
ork/jenkins-daily-build/install-mingw --enable-languages=c,c++ --disable-decimal
-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquad
math --disable-libssp --disable-libstdcxx-pch --disable-lto --disable-nls --disa
ble-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-he
aders=yes --with-newlib --with-sysroot=/home/build/work/jenkins-daily-build/inst
all-mingw/arm-none-eabi --with-libiconv-prefix=/home/build/work/jenkins-daily-bu
ild/build-mingw/host-libs/usr --with-gmp=/home/build/work/jenkins-daily-build/bu
ild-mingw/host-libs/usr --with-mpfr=/home/build/work/jenkins-daily-build/build-m
ingw/host-libs/usr --with-mpc=/home/build/work/jenkins-daily-build/build-mingw/h
ost-libs/usr --with-ppl=/home/build/work/jenkins-daily-build/build-mingw/host-li
bs/usr --with-cloog=/home/build/work/jenkins-daily-build/build-mingw/host-libs/u
sr --with-libelf=/home/build/work/jenkins-daily-build/build-mingw/host-libs/usr
--with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --wit
h-pkgversion='GNU Tools for ARM Embedded Processors' --with-extra-multilibs=armv
6-m,armv7-m,armv7e-m,armv7-r
Thread model: single
gcc version 4.6.2 20110921 (release) [ARM/embedded-4_6-branch revision 182083] (
GNU Tools for ARM Embedded Processors)

吴洋勇

unread,
Feb 17, 2012, 11:56:45 AM2/17/12
to rt-threa...@googlegroups.com
"newlib完成与dfs文件系统的脱离,
即不定义dfs相关文件系统也可以使用newlib。“

X86 GCC验证通过。
--
吴洋勇

吴洋勇

unread,
Feb 17, 2012, 10:59:49 PM2/17/12
to rt-threa...@googlegroups.com
对STM32F40x做了一下修正。

1. GCC编译基本验证通过。(newlib打印浮点还有问题,不知道是移植问题还是newlib的问题)
   GCC编译时FPU版本修正为 fpv4-sp-d16 (是否准确还有待查证)。

2. 更新F4固件库为1.1.0.

3. 补齐USART1和USART3的中断handler.(USART1和USART3没作测试)

其它没做测试,不做任何保证(含上面提到的)。

欢迎指正并提供补丁。
--
吴洋勇

吴洋勇

unread,
Feb 17, 2012, 11:04:51 PM2/17/12
to rt-threa...@googlegroups.com
还需要做的工作:
1. 目前在stack_init中已检查硬件FPU是否打开,然后根据实际情况初始化栈。
   但在切换时,还没有做检查。(会导致没有使用FPU时去保存/切换FPU寄存器)

2. 解决newlib在启用浮点时的问题。

3. IAR版本没验证。

以上由楼下你来顶上。。
--
吴洋勇

Grissiom

unread,
Feb 18, 2012, 12:17:59 AM2/18/12
to rt-threa...@googlegroups.com
2012/2/18 吴洋勇 <wuyan...@gmail.com>

对STM32F40x做了一下修正。

1. GCC编译基本验证通过。(newlib打印浮点还有问题,不知道是移植问题还是newlib的问题)
   GCC编译时FPU版本修正为 fpv4-sp-d16 (是否准确还有待查证)。


根据 https://launchpadlibrarian.net/88152755/readme.txt 来看,应该是差不多的~(这个就是熊大推荐过的GCC工具链里的 readme。)



--
Cheers,
Grissiom

Grissiom

unread,
Feb 18, 2012, 12:22:30 AM2/18/12
to rt-threa...@googlegroups.com
2012/2/18 吴洋勇 <wuyan...@gmail.com>

还需要做的工作:
1. 目前在stack_init中已检查硬件FPU是否打开,然后根据实际情况初始化栈。
   但在切换时,还没有做检查。(会导致没有使用FPU时去保存/切换FPU寄存器)


听说即使没有使用 FPU,也要保存 FPU 的寄存器。因为编译器会利用那些多出来的寄存器做优化,防止溅出。那些东西也应该算是线程上下文的一部分~

原先 21ic 上还有篇贴的,小找了一下没找到……



--
Cheers,
Grissiom

吴洋勇

unread,
Feb 18, 2012, 12:52:15 AM2/18/12
to rt-threa...@googlegroups.com
没有使能FPU时,不需要保存FPU寄存。 此时对FPU寄存器访问直接报硬件错误了。

文章找到后贴一下。
--
吴洋勇

Grissiom

unread,
Feb 18, 2012, 12:59:12 AM2/18/12
to rt-threa...@googlegroups.com
2012/2/18 吴洋勇 <wuyan...@gmail.com>
没有使能FPU时,不需要保存FPU寄存。 此时对FPU寄存器访问直接报硬件错误了。

文章找到后贴一下。

 

写的有点罗嗦,但是大概还是有用的:
==================================
交流一些个人浅薄的cortex m4经验,从一个莫名的hard fault开始

最近搞了2块st的cortex m4 discovery 板,玩lcd玩的很开心,把我stmf1上的显示程序都移植到了新的m4平台。因为程序大部分都是用c写的,所以开始的时候非常顺利,可是在一个5参数的函数出现了问题。

症状是一运行到这个函数就进入hard fault,因为程序都是c写成的,自然不应该会有什么对齐或者试图切换arm状态的错误,于是开始调试。当把参数减少到4个,程序就一切正常,与删减具体哪一个参数没有任何关联,参数一上5就死。这让我顿时觉得异常莫名,心底偷偷开始怀疑keil是不是有bug(当然最后的结果证明,要么是我有bug,要么是st的那群法国佬做事不地道,反正人家编译器肯定没错。。。)

于是开始跟踪反汇编代码,神奇的事情发生了,一个完全是用数组倒腾来刷屏的函数竟然出现了V开头的汇编指令!也就是说FPU的专用汇编指令竟然被使用了。keil真有bug?显然不是,仔细看代码,keil的 arm c编译器是在用FPU所携带的额外的寄存器来进行程序优化。

要知道arm这类RISC哲学的处理器,它们的高性能是有前提的,那就是不能发生“溅出”。什么叫“溅出”?所谓“溅出”就是发生超出处理器边界,访问内存的操作。一个cortex的乘法运算只需要1个周期,但是从内存中取数,写数,起码需要2+N个周期(参考权威指南)。要提高arm的性能,那么所有操作就要尽量在寄存器当中来回倒腾,而把所有对齐的内存访问组团进行以利用这个2+N的指令周期中的N。ARM处理器一个常常被MIPS拿来诟病的问题就是它只有16个寄存器,而通常的RISC机都有32个或者更多的寄存器。cortex m4所携带的FPU本身带了32个32bit的寄存器,这在很大程度上弥补了arm通用寄存器偏少的短板,所以keil的编译器在程序优化的时候,就可以用上这32个寄存器来倒腾数据。虽然比不上真正的通用寄存器,但是总比溅出要好吧!

回到我的问题,既然我的程序的汇编中出现了FPU指令导致了hard fault那么很可能是fpu开启设置问题造成的。会不会是我的keil设置有问题?查了下,结果using fpu之类的开关完全没有任何问题。。。。那么既然st是家法国公司,它们驱动库的作者很可能是法国佬。。。

下一个怀疑目标就是法国佬的做事态度了。。。。找到固件包的CMSIS,检查system_stm32f4xx.c文件中systemInit函数:
/* FPU settings ------------------------------------------------------------*/ 
#if (__FPU_PRESENT == 1) && (__FPU_USED == 1)  
  SCB->CPACR |= ((3UL << 10*2)|(3UL << 11*2));  /* set CP10 and CP11 Full Access 
*/
  #endif
很好,fpu的开启代码在这里。于是开始抓头了,到底哪出问题了呢。。。。?想了半天,重新检查我的程序模板中的system_stm32f4xx.c(直接用的固件库中systemtick例程改的程序模板),于是真相顿时大白了:在SystemInit函数的相应位置,根本没有FPU setting!!!!!这帮子法国佬,总是不大可靠的样子啊。。。。。。

加上之后,顿时一切正常,再也不进hardfault了!经过这个折腾人的问题之后,总算有了点经验,总结下:
1)不管你用不用FPU,都把FPU开着,你不用,编译器优化的时候也许会用到,提高你普通程序的性能。
2)好好检查system_stm32f4xx.c中的FPU开启部分。
3)移植操作系统朋友,不管你的系统里用不用FPU,是不是只有单一线程用FPU,线程切换的时候FPU的32个寄存器的压栈看来是不能省的,因为你不知道编译器会不会偷偷就把它们给用了。。。。

以上是个人玩的一点浅薄经验,和大家分享哈,其实我最喜欢ti的库,写得清晰易用,还稳定。。。。5555555
==================================



--
Cheers,
Grissiom

吴洋勇

unread,
Feb 18, 2012, 1:16:56 AM2/18/12
to rt-threa...@googlegroups.com
看了一下,他是在MDK中选择了使用FPU。但是没有打开硬件FPU。

实际情况是,选择不使用FPU,就和M3无异。(有不带FPU的M4)
--
吴洋勇

Grissiom

unread,
Feb 18, 2012, 1:20:15 AM2/18/12
to rt-threa...@googlegroups.com
2012/2/18 吴洋勇 <wuyan...@gmail.com>

看了一下,他是在MDK中选择了使用FPU。但是没有打开硬件FPU。

实际情况是,选择不使用FPU,就和M3无异。(有不带FPU的M4)


哦…… 这样…… 看来是我理解错了 ;)
 
--
Cheers,
Grissiom
Reply all
Reply to author
Forward
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
Message has been deleted
0 new messages