CMSIS-RTOS 多重实例化Multiple Instances

为了简便起见,从这篇文章开始,题目不再增加ARM官方《CMSIS-RTOS教程》几个字。

多重实例化Multiple Instances

RTOS的一个有趣功能就是可以针对一个线程进行多个实例化,例如你可以基于一个线程代码创建多个用于控制UART的实例,此时,每个UART的实例都会管理一个不同的UART硬件。

首先我们要创建线程结构体,并设置线程实例个数为2:

osThreadDef(thread1, osPriorityNormal, 2, 0);

练习:线程的多重实例化

在本练习中,我们将创建一个线程,并针对这线程创建多个运行实例。

打开Pack Installers,选择“Ex 4 Multiple Instances ”并复制到你的指定路径

这个工程实现和LED闪烁相同的功能,但是这里增加了一个带参数的led切换函数,这个参数用了决定是哪个LED闪烁:

void ledSwitcher (void const *argument) {
    for (;;) {
        LED_On((uint32_t)argument);
        delay(500);
        LED_Off((uint32_t)argument);
        delay(500);
    }
}

在定义线程的位置,我们把实例个数设置为2:

osThreadDef(ledSwitcher, osPriorityNormal, 2, 0);

然后我们在main线程里创建两个线程,这个两个线程拥有相同的代码,但是却是不同的实例,我们给不同的实例传递不同的参数来实现不同的LED闪烁:

led_ID1 = osThreadCreate(osThread(ledSwitcher),(void *) 1UL);
led_ID2 = osThreadCreate(osThread(ledSwitcher),(void *) 2UL);

编译工程,并启动仿真环境

运行代码,并打开RTX任务和系统窗口

这里写图片描述

查看右下角的Call stack + locals 窗口

这里写图片描述

从图中我们可以看到ledSwitcher的两个实例,还有它们的所有变量状态,还可以看到每个实例被传递了不同的参数。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值