【ARMv8M Cortex-M33 系列 8 -- RT-Thread 移植 posix pthread】
文章目录
- RT-Thread POSIX Pthread
- RT-Thread Pthread 相关宏定义
- RT-Thread libc 初始化
- RT-Thread Pthread 测试

RT-Thread POSIX Pthread
pthread
是POSIX(Portable Operating System Interface)标准定义的一套线程相关的API,全称为POSIX Threads。它是在类Unix操作系统上进行线程管理和操作的一组标准接口,广泛用于实现多线程应用程序。
pthread
库提供了创建和控制线程的一系列函数,包括但不限于:
pthread_create
:创建一个新线程。pthread_exit
:终止当前线程。pthread_join
:等待一个线程的结束。pthread_detach
:将线程设置为脱离状态,使得线程结束时自动释放资源。pthread_cancel
:请求取消同一进程中的另一个线程。- 同步机制,如互斥锁(
pthread_mutex_*
)、条件变量(pthread_cond_*
)、读写锁(pthread_rwlock_*
)等。
RT-Thread Pthread 相关宏定义
RT-Thread是一个面向嵌入式设备的实时操作系统(RTOS),它拥有微内核、多线程调度等特性,并且提供丰富的组件库。RT-Thread也提供了对POSIX标准的部分支持,包括pthread
接口, 具体见rt-thread/components/libc/posix/pthreads/pthread.h
。
如果RT-Thread 中要支持pthread,那么需要使能以下宏:
/* POSIX layer and C standard library */#define RT_USING_LIBC
#define RT_USING_PTHREADS
#define PTHREAD_NUM_MAX 32
#define RT_USING_POSIX
#define RT_USING_POSIX_MMAP
#define RT_USING_POSIX_TERMIOS
#define RT_USING_POSIX_GETLINE
#define RT_LIBC_DEFAULT_TIMEZONE 8
RT-Thread libc 初始化
libc 的初始化是在 文件 rt-thread/components/libc/posix/io/libc.c
中进行的。
int libc_system_init(void)
{
#ifdef RT_USING_POSIX_DEVIOrt_device_t dev_console;dev_console = rt_console_get_device();if (dev_console){libc_stdio_set_console(dev_console->parent.name, O_RDWR);}
#endif /* RT_USING_POSIX_DEVIO */#if defined RT_USING_PTHREADS && !defined RT_USING_COMPONENTS_INITpthread_system_init();
#endifreturn 0;
}
INIT_COMPONENT_EXPORT(libc_system_init);
在我的测试代码中,走的是pthread_system_init()
进行初始化。
RT-Thread Pthread 测试
测试代码:
#include <rtthread.h>
#include <pthread.h>#define TEST_STACK_SZ 1024
#define TEST_PRI 0x12static void *pthread_test_callback(void *par)
{rt_kprintf(" %s is called, test ok \n", __func__);return 0;
}typedef void *(*thread_fn_t)(void *par);
static int pthread_test_task_create(thread_fn_t fn, void *par)
{int ret;struct sched_param param;pthread_attr_t attr;pthread_t pid = 0;rt_memset(¶m, 0x0, sizeof(param));rt_memset(&attr, 0x0, sizeof(attr));param.sched_priority = TEST_PRI;pthread_attr_init(&attr);pthread_attr_setschedparam(&attr, ¶m);pthread_attr_setstacksize(&attr, TEST_STACK_SZ);pthread_attr_setschedpolicy(&attr, SCHED_RR);ret =pthread_create(&pid, &attr, fn, par);if (ret) {rt_kprintf("error: pthread teask create failed\n");return -RT_ERROR;}return RT_EOK;
}int pthread_main_test(void)
{int ret;ret = pthread_test_task_create(pthread_test_callback, RT_NULL);if (ret == RT_ERROR) {rt_kprintf("error: pthread main test failed\n");return -RT_ERROR;}return RT_EOK;
}
如果pthread 创建任务成功并得到调度那么会打印rt_kprintf(" %s is called, test ok \n", __func__);
。
测试现象:
相关文章:

【ARMv8M Cortex-M33 系列 8 -- RT-Thread 移植 posix pthread】
文章目录 RT-Thread POSIX PthreadRT-Thread Pthread 相关宏定义RT-Thread libc 初始化RT-Thread Pthread 测试 RT-Thread POSIX Pthread pthread是POSIX(Portable Operating System Interface)标准定义的一套线程相关的API,全称为POSIX Thr…...

fastApi笔记08-Cookie和Header
Cookie 可以像Query,Path,Body等同样的方式来定义Cookie参数 from typing import Annotatedfrom fastapi import Cookie, FastAPIapp FastAPI()app.get("/items/") async def read_items(ads_id: Annotated[str | None, Cookie()] None):r…...

