新闻  |   论坛  |   博客  |   在线研讨会
R8C/1B学习板之uC/OS-II移植详解
renesasrulz | 2009-12-26 11:57:49    阅读:2324   发布文章

原文:R8C/1B学习板之uC/OS-II移植详解

硬件准备:
瑞萨R8C/1B学习板一块。当然是本论坛推出的板子,在此感谢renesas!  O(∩_∩)O~
E8仿真器。当然朋友们可以用串口调试,偶手上有E8,不用白不用哈!
5V直流电源。R8C/1B学习板的电源为5~9V,要注意!

软件准备:
HEW (R8C/Tiny toolchain 5.43版)
uC/OS-II 2.51源代码。如果你没有源码,在网上随便一搜一大堆,这就是开源的好处。


OK!都准备好了。磨拳擦掌开始干活了!


一。新建一个R8C/1B的汇编工程,并确保你的板子能连上电脑调试。

至于怎么建工程,论坛里有相关教材,在此不废话了哈。
顺便提下使用汇编工程的好处是,没有了编译器的屏蔽,代码都是一目了然的。所以依赖C语言的朋友们,要好好学学汇编哦。
调试时,使用E8/E8a, FoUSB均可。论坛里已经有相关教材啦。


二。加入uC/OS-II源码到工程中,并设置路径。由于我的OS源码是直接放在HEW工程目录之下的,所以需要在HEW里设置OS的源码路径,确保在编译的时候,编译器能找到代码。

设置路径如下:
Build --> Renesas M16C Standard Toolchain 下,选择Add, 找到Workspace directory。
在Sub-Directory里填上你的源码在当前HEW工程里的路径。比如我的源码放在当前工程的/OS目录下,那么我就填上OS即可。如图所示:




三。配置R8C/1B上的BSP(板级支持包)

所谓BSP,就是OS启动之前的一段代码。不同的OS,就有不同的BSP,类似于Bootloader功能。

ucos将使用R8C/1B的如下资源:
定时器Z(用于OS系统时钟)
向量号为24的软中断(用于任务切换)
定时器Z每隔20ms产生一个中断,那么UCOS的时钟频率为1000/20 = 50HZ

UCOS的任务切换,笔者这里使用了向量号为24的软中断。因为根据R8C/1B的数据手册,向量号24被保留,我们可以放心的使用它,嘿嘿。

关于UCOS在R8C/1B上的移植代码,本文开始提到的那篇文章写的很详细,或者可以下载本文最后提供的源码来参考。


四。UCOS裁剪。

到此为止,我们开始编译了。在排除了一些编译器报错或者警告之后,代码就没有语法错误了。
但是又出现一个令人头疼的问题,发现RAM占用了1600多字节,已经超过了R8C/1B的1KB的空间。

怎么办?

我们只能裁剪UCOS的一些功能,以减少RAM使用率。
在os_cfg.h里面,定义了UCOS使用的资源,于是笔者在里面狂改:
将占用RAM的事件控制块ECB,信号量,邮箱,消息队列,最大内存块,最大任务数和空闲栈大小,一一做了修改。如下所示。

#define OS_MAX_EVENTS            10    /* Max. number of event control blocks in your application ...  */
                                       /* ... MUST be > 0                                              */
#define OS_MAX_FLAGS              5    /* Max. number of Event Flag Groups    in your application ...  */
                                       /* ... MUST be > 0                                              */
#define OS_MAX_MEM_PART           5    /* Max. number of memory partitions ...                         */
                                       /* ... MUST be > 0                                              */
#define OS_MAX_QS                5    /* Max. number of queue control blocks in your application ...  */
                                       /* ... MUST be > 0                                              */
#define OS_MAX_TASKS             5    /* Max. number of tasks in your application ...                 */
                                       /* ... MUST be >= 2                                             */
#define OS_LOWEST_PRIO           63    /* Defines the lowest priority that can be assigned ...         */
                                       /* ... MUST NEVER be higher than 63!                            */
#define OS_TASK_IDLE_STK_SIZE   30    /* Idle task stack size (# of OS_STK wide entries)              */
再次编译后,RAM就减少到600多字节了。


五。移植验证。
笔者只跑了一个任务来验证本次移植是否成功。该任务功能是每隔一个时钟节拍让R8C/1B学习板上的P1_6对应的LED闪烁一次。
经实践本次移植完全成功!!



后记:
对于瑞萨R8C/1B单片机来说,跑RTOS实际意义不大,它的资源太少了。但是作为没有接触过RTOS的人来说,这实在是性价比最高的入门级教材。呵呵。有兴趣的朋友可以实践一下。
引用uC/OS作者Jean J. Labrosse的一句话,一旦读者用RTOS做过项目,将绝不再想返回到前后台系统。


附上HEW工程:
r8c_ucosii.rar (79 K) 下载次数:10

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
来自瑞萨单片机论坛(www.renesas-mcu.com)的经典文章。仅供大家参考,版权归作者所有。
推荐文章
最近访客