分享

1.uCOS

 goodwangLib 2020-03-09

I.说明

作者:WXP(翱翔云端的鸟)

联系方式:328452854@qq.com || 13100610853(联系请注明CSDN)

申明:个人原创,转载请先经过本人同意!

要说的话:个人水平有限,写之前也看过许多大神的博客,不足之处,还请指正!有疑问欢迎大家联系我交流探讨!

II.环境

软件环境:KEIL-MDK v-5.24a

硬件:STM32F103ZET6最小系统板

III.uCOS-II

1.uCOS简介

uCOS(也有人叫uC/OS)由美国人Jean Labrosse1992年编写的一个实时操作系统

1998年更新到uCOS-II,并于2000年得到美国航天管理局(FAA)认证,可以用于飞行器中.

官方网站:www.micrium.com

2.uCOS-II的特点

1)可裁剪

uCOS-II源代码中有一个专门用来裁剪系统的配置文件,通过各种宏的来打开或者

 关闭那些不需要用到系统服务,这样可以大大减小平台移植uCOS-II所需要的存储空间

 (2) 便于移植

  uCOS-II基本全部是用C语言写的,只有和微处理器相关的那部分是用汇编写的,汇编

 所占比例极小,从而使得uCOS-II便于移植到各种微处理器上.事实上uCOS-II已经运用

 在了大部分的8位、16位、32位的MCU中了

 (3) 抢占式

  uCOS-II是支持抢占式,系统总是运行多个任务中优先级别最高的那个就绪任务,

 优先级会就绪任务会抢占正在运行的任务,实时性得以保证

 (4) 多任务

  uCOS-II同时支持255个任务,实际上不会用到这么多,看具体应用来决定

 (5) 稳定可靠

  uCOS-II已经被使用在很多的产品上,经过市场产品的实际检测,具有很好的稳定

 性和可靠性

3.uCOS-II的内核对象

  ⊙ 信号量

  ⊙ 互斥信号量

  ⊙ 事件标志

  ⊙ 消息邮箱

  ⊙ 消息队列

  ⊙ 内存管理

  ⊙ 时钟管理

  ⊙ 任务管理

4.uCOS-II的文件结构

  ⊙ 与处理器无关的代码

   os_core.c

   os_flag.c

   os_mbox.c

   os_mem.c

   os_mutex.c

   os_q.c

   os_sem.c

   os_task.c

   os_time.c

   os_tmr.c

   ucos_ii.h

  ⊙ 与处理相关的代码(移植时需要修改)

   os_cpu_c.c

   os_cpu_a.asm

   os_cpu.h

  ⊙ 与应用程序相关的代码

   os_cfg.h

   includes.h

IV.移植uCOS-IISTM32F103

1. uCOS-II移植准备工作

准备好uCOS-II源码、uCOS-II官方移植到STM32F107DemoSTM32F103裸机Demo

下载地址:

CSDNhttp://download.csdn.net/download/wang328452854/10110946

百度云盘: http://pan.baidu.com/s/1eRHYeJo 密码:d1pj

当然也可以从官网或者论坛下载,然后用你自己的裸机历程也是可以的.

2. uCOS-II移植

(1) 若是按照我的代码,解压后如下图所示

 

(2) 在裸机代码STM32F103_Demo中添加一个目录uCOS-II

 

(3)uCOS-II,并在uCOS-II目录下新建两个目录PortsSource

 

(4) 将准备目录下的Micrium\uCOS-II\Source下除os_cfg_c.hos_dbg_r.c全部复制到移植工程目录下的Source

 

 

(5) 将准备目录下Micrium_uC-Eval-STM32F107_uCOS-II\Software\uCOS-II\Ports\ARM-Cortex-M3\Generic\RealViem下的全部文件拷贝到移植目录的Ports

 

 

(6) Micrium_uC-Eval-STM32F107_uCOS-II\Software\EvalBoards\Micrium\uC-Eval-STM32F107\uCOS-下的三个文件拷贝到移植工程的App目录下

 

 

(7) MDK打开移植工程,新建Group  uCOS-II_Source uCOS-II_Ports并添加对应文件如下

 

上图中比之前多了app_hooks.c,主要是一些钩子函数,若是需要从第6步中拷贝到App下添加即可

 

