RTOS中间件bror&freertos实现bror接口

RTOS中间件bror&freertos实现bror接口

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.

1. 介绍

bror中文名巴拉,是宜家的一种手推车。
在这里插入图片描述
本文中bror被设计成RTOS的中间件,可以支持linux,freertos,rt-thread等操作系统。应用基于bror开发,可以统一接口,在不同RTOS上方便的移植程序。

2. 开源

bror是接口文件,bror-freertos是在freertos中实现的bror接口。

3. bror接口

// 线程优先级
typedef enum {
    BROR_THREAD_PRIORITY_HIGHEST = 0,
    BROR_THREAD_PRIORITY_HIGH,
    BROR_THREAD_PRIORITY_MIDDLE,
    BROR_THREAD_PRIORITY_LOW,
    BROR_THREAD_PRIORITY_LOWEST
} BrorThreadPriority;

// BrorFunc 入口函数类型
typedef void (*BrorFunc)(void* param);

// 用户模块必须实现的函数
// BrorThreadCreate 创建线程
// func:线程函数
// name:线程名
// priority:线程优先级
// stackSize:堆栈大小
bool BrorThreadCreate(BrorFunc func, const char* name, BrorThreadPriority priority, int stackSize);
// BrorThreadDeleteMe 删除本线程
// 注意:本函数需要在线程结束处调用
void BrorThreadDeleteMe(void);
// BrorDelay 延时
void BrorDelay(int second);
// BrorDelayMS 毫秒级延时
void BrorDelayMS(int ms);
// BrorYield 暂停执行让出CPU
void BrorYield(void);
// BrorMutexInit 初始化锁
intptr_t BrorMutexInit(void);
// BrorMutexLock 上锁
void BrorMutexLock(intptr_t lock);
// BrorMutexUnlock 解锁
void BrorMutexUnlock(intptr_t lock);

注意:线程如果是单次运行,则需要在线程函数末尾使用BrorThreadDeleteMe结束本线程。

4. 示例

在esp32-c3中测试代码运行,创建若干线程,按顺序打印数据。

// Copyright 2020-2020 The TZIOT Authors. All rights reserved.
// 框架层主文件
// Authors: jdh99 <jdh821@163.com>

#include "framework.h"

static intptr_t mutex = 0;
static int seq = 0;

static void testThread0(void* param);
static void testThread1(void* param);
static void testThread2(void* param);

// FrameworkLoad 模块载入
void FrameworkLoad(void) {
    printf("framework load\n");

    mutex = BrorMutexInit();

    BrorThreadCreate(testThread0, "testThread0", BROR_THREAD_PRIORITY_MIDDLE, 2048);
    BrorThreadCreate(testThread1, "testThread1", BROR_THREAD_PRIORITY_MIDDLE, 2048);
    BrorThreadCreate(testThread2, "testThread2", BROR_THREAD_PRIORITY_MIDDLE, 2048);

    printf("framework end\n");
}

static void testThread0(void* param) {
    BrorDelayMS(1);

    int id = 0;
    while (1) {
        BrorMutexLock(mutex);

        printf("id:%d start\n", id);

        if (seq % 3 == 0) {
            seq++;
            printf("----->id:%d seq:%d\n", id, seq);
        }

        if (seq >= 20) {
            printf("id:%d exit\n", id);
            BrorMutexUnlock(mutex);
            break;
        }
        printf("id:%d stop\n", id);

        BrorMutexUnlock(mutex);
        // BrorDelayMS(1000);
        BrorYield();
    }
    BrorThreadDeleteMe();
}

static void testThread1(void* param) {
    BrorDelayMS(1);

    int id = 1;
    while (1) {
        BrorMutexLock(mutex);

        printf("id:%d start\n", id);

        if (seq % 3 == 1) {
            seq++;
            printf("----->id:%d seq:%d\n", id, seq);
        }

        if (seq >= 20) {
            printf("id:%d exit\n", id);
            BrorMutexUnlock(mutex);
            break;
        }
        printf("id:%d stop\n", id);

        BrorMutexUnlock(mutex);
        // BrorDelayMS(1000);
        BrorYield();
    }
    BrorThreadDeleteMe();
}

static void testThread2(void* param) {
    BrorDelayMS(1);
    
    int id = 2;
    while (1) {
        BrorMutexLock(mutex);

        printf("id:%d start\n", id);

        if (seq % 3 == 2) {
            seq++;
            printf("----->id:%d seq:%d\n", id, seq);
        }

        if (seq >= 20) {
            printf("id:%d exit\n", id);
            BrorMutexUnlock(mutex);
            break;
        }
        printf("id:%d stop\n", id);

        BrorMutexUnlock(mutex);
        // BrorDelayMS(1000);
        BrorYield();
    }
    BrorThreadDeleteMe();
}

输出:

framework load
framework end
Hello world123456!0x6161
id:1 start
id:1 stop
id:2 start
id:2 stop
id:0 start
----->id:0 seq:1
id:0 stop
id:1 start
----->id:1 seq:2
id:1 stop
id:2 start
----->id:2 seq:3
id:2 stop
id:0 start
----->id:0 seq:4
id:0 stop
id:2 start
id:2 stop
id:0 start
id:0 stop
id:1 start
----->id:1 seq:5
id:1 stop
id:2 start
----->id:2 seq:6
id:2 stop
id:0 start
----->id:0 seq:7
id:0 stop
id:1 start
----->id:1 seq:8
id:1 stop
id:0 start
id:0 stop
id:1 start
id:1 stop
id:2 start
----->id:2 seq:9
id:2 stop
id:0 start
----->id:0 seq:10
id:0 stop
id:1 start
----->id:1 seq:11
id:1 stop
id:2 start
----->id:2 seq:12
id:2 stop
id:0 start
----->id:0 seq:13
id:0 stop
id:2 start
id:2 stop
id:0 start
id:0 stop
id:1 start
----->id:1 seq:14
id:1 stop
id:2 start
----->id:2 seq:15
id:2 stop
id:0 start
----->id:0 seq:16
id:0 stop
id:1 start
----->id:1 seq:17
id:1 stop
id:0 start
id:0 stop
id:1 start
id:1 stop
id:2 start
----->id:2 seq:18
id:2 stop
id:0 start
----->id:0 seq:19
id:0 stop
id:2 start
id:2 stop
id:1 start
----->id:1 seq:20
id:1 exit
id:0 start
id:0 exit
id:2 start
----->id:2 seq:21
id:2 exit
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值