移植uCOS到STR9的一些心得

玩STR9一个星期的,我用的是STR912FW44,属于STR91x系列中,档次较高的那个,有512K Flash和96K SRAM,96MHz的主频,足以全面取代普通单片机的.

比较有趣的是STR9的指令集是兼容ARM7的,所以无怪乎称为ARM7的加强版.
玩ARM9也不难的,都是Firmware调用,有点类似API,比起单片机直接操作寄存器方便多的.
不过ARM9的资源就是多呢,玩着就是功能强大,有USB2和MAC,使得做微型网络服务器成为事实.

STR9是不带MMU的,虽然能Run ucLinux,但没有Porting,也就只好玩uCOS的.
在网上搜索了几下,终于找到了最新的uCOS2.86,下载之,再去官方网站找到ARM Port,放进去Compile,N个Error -_#!
咋回事?原来Porting只是OS部分,还得要BootLoader的支持,不论是ST官方的BootLoader还是Keil ReadView MDK的,都是不适用的,郁闷,只好自己动手丰衣足食的.

我用的是Keil,因为Keil的ULINK2算是便宜(4600大元2个加MDK正版,其实也不便宜的,比起IAR的JLINK就算便宜啦),而且不喜欢IAR,个人认为IAR那个IDE还停留在Win2000年代的界面,没有Keil uVision的好用,而且以前玩过C51,那是Keil的世界,所以还是觉得Keil的更亲切.

说完的题外话,现在言归正传.
都看过MDK和ST的BootLoader后,决定对ST官方版本的BootLoader进行修改,以支持uCOS.
还没见网上有任何uCOS2.8x的STR9移植版本是好用的,所以还得翻阅uCOS官方的文档.
我以前从来没用过uCOS的,花了两天功夫,搞清楚来龙去脉,这下就心里有底的.

关键在于BootLoader的Exception Hander需要由uCOS接管,于是修改向量入口.
Run一下,系统不能进入?Debug也是无效??找找资料,噢~原来连接器需要设置代码位置.
因为ARM需要从0x0启动,增加连接选项"--first 91x_vect.o(Reset)"把BootLoader的Reset如后置为0x0地址即可.
再Run之,系统能进入了,但是任务调度无效,怎么回事?认真Debug发现CPU出现Abort错误,再次阅读BootLoader部分代码,汗,原来默认用了USR Mode,当然出现异常的,因为uCOS用的必须是SVC Mode,改了BootLoader后,一切OK.

事后却发现,只要掉电,系统就再也动不起来的,怎么回事??Try一下别的工程,怎么没此问题?!
郁闷啦~做了一天的研究居然没找到头绪,汗啊.
突然想起是不是代码限制呢?偶用的可是正版,没此限制的哦.不管,观察看看,在线Debug,系统报错是:0x8000地址错误!!这恰好是32KB啊!!不是吧??正版会这样???肯定不是的,一定是那个连接器的问题.
做多几次尝试,再次证实了,只要大于32KB的代码,就会掉电后再也执行不起来的,而且比较Flash区代码,是没问题的,那么可以得出一个结论:MDK不存在32KB代码编译连接的限制.那么一定是文件映像出了问题的.
好好比较MDK的编译连接项,终于发现问题所在"One ELF Section per Function",只要开启这个就一切正常!做了多次测试,证实了这个问题.

在ARM上跑起uCOS后,剩下的东西都变得容易多了.

文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: STR9 STR91x Keil MDK ARM966 Firmware uCOS
相关日志:
评论: 3 | 引用: 0 | 查看次数: 3766
回复回复xxj1980[2010-07-22 10:44 PM | | | del]
你好;我也是在做嵌入式开发,希望以后能够共勉
回复回复graytay[2009-06-22 02:31 PM | | | del]
可以把ucosII移植代码 发我一份么?不胜感激
graytay@foxmail.com
回复回复whatcall[2008-08-03 09:43 PM | | | del]
Liu Yang,你好。 我正在做一个使用STR911的项目,目前使用的RTOS是MDK自带的RL-ARM,修改了启动代码后,已经跑起来了.当然使用IRQ中断还需要修改ST提供的91x_it.c中的中断函数, RL-ARM不支持ST风格的中断函数入口。我手上有ST的910-EVAL开发板,前段时间想移植FreeRTOS来作为项目的RTOS,无奈时间紧迫,接触ST的ARM9时间又太短只好作罢。FreeRTOS已有IAR的移植版本,跟uc/OSII的最大区别就是提供免费版本。我想要一份你的uc/OSII的移植代码,有时间在板子上跑一下,不知可不可以。我的Email: whatcall@126.com。谢谢。希望以后可以继续交流。
发表评论
昵 称:
密 码: 游客发言不需要密码.
邮 箱: 支持Gravatar头像.
网 址: 输入网址便于回访.
内 容:
验证码:
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.
字数限制 1000 字 | UBB代码 关闭 | [img]标签 开启