RTOS中间件bror&freertos实现bror接口
Posted jdh99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
以上是关于RTOS中间件bror&freertos实现bror接口的主要内容,如果未能解决你的问题,请参考以下文章