【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框架分为前端和后端 前端包括雷达数据处理;位姿预测;扫描匹配和栅格地图更新。 后端包括后端:线程池任务与调度;向位姿图添加节点,计算节点的子图内约束和子图间约束(回环检测)&…...
华硕梅林固件下,让HP1020打印机在Linux网络环境中重获新生
1. 为什么HP1020打印机在Linux网络环境中会"罢工"? 每次看到那台尘封已久的HP LaserJet 1020打印机,我都觉得特别可惜。这台老伙计在Windows系统下表现一直很稳定,但当我尝试把它接入刷了梅林固件的华硕路由器时,却遇到…...
【网络安全基础】计算机网络基础:从TCP/IP协议栈到网络攻击原理
前言在网络安全领域,不懂网络协议,就如同不懂解剖学的医生。无论是分析网络攻击流量、配置防火墙规则,还是进行内网渗透,都离不开对网络协议的深入理解。本文将系统梳理计算机网络的核心知识——从OSI七层模型到TCP/IP协议栈&…...
STORM:基于检索与多视角提问的智能知识策展系统架构解析
STORM:基于检索与多视角提问的智能知识策展系统架构解析 【免费下载链接】storm An LLM-powered knowledge curation system that researches a topic and generates a full-length report with citations. 项目地址: https://gitcode.com/GitHub_Trending/sto/st…...
基于SSM + Vue的二手物品交易网站系统(角色:用户、管理员)
文章目录前言一、详细操作演示视频二、具体实现截图三、技术栈1.前端-Vue.js2.后端-SpringBoot3.数据库-MySQL4.系统架构-B/S四、系统测试1.系统测试概述2.系统功能测试3.系统测试结论五、项目代码参考六、数据库代码参考七、项目论文示例结语前言 💛博主介绍&#…...
Navicat Mac版试用期解除解决方案:3种方法实现永久试用
Navicat Mac版试用期解除解决方案:3种方法实现永久试用 【免费下载链接】navicat_reset_mac navicat16 mac版无限重置试用期脚本 项目地址: https://gitcode.com/gh_mirrors/na/navicat_reset_mac 问题引入:Navicat试用期限制的技术破解需求 对于…...
运维工程师必看:如何用因果AI+DeepSeek实现3分钟精准故障定位(实战案例)
运维工程师必看:如何用因果AIDeepSeek实现3分钟精准故障定位(实战案例) 在当今复杂的云原生和微服务架构环境中,运维工程师面临的挑战前所未有。系统组件间的依赖关系错综复杂,一个微小的故障可能引发连锁反应…...
避开RK3568 MPP开发的那些坑:V4L2缓冲区管理与实时码流稳定性优化实战
RK3568 MPP开发实战:V4L2缓冲区管理与码流稳定性优化指南 在嵌入式视频处理领域,RK3568凭借其强大的多媒体处理能力成为中高端项目的首选方案。但当我们真正将其应用于工业视觉、安防监控等对稳定性要求严苛的场景时,开发者常常会遇到令人头疼…...
百川2-13B-4bits模型商用指南:OpenClaw自动化服务合规部署要点
百川2-13B-4bits模型商用指南:OpenClaw自动化服务合规部署要点 1. 商用授权与合规基础 百川2-13B-4bits模型作为国内少数明确开放商用申请的大语言模型,其授权体系与常见的开源协议有本质区别。我在实际部署过程中发现,很多开发者容易忽略一…...
Windows Cleaner:智能存储管理解决方案让C盘空间释放效率提升60%
Windows Cleaner:智能存储管理解决方案让C盘空间释放效率提升60% 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 当系统频繁弹出"磁盘空间不足&q…...
Netgear路由器Telnet功能启用工具:技术解析与实践指南
Netgear路由器Telnet功能启用工具:技术解析与实践指南 【免费下载链接】netgear_telnet Netgear Enable Telnet (New Crypto) 项目地址: https://gitcode.com/gh_mirrors/ne/netgear_telnet 一、功能价值:技术突破点与应用场景 1.1 核心功能概述…...