(8) 修改includes.h如下

  1. /*
  2. *********************************************************************************************************
  3. * EXAMPLE CODE
  4. *
  5. * (c) Copyright 2003-2013; Micrium, Inc.; Weston, FL
  6. *
  7. * All rights reserved. Protected by international copyright laws.
  8. * Knowledge of the source code may NOT be used to develop a similar product.
  9. * Please help us continue to provide the Embedded community with the finest
  10. * software available. Your honesty is greatly appreciated.
  11. *********************************************************************************************************
  12. */
  13. /*
  14. *********************************************************************************************************
  15. *
  16. * MASTER INCLUDES
  17. *
  18. * ST Microelectronics STM32
  19. * on the
  20. *
  21. * Micrium uC-Eval-STM32F107
  22. * Evaluation Board
  23. *
  24. * Filename : includes.h
  25. * Version : V1.00
  26. * Programmer(s) : EHS
  27. *********************************************************************************************************
  28. */
  29. #ifndef INCLUDES_PRESENT
  30. #define INCLUDES_PRESENT
  31. /*
  32. *********************************************************************************************************
  33. * STANDARD LIBRARIES
  34. *********************************************************************************************************
  35. */
  36. #include <stdarg.h>
  37. #include <stdio.h>
  38. #include <stdlib.h>
  39. #include <math.h>
  40. /*
  41. *********************************************************************************************************
  42. * LIBRARIES
  43. *********************************************************************************************************
  44. */
  45. //#include <cpu.h>
  46. //#include <lib_def.h>
  47. //#include <lib_ascii.h>
  48. //#include <lib_math.h>
  49. //#include <lib_mem.h>
  50. //#include <lib_str.h>
  51. /*
  52. *********************************************************************************************************
  53. * APP / BSP
  54. *********************************************************************************************************
  55. */
  56. #include 'bsp.h'
  57. /*
  58. *********************************************************************************************************
  59. * OS
  60. *********************************************************************************************************
  61. */
  62. #include <ucos_ii.h>
  63. /*
  64. *********************************************************************************************************
  65. * ST
  66. *********************************************************************************************************
  67. */
  68. /*
  69. *********************************************************************************************************
  70. * INCLUDES END
  71. *********************************************************************************************************
  72. */
  73. #endif


(9)修改main.c如下

  1. /******************************************************************************
  2. * File : main.c
  3. * Function : 主文件
  4. * Description: None
  5. * Version : V1.00
  6. * Author : WXP
  7. * Date :
  8. * History :
  9. ******************************************************************************/
  10. #include 'includes.h'
  11. //START 任务
  12. //设置任务优先级
  13. #define START_TASK_PRIO 10 //开始任务的优先级设置为最低
  14. //设置任务堆栈大小
  15. #define START_STK_SIZE 64
  16. //任务堆栈
  17. OS_STK START_TASK_STK[START_STK_SIZE];
  18. //任务函数
  19. void start_task(void *pdata);
  20. //LED0任务
  21. //设置任务优先级
  22. #define LED0_TASK_PRIO 7
  23. //设置任务堆栈大小
  24. #define LED0_STK_SIZE 64
  25. //任务堆栈
  26. OS_STK LED0_TASK_STK[LED0_STK_SIZE];
  27. //任务函数
  28. void led0_task(void *pdata);
  29. //LED1任务
  30. //设置任务优先级
  31. #define LED1_TASK_PRIO 6
  32. //设置任务堆栈大小
  33. #define LED1_STK_SIZE 64
  34. //任务堆栈
  35. OS_STK LED1_TASK_STK[LED1_STK_SIZE];
  36. //任务函数
  37. void led1_task(void *pdata);
  38. int main(void)
  39. {
  40. Bsp_Init();
  41. OSInit();
  42. OSTaskCreate(start_task,(void *)0,(OS_STK *)&START_TASK_STK[START_STK_SIZE-1],START_TASK_PRIO );//创建起始任务
  43. OSStart();
  44. while(1)
  45. {
  46. }
  47. }
  48. //开始任务
  49. void start_task(void *pdata)
  50. {
  51. OS_CPU_SR cpu_sr=0;
  52. pdata = pdata;
  53. OS_ENTER_CRITICAL(); //进入临界区(无法被中断打断)
  54. OSTaskCreate(led0_task,(void *)0,(OS_STK*)&LED0_TASK_STK[LED0_STK_SIZE-1],LED0_TASK_PRIO);
  55. OSTaskCreate(led1_task,(void *)0,(OS_STK*)&LED1_TASK_STK[LED1_STK_SIZE-1],LED1_TASK_PRIO);
  56. OSTaskSuspend(START_TASK_PRIO); //挂起起始任务.
  57. OS_EXIT_CRITICAL(); //退出临界区(可以被中断打断)
  58. }
  59. //LED0任务
  60. void led0_task(void *pdata)
  61. {
  62. while(1)
  63. {
  64. LED2(ON);
  65. OSTimeDlyHMSM(0,0,0,200);
  66. LED2(OFF);
  67. OSTimeDlyHMSM(0,0,0,200);
  68. }
  69. }
  70. //LED1任务
  71. void led1_task(void *pdata)
  72. {
  73. while(1)
  74. {
  75. LED3(ON);
  76. OSTimeDlyHMSM(0,0,0,500);
  77. LED3(OFF);
  78. OSTimeDlyHMSM(0,0,0,500);
  79. }
  80. }


(10) 修改uCOS-II_Ports下的os_cpu_a.asm


 

(11) 编译会出现一个错误,重定义了PendSV_Handler

 

这个时候只需要把stm32f10x_it.c中的PendSV_Handler注释掉即可

 

此时编译不会报错但是并未修改完成

(12) 修改bsp_systick.c

 

(13) 修改os_cpu_c.c中的关于systick的配置初始化及中断处理部分

 


(14) 注释掉os_cpu.h中我们刚才修改过的函数部分

 

至此移植步骤完成了,main.c中两个LED任务,下载到开发板中可以看到两个灯以不同频率闪烁

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多