打印

攸米板学习五:ucos-ii

[复制链接]
2010|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
quyifei|  楼主 | 2013-9-9 20:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 quyifei 于 2013-9-9 20:13 编辑

       攸米板的介绍请看 https://bbs.21ic.com/icview-560714-1-1.html

    如果要开发比较复杂的系统,操作系统是必不可少的。 如果没有操作系统的帮助,我们通常只能实现一个或几个简单的任务,任务一多代码的复杂程度会直线上升,直到无法容忍的程度。


     考察目前各个操作系统,ucos-ii是比较适宜攸米板的。它全部开源,非商业应用免费,网上可以找到大量的资料介绍,代码也非常精简。 对于STM32103系列完全可以接受。


    对于ucos的原理和代码分析,网上可以找到大量的资料,我这里就不多说了。 关于如何移植,我参考的是“UCos-ii_STM32上的移植详解”。比较浅显易懂,看完后我就开始着手移植了,用了2个小时的时间调试成功。

    演示的效果请看视频

    视频中攸米板上的4LED分别以0.25Hz0.5Hz1Hz2Hz的频率闪烁。每个LED的闪烁是一个任务,所以一共4个任务。值得说明的是这4个任务共享一段相同的代码,任务函数都是static void task_LED_Flash(void *p_arg),只是初始化时的参数有所不同。


    此次移植是最精简的移植,ucos-ii的大部分功能都被关闭,所以可以作为一个templateucos-ii的功能可以按照需要打开。编译完成后,占用flash3.4kram 3.2k,对于拥有60kflash20kramstm32103c8t6来说,是完全可以接受的。


    Ucos-ii源代码是从官网 www.micrium.com下载,版本是2.92,是ucos-ii的最后一个版本。下面是具体做的修改。


1. 在文件startup_stm32f10x_md.s, PendSV_Handler全部改成OS_CPU_PendSVHandler, OS_CPU_PendSVHandler 在os_CPU_a.asm中定义,采用默认的定义就可以了,不需要修改。
2. 在文件os_CPU.h, 注释掉Systick相关的函数,如下所示
//void  OS_CPU_SysTickHandler(void);
//void  OS_CPU_SysTickInit   (INT32U  cnts);
OS_CPU_SysTickHandler(void)用函数void SysTick_Handler(void) 代替,定义在stm32f10x_it.c中,把OS_CPU_SysTickHandler(void)的内容拷过来就可以了。
OS_CPU_SysTickInit   (INT32U  cnts)用函数static void Systick_Init(void) 代替,定义在main.c中,用于初始化Systick
3. 在main.c中定义led闪烁的代码,static void task_LED_Flash(void *p_arg)


a) 硬件要求
· STM32F1 YOCTO 攸米板一块


b) 测试步骤
在ewarm6.40下载,执行。


c) 注意事项
· 加入uCOSii的代码时只需要加入ucos_ii.c就可以了,#include “ucos_ii.c”
· 在app_cfg.h
#define  STARTUP_TASK_STK_SIZE               28u
#define TASK1_STK_SIZE                          20u
第一个是第一个任务的堆栈大小,第二个是普通任务的堆栈大小,这两个值是最小的了,如果再小会出错。


d) 关于源代码
1. 在IAR EWARM 6.40下编译通过,选用的调试端口是ST-LINK。
· 在目录EWARM,打开project.eww。
· 选择菜单project->rebulid all
· Download, 执行。
2. 工程文件架构请看:
3. 源代码下载

沙发
quyifei|  楼主 | 2013-9-9 20:13 | 只看该作者
本帖最后由 quyifei 于 2013-9-9 20:21 编辑

源代码以及参考文献。

YOCTO_uCOSii.zip

594.35 KB

UCos-ii_在STM32上的移植详解.pdf

400.74 KB

使用特权

评论回复
板凳
i55| | 2013-9-9 22:04 | 只看该作者
新手搞ucosii不能用mdk,一定要用iar才可以,iar带ucosii插件,对ucosii的各种资源占用看得很清楚。
比如任务栈的大小设置,用mdk肯定抓瞎,用iar可以看历史最大使用量,分配的时候心中有数。

使用特权

评论回复
地板
outstanding| | 2013-9-10 09:09 | 只看该作者
  顶

使用特权

评论回复
5
zjxcml| | 2013-9-10 09:39 | 只看该作者
i55 发表于 2013-9-9 22:04
新手搞ucosii不能用mdk,一定要用iar才可以,iar带ucosii插件,对ucosii的各种资源占用看得很清楚。
比如任 ...

呵呵,学习了。

使用特权

评论回复
6
xingzhew| | 2013-9-10 10:46 | 只看该作者
学习了,顶!

使用特权

评论回复
7
rtgchym| | 2013-9-10 10:47 | 只看该作者
i55 发表于 2013-9-9 22:04
新手搞ucosii不能用mdk,一定要用iar才可以,iar带ucosii插件,对ucosii的各种资源占用看得很清楚。
比如任 ...

额。。长知识了。。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:最小STM32开发板-攸米板淘宝: yifei-stm.taobao.com 博客: blog.sina.com.cn/yifeistm

29

主题

146

帖子

1

粉丝