rtthread 学习

news/2024/12/22 13:28:48/

地址对齐

在大多数系统中需要做栈空间地址对齐,例如在 ARM 体系结构中需要向 4 字节地址对齐。
实现栈对齐的方法为,在定义栈之前,放置一条 ALIGN(RT_ALIGN_SIZE)语句,指定接下来定义的变量的地址对齐方式。其中 ALIGN 是在 rtdef.h 里面定义的一个宏,根据编译器不一样,该宏的具体定义是不一样的,在 ARM 编译器中,该宏的定义具体见代码清单 14-5。ALIGN 宏的形参 RT_ALIGB_SIZE 是在 rtconfig.h 中的一个宏,目前定义为 4。

 /* 定义线程控栈时要求 RT_ALIGN_SIZE 个字节对齐 */
2 ALIGN(RT_ALIGN_SIZE)
3 /* 定义线程栈 */
4 static rt_uint8_t rt_led1_thread_stack[1024];
/* 只针对 ARM 编译器,在其它编译器,该宏的实现会不一样 */
1 #define ALIGN(n) __attribute__((aligned(n)))

静态创建线程

/* 定义线程控制块 */
static struct rt_thread led1_thread;#include "rtdef.h"
ALIGN(RT_ALIGN_SIZE)/* 定义线程栈 */
static rt_uint8_t rt_led1_thread_stack[1024];/*线程函数*/
static void led1_thread_entry(void* parameter);rt_thread_init(&led1_thread, /* 线程控制块 */ "led1", /* 线程名字 */ led1_thread_entry, /* 线程入口函数 */ RT_NULL, /* 线程入口函数参数 */ &rt_led1_thread_stack[0], /* 线程栈起始地址 */ sizeof(rt_led1_thread_stack), /* 线程栈大小 */ 3, /* 线程的优先级 */ 20); /* 线程时间片 */ rt_thread_startup(&led1_thread); /* 启动线程,开启调度 */rt_err_t rt_thread_detach (rt_thread_t thread); //删除静态创建线程

动态创建线程

/*定义线程控制块*/
static rt_thread_t led1_thread = RT_NULL;
/*线程函数*/
static void led1_thread_entry(void* parameter);led1_thread = rt_thread_create( "led1", /* 线程名字 */ led1_thread_entry, /* 线程入口函数 */RT_NULL, /* 线程入口函数参数 */512, /* 线程栈大小 */ 3, /* 线程的优先级 */20); /* 线程时间片 */ if (led1_thread != RT_NULL)rt_thread_startup(led1_thread); /* 启动线程,开启调度 */elsereturn -1;
rt_err_t rt_thread_delete(rt_thread_t thread); //删除动态创建线程

线程睡眠

rt_err_t rt_thread_sleep(rt_tick_t tick);
rt_err_t rt_thread_delay(rt_tick_t tick);
rt_err_t rt_thread_mdelay(rt_int32_t ms);

信号量

在这里插入图片描述

互斥量

在这里插入图片描述

事件集

在这里插入图片描述

邮箱

在这里插入图片描述

消息队列

在这里插入图片描述

信号

在这里插入图片描述

中断

在这里插入图片描述


http://www.ppmy.cn/news/1405407.html

相关文章

ubuntu下mysql常用命令

1. 登录数据库 mysql -u root -p 2.创建数据库 create database 数据库名字 mysql> create database yourdb; Query OK, 1 row affected (0.03 sec)3.显示数据库 show databases; 实操结果如下 mysql> show databases; -------------------- | Database | ---…

Mysql中的那些索引

主键索引 表的主键使用的就是主键索引,一张表只能有一个主键索引,主键索引不能为null,且不能重复。 主键索引存在于B树的非叶子节点和叶子节点,叶子节点存放的还有数据。 非主键索引 非主键索引也叫二级索引,包括有唯一索引&a…

【Golang星辰图】数据处理的航海家:征服数据海洋的航行工具

数据处理的建筑师:用Go语言中构建稳固的数据分析建筑物 前言 数据处理和分析是现代计算机科学中的关键任务之一,而Go语言作为一门现代化的编程语言,也需要强大的数据处理和分析库来支持其在这一领域的应用。本文将介绍几款优秀的数据处理和…

CSS基础选择器 小案例复习(画三个小盒子)

(大家好,前面我们学习了基础的选择器,俗话说:温故而知新。所以今天我们将通过小案例来复习前面学过的小知识点。另,十分感谢大家对我文章的支持❤️) 通过这个案例复习两个地方: 类选择器的使用…

SQLite中的隔离(八)

返回:SQLite—系列文章目录 上一篇:SQLite版本3中的文件锁定和并发(七) 下一篇:SQLite 查询优化器概述(九) 数据库的“isolation”属性确定何时对 一个操作的数据库对其他并发操作可见。 数据库连接之…

Ubuntu服务器搭建 - 环境篇

Ubuntu服务器搭建 - 环境篇 基于腾讯云服务器 - Ubuntu 20.04 LTS 一、安装 - MySQL 1.1 概述 MySQL安装方式有三种: 1. 使用Ubuntu 包管理工具 apt安装 2. 使用MySQL官方APT存储库安装 3. 使用MySQL官方二进制发行版安装 1.2 安装 MySQL 使用MySQL官方APT存储库安装 $ wget…

基于springboot+vue+Mysql的招生管理系统

开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…

【python学习笔记】pandas写入数据库时出现 “nan can‘t be used with mysql“ 错误的解决方法

pandas写入数据库时出错:nan cant be used with mysql pandas写入数据库时出错的解决方法pandas 2.0以前的版本pandas 2.0以上版本2.0以前版本的pandas是否能采用2.0以上版本的方法替换成None? pandas写入数据库时出错的解决方法 在使用pandas将一段数据…