当前位置:首页 > 公众号精选 > 嵌入式云IOT技术圈
[导读]Micrium Software提供了RTOS解决方案系列,俗称ucos全家桶,其中最为出名的就是ucOS-II 和ucOS-III,于2016年成为Silicon Labs的一部分。

一、uc/OS全家桶

1. Micrium Software

Micrium Software提供了 RTOS 解决方案系列,俗称ucos全家桶,其中最为出名的就是 ucOS-II 和ucOS-III,于 2016 年成为 Silicon Labs 的一部分。

2. μc/OS RTOS & stacks

ucos整条产品线非常丰富,常用的组件都有,官方叫做 μc/OS RTOS & stacks,民间叫做ucos全家桶。

作为一个上过火星的老牌RTOS,找机会体验一下还是很爽的,ucos全家桶中提供了非常丰富的内容。

目前ucos全家桶中的产品大多数已经在github开源,遵循 Apache-2.0 开源许可,开源地址在:

https://github.com/SiliconLabs

3. ucos内核选择

玩全家桶之前,肯定要先把RTOS内核玩起来,关于选择ucos-II还是ucos-III是个老生长谈的问题,上图解决:

4. uc/OS-III源码下载

uc/OS-III系统分为了三个开源仓库,要分别拉取。

① uC-OS3:

git clone https://github.com/SiliconLabs/uC-OS3.git

② uC-CPU:

git clone https://github.com/SiliconLabs/uC-CPU.git

③ uC-LIB:

git clone https://github.com/SiliconLabs/uC-LIB.git

二、移植前的准备

本文中使用的开发板为小熊派IoT开发板,主控为STM32L431RCT6:

本文使用的开发工具是MDK 5.30版本,编译器版本为ARMCC5。

移植之前使用STM32CubeMX生成一份裸机工程,保证可以使用printf在串口正常打印。

三、移植uc/OS-III

1. 复制ucos内核文件到工程中

这里我全都复制过来,后续可以将未添加到MDK中的文件删除。

在工程下新建 ucOS-III 文件夹,存放ucOS-III相关文件。

① 复制ucos内核文件夹过来:

② 复制uC-CPU和uC-LIB两个文件夹过来:

2.添加文件到MDK工程

① 添加 ucos-iii/ports 分组,添加 Ports\ARM-Cortex-M\ARMv7-M 目录下的os_cpu_c.c文件,以及该目录下ARM目录下的os_cpu_a.asm文件和 os_cpu_c.c文件:② 添加 ucos-iii/source分组,添加Source文件夹下的所有c文件(除去__dbg_uCOS-III.c):③ 添加uC-LIB分组,添加uC-LIB文件夹下的4个c文件:④ 添加uC-CPU分组,添加uC-CPU下的相关文件,如图:⑤ 添加 ucos-iii/config 分组,添加配置文件,如下:

  • lib_cfg.h:uC-LIB\Cfg\Template
  • os_cfg.h:Cfg\Template
  • cpu_cfg.h:uC-CPU\Cfg\Template

3. 添加头文件路径到工程中

4. 修改配置文件

① 修改 cpu_cfg.h,配置本工程所使用内核中CPU的NVIC优先级位数:

② 修改 os_cfg.h,关闭系统中 APP HOOKS 功能:

5. 处理中断

RTOS中内核得以运行需要两个中断:

  • 在pendSV异常处理中进行任务切换
  • 在systick异常处理中进行内核时钟处理

首先包含进来ucos的头文件,修改 stm32l4xx_it.c 文件,在头文件添加:

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include "os.h"
/* USER CODE END Includes */

① 处理pendSV异常,如下:

/**
  * @brief This function handles Pendable request for system service.
  */

void PendSV_Handler(void)
{
  /* USER CODE BEGIN PendSV_IRQn 0 */
   OS_CPU_PendSVHandler();

  /* USER CODE END PendSV_IRQn 0 */
  /* USER CODE BEGIN PendSV_IRQn 1 */

  /* USER CODE END PendSV_IRQn 1 */
}

② 处理Systick异常,如下:

/**
  * @brief This function handles System tick timer.
  */

void SysTick_Handler(void)
{
 /* USER CODE BEGIN SysTick_IRQn 0 */
 
 /* USER CODE END SysTick_IRQn 0 */
 HAL_IncTick();
 /* USER CODE BEGIN SysTick_IRQn 1 */
 OS_CPU_SysTickHandler();
 
 /* USER CODE END SysTick_IRQn 1 */
}

至此,移植完成。

四、测试系统调度和延时

在main.c中按照如下过程编写测试代码。

① 引入ucos头文件:

/* Private includes ----------------------------------------------------------*/
/* USER CODE BEGIN Includes */
#include 
#include "os.h"
/* USER CODE END Includes */

② 定义任务栈、任务控制块、任务入口函数:

/* Private variables ---------------------------------------------------------*/

/* USER CODE BEGIN PV */
static  OS_TCB   Task1TCB;
static  CPU_STK  Task1Stk[512];

static void Task1_entry(void *p_arg)
{
 OS_ERR  err;
    
 (void)p_arg;
    
 while(1)
 {
        printf("task1 is running...\r\n");
     OSTimeDly(1000, OS_OPT_TIME_DLY, &err);  
 }   
}


static  OS_TCB   Task2TCB;
static  CPU_STK  Task2Stk[512];

