本帖最后由 quyifei 于 2013-9-9 20:13 编辑
攸米板的介绍请看 https://bbs.21ic.com/icview-560714-1-1.html
如果要开发比较复杂的系统,操作系统是必不可少的。 如果没有操作系统的帮助,我们通常只能实现一个或几个简单的任务,任务一多代码的复杂程度会直线上升,直到无法容忍的程度。
考察目前各个操作系统,ucos-ii是比较适宜攸米板的。它全部开源,非商业应用免费,网上可以找到大量的资料介绍,代码也非常精简。 对于STM32103系列完全可以接受。
对于ucos的原理和代码分析,网上可以找到大量的资料,我这里就不多说了。 关于如何移植,我参考的是“UCos-ii_在STM32上的移植详解”。比较浅显易懂,看完后我就开始着手移植了,用了2个小时的时间调试成功。
演示的效果请看视频
视频中攸米板上的4个LED分别以0.25Hz,0.5Hz,1Hz,2Hz的频率闪烁。每个LED的闪烁是一个任务,所以一共4个任务。值得说明的是这4个任务共享一段相同的代码,任务函数都是static void task_LED_Flash(void *p_arg),只是初始化时的参数有所不同。
此次移植是最精简的移植,ucos-ii的大部分功能都被关闭,所以可以作为一个template,ucos-ii的功能可以按照需要打开。编译完成后,占用flash3.4k, ram 3.2k,对于拥有60kflash, 20kram的stm32103c8t6来说,是完全可以接受的。
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. 源代码下载
|