解决pycharm中PIL安装失败
问题:在调用pil时显示pil标红 我在设置中下载每次失败,显示 ERROR: Could not find a version that satisfies the requirement PIL (from versions: none) ERROR: No matching distribution found for PIL我尝试了很久,查看了一些博客 &a…...

数据结构哈希表
这里个大家用数组来模拟哈希表 法一:拉链法 法二:开放寻址法 /** Project: 11_哈希表* File Created:Sunday, January 17th 2021, 2:11:23 pm* Author: Bug-Free* Problem:AcWing 840. 模拟散列表 拉链法*/ #include <cstring> #include <iostr…...

[C#]winform使用引导APSF和梯度自适应卷积增强夜间雾图像的可见性算法实现夜间雾霾图像的可见度增强
【算法介绍】 提升夜间雾霾图像可见度的技术研究:引导APSF与梯度自适应卷积的应用 随着城市化的快速发展,雾霾现象日益严重,尤其是在夜间,雾霾对图像的可见度造成了极大的影响。因此,提升夜间雾霾图像的可见度成为了…...

【Django】Django自定义后台表单——对一个关联外键对象同时添加多个内容
以官方文档为例: 一个投票问题包含多个选项,基本的表单设计只能一个选项一个选项添加,效率较低,如何在表单设计中一次性添加多个关联选项? 示例代码: from django.contrib import adminfrom .models impo…...

迷茫?没有努力的方向?没有耐心去坚持?精选书籍推荐2
迷茫书籍推荐 在渡过自卑期后,下一阶段就是迷茫期,我就是典型。坚持考研失败,然后工作上不顺利,尽管稍稍改变了自卑,但是却因为从前的失败,对下一步何去何从产生了迷茫。这也是我这篇文章希望帮助大家解决的…...

MySQL报错:sql_mode=only_full_group_by解决方法
Linux环境 ubuntu 22.04 MySQL是8.0.35版本 问题描述 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column auth_system.t_class_temp_config.id which is not functionally dependent on columns in GROUP BY clause; this is inco…...

SQL表连接方式
一、SQL中的表连接方式: 内连接(INNER JOIN):返回两个表中符合连接条件的交集。外连接(OUTER JOIN): 左外连接(LEFT JOIN):返回左表中所有记录,以…...

5 原型模式 Prototype
1.模式定义: 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 2.应用场景: 当代码不应该依赖于需要复制的对象的具体类时,请使用Prototype模式。 Spring源码中的应用 org.springframework.beans.factory.support.AbstractB…...

springboot java 项目连接es
springboot java 项目连接es 介绍 小项目,没有引用es客户端,直接使用的http的方式进行连接的,方式比较简单,但是依赖较少,一个比较小的项目,部署方便 业务也很简单就是把数据库中的数据读到es中…...

MySQL学习笔记3: MySQL数据库基础
目录 前言目标数据库操作(针对database 的操作)1. 创建数据库 create database 数据库名;2. 查看数据库 show databases;3. 选中数据库 use 数据库名;4. 删除数据库 drop database 数据库名; mysql中支持的数据类型1. 数值类型: NUMERIC(M,D)2. 字符串类…...

GB/T 17640-2023 长丝机织土工布检测
长丝机织土工布是指以合成纤维长丝为原料织制而成的土工布,按纤维品种分为涤纶、丙纶、锦纶 等长丝机织土工布;按用途分为反滤布、复合用基布、管袋布、模袋布等。 GB/T 17640-2023 长丝机织土工布测试项目: 测试要求 测试标准 经向抗拉强…...

MedicalGPT 训练医疗大模型,实现了包括增量预训练、有监督微调、RLHF(奖励建模、强化学习训练)和DPO(直接偏好优化)
MedicalGPT 训练医疗大模型,实现了包括增量预训练、有监督微调、RLHF(奖励建模、强化学习训练)和DPO(直接偏好优化)。 MedicalGPT: Training Your Own Medical GPT Model with ChatGPT Training Pipeline. 训练医疗大模型,实现了包括增量预训练、有监督微…...

UE4 C++联网RPC教程笔记(一)(第1~4集)
UE4 C联网RPC教程笔记(一)(第1~4集) 前言1. 教程介绍与资源2. 自定义 Debug 功能3. Actor 的复制4. 联网状态判断 前言 本系列笔记将会对梁迪老师的《UE4C联网RPC框架开发吃鸡》教程进行个人的知识点梳理与总结,此课程…...

备战蓝桥杯 Day11(滚动数组优化+完全背包)
01背包的滚动数组优化 【题目描述】 经典0—1背包问题,有n个物品,编号为i的物品的重量为w[i],价值为c[i],现在要从这些物品中选一些物品装到一个容量为m的背包中,使得背包内物体在总重量不超过m的前提下价值尽量大。 #include&…...

Java SE 入门到精通—4.抽象类与接口【Java】
抽象类 同接口一样,用来约束子类,限制子类必须拥有某些方法,比普通类多了个抽象方法,用抽象方法该类必为抽象类 概念 没有具体的对象,具体的方法的一个类 abstract关键字声明为抽象类/方法 一个类中有抽象方法则该…...

Python 开发转 Java 简易路线 - 更新中
有了 Python 开发基础,Java 的内容都可以快速过一遍,复杂地方跟着写一遍。 一、基础 1、Java 基础:尚硅谷 - Java基础 全部快速过一遍, 2、数据库:略。 着重 mysql 高级部分(针对面试)&…...

Python编程语言学习
1.Python 特点 Python是一种简单、易读、易学和高效的编程语言,具有以下特点: 简单易学:Python采用清晰简洁的语法,注重代码的可读性和可维护性,使得初学者能够快速上手并编写出清晰的代码。 面向对象:Py…...

Cartographer框架简述
catographer框架分为前端和后端 前端包括雷达数据处理;位姿预测;扫描匹配和栅格地图更新。 后端包括后端:线程池任务与调度;向位姿图添加节点,计算节点的子图内约束和子图间约束(回环检测)&…...

适用于 Linux、Windows 和 macOS 的免费 ONLYOFFICE 桌面应用程序
前言: 最近也是发现了一款特别好用的免费ONLYOFFICE 桌面应用程序忍不住分享给大家,这款编辑器能够打开、阅读和编辑多种文件类型,包括.docx文档、.pptx幻灯片和.xlsx表格等开放XML格式的Office文档。此外,ONLYOFFICE桌面编辑器还…...

C++面向对象程序设计-北京大学-郭炜【课程笔记(四)】
C面向对象程序设计-北京大学-郭炜【课程笔记(四)】 1、this指针1.1、this指针的作用1.2、this指针和静态成员函数 2、静态成员变量和静态成员函数2.1、基本概念2.2、基本概念总结2.3、如何访问静态成员2.4、静态成员变量的使用场景(重要&…...

前端构建效率优化之路
项目背景 我们的系统(一个 ToB 的 Web 单页应用)前端单页应用经过多年的迭代,目前已经累积有大几十万行的业务代码,30 路由模块,整体的代码量和复杂度还是比较高的。 项目整体是基于 Vue TypeScirpt,而构…...

react实现拖拽的插件
插件一:dnd-kit 插件官网链接https://docs.dndkit.com/introduction/installation 插件二:react-beautiful-dnd https://github.com/atlassian/react-beautiful-dnd/tree/master 两个插件的区别: 插件一可以做到从区域A拖住到区域B 插件二…...

解决Uncaught SyntaxError: Cannot use import statement outside a module(at XXX)报错
报错原因:这个错误通常是因为你正在尝试在一个不支持 ES6 模块语法的环境中使用 import 语句。这可能是因为你的代码是在一个只支持 CommonJS 或 AMD 模块系统的环境中运行的,或者你的代码运行的环境没有正确配置以支持 ES6 模块。如果是在浏览器环境&am…...

PHP如何利用post与get方式传值接收数据
目录 一、POST传值1. 使用curl库发送 POST 请求:2. 使用file_get_contents()函数发送 POST 请求:3. 使用stream_socket_client()函数发送 POST 请求:4. 利用from表单提交数据: 二、GET传值1. 使用http_build_query()函数构建 URL …...

在Mac上搭建MongoDB环境
最近工作中需要装MongoDB环境,搭建过程中遇到了一些问题,在这里记录一下安装MongoDB环境的方法以及问题的解决方法。有两种安装MongoDB的方法:brew安装和手动安装。 目录 使用Homebrew安装MongoDB 手动安装MongoDB(不使用Homebr…...

第三十九天| 62.不同路径、63. 不同路径 II
Leetcode 62.不同路径 题目链接:62 不同路径 题干:一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “…...

提高代码质量的 10 条编码原则
提高代码质量的 10 条编码原则 本文转自 公众号 ByteByteGo,如有侵权,请联系,立即删除 今天来聊聊提高代码质量的 10 条编码原则。 软件开发需要良好的系统设计和编码标准。我们在下图中列出了 10 条良好的编码原则。 01 遵循代码规范 我们…...

SHERlocked93 的 2017 年终总结
回家的路上有点无聊,简短回顾一下2017年的得失收获 开始两个月3月到5月用C#完结了一个烂尾的wpf小项目,对自己前半年的.net生涯也算是一个句号(虽然不知道最后有没有采用),后面由于项目组转变技术栈,选择了…...