static void Task2_entry(void *p_arg)
{
 OS_ERR  err;
    
 (void)p_arg;
    
 while(1)
 {
        printf("task2 is running...\r\n");
     OSTimeDly(1000, OS_OPT_TIME_DLY, &err);  
 }   
}


/* USER CODE END PV */

③ 在main函数中定义错误值变量:

  /* USER CODE BEGIN 1 */
    OS_ERR  err;
  /* USER CODE END 1 */

④ 在main函数中初始化内核、创建两个任务、启动内核:

/* USER CODE BEGIN 2 */
printf("uc/OS-III Port On BearPi Board By Mculover666\r\n");

/* 初始化 uc/OS 内核 */
OSInit(&err); 

/* 创建task1 */
OSTaskCreate((OS_TCB       *)&Task1TCB,         //任务控制块指针           
             (CPU_CHAR     *)"Task 1",          //任务名称
             (OS_TASK_PTR   )Task1_entry,       //任务入口函数
             (void         *)NULL,              //任务入口函数的参数
             (OS_PRIO       )2,                 //任务优先级
             (CPU_STK      *)&Task1Stk[0],      //任务栈地址
             (CPU_STK_SIZE  )512 / 10,          //任务栈监测区大小
             (CPU_STK_SIZE  )512,               //任务栈大小
             (OS_MSG_QTY    )0,                 //任务支持接受的最大消息数
             (OS_TICK       )0,                 //时间片 */
             (void         *)0,                 //堆栈空间大小  
             (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
 /*
 OS_OPT_TASK_STK_CHK      使能检测任务栈,统计任务栈已用的和未用的
 OS_OPT_TASK_STK_CLR      在创建任务时,清零任务栈
 */
  
             (OS_ERR       *)&err);

/* 创建task2 */
OSTaskCreate((OS_TCB       *)&Task2TCB,   
             (CPU_CHAR     *)"Task 2",
             (OS_TASK_PTR   )Task2_entry,
             (void         *)0,
             (OS_PRIO       )3,
             (CPU_STK      *)&Task2Stk[0],
             (CPU_STK_SIZE  )512 / 10,
             (CPU_STK_SIZE  )512,
             (OS_MSG_QTY    )0,
             (OS_TICK       )0,
             (void         *)0,
             (OS_OPT        )(OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR),
             (OS_ERR       *)&err);

/* 启动内核 */
OSStart(&err);

(void)&err;

/* USER CODE END 2 */

⑤ 编译,下载,在串口助手中查看输出:接下来就可以愉快的去玩uc/OS-III内核啦~还可以玩玩全家桶,go go go!

接收更多精彩文章及资源推送,欢迎订阅我的微信公众号:『mculover666』。

免责声明:本文内容由21ic获得授权后发布,版权归原作者所有,本平台仅提供信息存储服务。文章仅代表作者个人观点,不代表本平台立场,如有问题,请联系我们,谢谢!

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

9月2日消息,不造车的华为或将催生出更大的独角兽公司,随着阿维塔和赛力斯的入局,华为引望愈发显得引人瞩目。

关键字: 阿维塔 塞力斯 华为

加利福尼亚州圣克拉拉县2024年8月30日 /美通社/ -- 数字化转型技术解决方案公司Trianz今天宣布,该公司与Amazon Web Services (AWS)签订了...

关键字: AWS AN BSP 数字化

伦敦2024年8月29日 /美通社/ -- 英国汽车技术公司SODA.Auto推出其旗舰产品SODA V,这是全球首款涵盖汽车工程师从创意到认证的所有需求的工具,可用于创建软件定义汽车。 SODA V工具的开发耗时1.5...

关键字: 汽车 人工智能 智能驱动 BSP

北京2024年8月28日 /美通社/ -- 越来越多用户希望企业业务能7×24不间断运行,同时企业却面临越来越多业务中断的风险,如企业系统复杂性的增加,频繁的功能更新和发布等。如何确保业务连续性,提升韧性,成...

关键字: 亚马逊 解密 控制平面 BSP

8月30日消息,据媒体报道,腾讯和网易近期正在缩减他们对日本游戏市场的投资。

关键字: 腾讯 编码器 CPU

8月28日消息,今天上午,2024中国国际大数据产业博览会开幕式在贵阳举行,华为董事、质量流程IT总裁陶景文发表了演讲。

关键字: 华为 12nm EDA 半导体

8月28日消息,在2024中国国际大数据产业博览会上,华为常务董事、华为云CEO张平安发表演讲称,数字世界的话语权最终是由生态的繁荣决定的。

关键字: 华为 12nm 手机 卫星通信

要点: 有效应对环境变化,经营业绩稳中有升 落实提质增效举措,毛利润率延续升势 战略布局成效显著,战新业务引领增长 以科技创新为引领,提升企业核心竞争力 坚持高质量发展策略,塑强核心竞争优势...

关键字: 通信 BSP 电信运营商 数字经济

北京2024年8月27日 /美通社/ -- 8月21日,由中央广播电视总台与中国电影电视技术学会联合牵头组建的NVI技术创新联盟在BIRTV2024超高清全产业链发展研讨会上宣布正式成立。 活动现场 NVI技术创新联...

关键字: VI 传输协议 音频 BSP

北京2024年8月27日 /美通社/ -- 在8月23日举办的2024年长三角生态绿色一体化发展示范区联合招商会上,软通动力信息技术(集团)股份有限公司(以下简称"软通动力")与长三角投资(上海)有限...

关键字: BSP 信息技术
关闭
关闭