From 96d5dbabc64542690caf3f779755130098ab9bfc Mon Sep 17 00:00:00 2001 From: chopupu <1123478123@qq.com> Date: Wed, 14 May 2025 16:38:49 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=B5=8C=E5=85=A5?= =?UTF-8?q?=E5=BC=8F=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/Embedded/Embedded.md | 7 --- docs/zh/docs/Embedded/UniProton/_toc.yaml | 10 ++++ .../zh/docs/Embedded/UniProton/overview.md | 8 ++- .../docs/Embedded/UniProton/uniproton_apis.md | 27 +++++----- .../Embedded/UniProton/uniproton_functions.md | 50 ++----------------- docs/zh/docs/Embedded/_toc.yaml | 0 6 files changed, 32 insertions(+), 70 deletions(-) delete mode 100644 docs/zh/docs/Embedded/Embedded.md create mode 100644 docs/zh/docs/Embedded/UniProton/_toc.yaml rename "docs/zh/docs/Embedded/UniProton/UniProton\347\224\250\346\210\267\346\214\207\345\215\227-\346\246\202\350\277\260.md" => docs/zh/docs/Embedded/UniProton/overview.md (92%) rename "docs/zh/docs/Embedded/UniProton/UniProton\346\216\245\345\217\243\350\257\264\346\230\216.md" => docs/zh/docs/Embedded/UniProton/uniproton_apis.md (99%) rename "docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" => docs/zh/docs/Embedded/UniProton/uniproton_functions.md (92%) create mode 100644 docs/zh/docs/Embedded/_toc.yaml diff --git a/docs/zh/docs/Embedded/Embedded.md b/docs/zh/docs/Embedded/Embedded.md deleted file mode 100644 index 9da58178e..000000000 --- a/docs/zh/docs/Embedded/Embedded.md +++ /dev/null @@ -1,7 +0,0 @@ -# 嵌入式 - -本文档主要包含以下内容: - -- openEuler Embedded用户指南:介绍openEuler Embedded如何使用、如何构建,如何开发的相关内容。 - -- UniProton用户指南:介绍UniProton的基本功能和接口说明。 diff --git a/docs/zh/docs/Embedded/UniProton/_toc.yaml b/docs/zh/docs/Embedded/UniProton/_toc.yaml new file mode 100644 index 000000000..44a46ce76 --- /dev/null +++ b/docs/zh/docs/Embedded/UniProton/_toc.yaml @@ -0,0 +1,10 @@ +label: UniProton用户指南 +isManual: true +description: UniProton是面向嵌入式场景的操作系统,支持任务和内存管理、中断处理,提供强大调试能力 +sections: + - label: 概述 + href: ./overview.md + - label: UniProton功能设计 + href: ./uniproton_functions.md + - label: UniProton接口说明 + href: ./uniproton_apis.md diff --git "a/docs/zh/docs/Embedded/UniProton/UniProton\347\224\250\346\210\267\346\214\207\345\215\227-\346\246\202\350\277\260.md" b/docs/zh/docs/Embedded/UniProton/overview.md similarity index 92% rename from "docs/zh/docs/Embedded/UniProton/UniProton\347\224\250\346\210\267\346\214\207\345\215\227-\346\246\202\350\277\260.md" rename to docs/zh/docs/Embedded/UniProton/overview.md index 920972560..79ecdf23c 100644 --- "a/docs/zh/docs/Embedded/UniProton/UniProton\347\224\250\346\210\267\346\214\207\345\215\227-\346\246\202\350\277\260.md" +++ b/docs/zh/docs/Embedded/UniProton/overview.md @@ -1,13 +1,11 @@ -# UniProton用户指南 +# UniProton用户指南 -## 介绍 +## 介绍 UniProton是基于openEuler社区面向嵌入式场景的操作系统,旨在成为一个高质量的为上层业务软件屏蔽底层硬件差异,并提供强大的调试功能的操作系统平台。使业务软件可以在不同的硬件平台之间快速移植,方便产品芯片选型,降低硬件采购成本和软件维护成本。 本文档主要用于介绍UniProton的基本功能和接口说明,便于开发人员了解基本的UniProton操作系统知识。 -## 编译教程 +## 编译教程 相关编译教程,可参考:[https://gitee.com/openeuler/UniProton/blob/master/doc/UniProton_build.md](https://gitee.com/openeuler/UniProton/blob/master/doc/UniProton_build.md/)。 - - diff --git "a/docs/zh/docs/Embedded/UniProton/UniProton\346\216\245\345\217\243\350\257\264\346\230\216.md" b/docs/zh/docs/Embedded/UniProton/uniproton_apis.md similarity index 99% rename from "docs/zh/docs/Embedded/UniProton/UniProton\346\216\245\345\217\243\350\257\264\346\230\216.md" rename to docs/zh/docs/Embedded/UniProton/uniproton_apis.md index baf44a5c2..60d4b6723 100644 --- "a/docs/zh/docs/Embedded/UniProton/UniProton\346\216\245\345\217\243\350\257\264\346\230\216.md" +++ b/docs/zh/docs/Embedded/UniProton/uniproton_apis.md @@ -3231,6 +3231,7 @@ imaxdiv()函数将计算intmax_t型除法的商和余数。如果余数或商不 #### wcstol wcstol()将宽字符串转换为long型正数。输入字符串分解为三部分。 + 1. 初始的(可能为空的)空白宽字符代码序列(由iswspace()指定)。 2. long型整数,进制的类型由base入参决定。 3. 由一个或多个无法识别的宽字符代码组成的最终宽字符串。 @@ -3242,6 +3243,7 @@ wcstol()将宽字符串转换为long型正数。输入字符串分解为三部 #### wcstod wcstod()将宽字符串转换为double型浮点数。输入字符串分解为三部分。 + 1. 初始的(可能为空的)空白宽字符代码序列(由iswspace()指定)。 2. double型浮点数、无穷大或者NaN。 3. 由一个或多个无法识别的宽字符代码组成的最终宽字符串。 @@ -3317,6 +3319,7 @@ imaxabs()函数计算并返回intmax_t型的绝对值。 #### strtol strtol()函数转换字符串到long型数值。这将nptr所指向的字符串的初始部分转换为long类型的表示形式。首先,它们将输入字符串分解为三部分: + 1. 一个初始的、可能为空的空白字符序列(由isspace()函数判断)。 2. long型整数,进制的类型由base入参决定。 3. 由一个或多个不可识别字符组成的最后字符串,包括输入字符串的终止NUL字符。 @@ -3328,6 +3331,7 @@ strtol()函数转换字符串到long型数值。这将nptr所指向的字符串 #### strtod strtod()函数将字符串转换为double型。输入字符串分解为三部分。 + 1. 初始的(可能为空的)空白字符代码序列(由isspace()指定)。 2. double型浮点数、无穷大或者NaN。 3. 由一个或多个无法识别的字符代码组成的最终字符串。 @@ -3577,7 +3581,7 @@ errno: 暂不支持 -####shmdt +#### shmdt 暂不支持 @@ -5551,7 +5555,6 @@ vwscanf()函数从标准输入stdin中读取格式化的数据到变量参数列 - 成功匹配数:操作成功。 - -1:操作失败。 - ## C11接口 | 接口名 | 适配情况 | @@ -5874,7 +5877,7 @@ tss_set() 函数应将线程特定的 value 与通过先前调用 tss_create() | [ftime](#ftime) | 支持 | | [timegm](#timegm) | 支持 | -#### pthread_getattr_default_np +### pthread_getattr_default_np pthread_getattr_default_np() 函数初始化attr引用的线程属性对象,使其包含用于创建线程的默认属性。 @@ -5885,7 +5888,7 @@ pthread_getattr_default_np() 函数初始化attr引用的线程属性对象, - 0:操作成功。 - EINVAL:指针未初始化。 -#### pthread_setattr_default_np +### pthread_setattr_default_np pthread_setattr_default_np() 函数用于设置创建新线程的默认属性,即当使用NULL的第二个参数调用pthread_create时使用的属性。 @@ -5896,7 +5899,7 @@ pthread_setattr_default_np() 函数用于设置创建新线程的默认属性, - 0:操作成功。 - EINVAL:指针未初始化。 -#### pthread_getattr_np +### pthread_getattr_np pthread_getattr_np() 函数初始化attr引用的线程属性对象,使其包含描述正在运行的线程线程的实际属性值。 @@ -5910,7 +5913,7 @@ pthread_getattr_np() 函数初始化attr引用的线程属性对象,使其包 - 0:操作成功。 - 非0值:操作失败。 -#### pthread_getname_np +### pthread_getname_np pthread_getname_np() 函数可用于检索线程的名称。thread参数指定要检索其名称的线程。 @@ -5925,7 +5928,7 @@ pthread_getname_np() 函数可用于检索线程的名称。thread参数指定 - 0:操作成功。 - EINVAL:指针未初始化。 -#### pthread_setname_np +### pthread_setname_np pthread_setname_np() 函数可用于设置线程的名称。 @@ -5940,7 +5943,7 @@ pthread_setname_np() 函数可用于设置线程的名称。 - 0:操作成功。 - EINVAL:指针未初始化。 -#### pthread_timedjoin_np +### pthread_timedjoin_np 类似pthread_join,如果线程尚未终止,则调用将阻塞直到abstime中指定的最大时间。如果超时在线程终止之前到期,则调用将返回错误。 @@ -5956,7 +5959,7 @@ pthread_setname_np() 函数可用于设置线程的名称。 - EINVAL:指针未初始化。 - ETIMEDOUT:阻塞超时。 -#### pthread_tryjoin_np +### pthread_tryjoin_np 类似pthread_join,但如果线程尚未终止,将立即返回EBUSY。 @@ -5971,7 +5974,7 @@ pthread_setname_np() 函数可用于设置线程的名称。 - EINVAL:指针未初始化。 - EBUSY:调用时线程尚未终止。 -#### ftime +### ftime 取得当前的时间和日期,由一个timeb结构体返回。 @@ -5981,7 +5984,7 @@ pthread_setname_np() 函数可用于设置线程的名称。 **输出**:无 -#### timegm +### timegm 将tm结构体表示的时间转换为自一个标准时间点以来的时间,不受本地时区的影响。 @@ -6305,4 +6308,4 @@ errno: - OS_ERRNO_SHELL_CMDREG_PARA_ERROR:无效的输入参数。 - OS_ERRNO_SHELL_CMDREG_CMD_ERROR:无效的字符串关键字。 - OS_ERRNO_SHELL_CMDREG_CMD_EXIST:关键字已存在。 -- OS_ERRNO_SHELL_CMDREG_MEMALLOC_ERROR:内存不足。 \ No newline at end of file +- OS_ERRNO_SHELL_CMDREG_MEMALLOC_ERROR:内存不足。 diff --git "a/docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" b/docs/zh/docs/Embedded/UniProton/uniproton_functions.md similarity index 92% rename from "docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" rename to docs/zh/docs/Embedded/UniProton/uniproton_functions.md index aec2ada3f..d3c5480cf 100644 --- "a/docs/zh/docs/Embedded/UniProton/UniProton\345\212\237\350\203\275\350\256\276\350\256\241.md" +++ b/docs/zh/docs/Embedded/UniProton/uniproton_functions.md @@ -1,43 +1,5 @@ # UniProton功能设计 - - -- [UniProton功能设计](#uniproton功能设计) - - - [支持任务管理](#支持任务管理) - - - [支持事件管理](#支持事件管理) - - - [支持队列管理](#支持队列管理) - - - [支持硬中断管理](#支持硬中断管理) - - - [支持内存管理](#支持内存管理) - - ​ [FSC内存算法](#fsc内存算法) - - ​ [核心思想](#核心思想) - - ​ [内存申请](#内存申请) - - ​ [内存释放](#内存释放) - - - [支持定时器管理](#支持定时器管理) - - - [支持信号量管理](#支持信号量管理) - - - [支持异常管理](#支持异常管理) - - - [支持CPU占用率统计](#支持cpu占用率统计) - - - [支持STM32F407ZGT6开发板](#支持stm32f407zgt6开发板) - - - [支持OpenAMP混合部署](#支持openamp混合部署) - - - [支持POSIX标准接口](#支持posix标准接口) - - - ## 支持任务管理 UniProton是一个单进程支持多线程的操作系统。在UniProton中,一个任务表示一个线程。UniProton中的任务为抢占式调度机制,而非时间片轮转调度方式。高优先级的任务可打断低优先级任务,低优先级任务必须在高优先级任务挂起或阻塞后才能得到调度。 @@ -80,7 +42,7 @@ UniProton创建队列时,根据用户传入队列长度和消息单元大小 如下简要描述一下FSC内存算法: -### FSC内存算法 +### FSC内存算法 #### 核心思想 @@ -128,18 +90,14 @@ UniProton创建队列时,根据用户传入队列长度和消息单元大小 - 申请(Pend):Pend 操作等待指定的信号量,若其计数器值大于0,则直接减1返回成功。否则任务阻塞,等待其他线程发布该信号量,等待的容忍时间可设定。 - - 释放(Post):Post操作发布指定的信号量,若无任务等待该信号量,则直接将计数器加1返回。否则唤醒为此信号量挂起的任务列表中的第一个任务(最早阻塞的)。 - 通常一个信号量的计数值用于对应有效的资源数,表示剩余可被占用的互斥资源数。其值的含义如下有两种情况: - 为0值:表示没有积累下来的Post操作,且有可能有在此信号量上阻塞的任务。 - - 为正值:表示有一个或多个Post下来的发布操作。 - ## 支持异常管理 UniProton中的异常接管属于维测特性,其主要目的是在系统出现异常后,记录尽可能多的异常现场信息,便于后续问题定位。同时提供异常时的钩子函数,便于用户能够在异常发生时做一些用户化的特殊处理。其主要功能是接管内部异常处理或者外部硬件异常。 @@ -181,11 +139,11 @@ OpenAMP是一个开源软件框架,旨在通过非对称多处理器的开源 ## 支持POSIX标准接口 -[UniProton支持posix标准接口](./UniProton接口说明.md) +[UniProton支持posix标准接口](./uniproton_apis.md) ## 支持设备驱动 -UniProton的驱动结构、风格与linux类似,将驱动设备文件化,即VFS系统,通过驱动注册接口,将驱动注册到文件系统中,应用层只需要通过标准系统调用,即可调用底层驱动。整个驱动框架代码适配自开源RTOS系统Nuttx的驱动模块,因此接口调用也与Nuttx基本一致。struct file_operations结构体保存设备文件操作的方法,定义在fs.h头文件中,通过register_driver接口将驱动设备挂到对应的struct inode节点中,struct inode描述了每个设备节点的位置和数据。当系统调用操作设备文件时,根据对应文件的inode就能索引到对应的函数。接口详细信息可以查看[UniProton接口说明](./UniProton接口说明.md)。 +UniProton的驱动结构、风格与linux类似,将驱动设备文件化,即VFS系统,通过驱动注册接口,将驱动注册到文件系统中,应用层只需要通过标准系统调用,即可调用底层驱动。整个驱动框架代码适配自开源RTOS系统Nuttx的驱动模块,因此接口调用也与Nuttx基本一致。struct file_operations结构体保存设备文件操作的方法,定义在fs.h头文件中,通过register_driver接口将驱动设备挂到对应的struct inode节点中,struct inode描述了每个设备节点的位置和数据。当系统调用操作设备文件时,根据对应文件的inode就能索引到对应的函数。接口详细信息可以查看[UniProton接口说明](./uniproton_apis.md)。 ## 支持Shell命令行 @@ -196,4 +154,4 @@ UniProton提供shell命令行,它能够以命令行交互的方式访问操作 | SHELLCMD_ENTRY | 静态注册命令 | | osCmdReg | 动态注册命令 | -通常静态注册命令方式一般用于注册系统常用命令,动态注册命令方式一般用于注册用户命令。静态注册命令有5个入参,动态注册命令有4个入参。下面除去第一个入参是静态注册独有的,剩余的四个入参两个注册命令是一致的。接口详细信息可以查看[UniProton接口说明](./UniProton接口说明.md) \ No newline at end of file +通常静态注册命令方式一般用于注册系统常用命令,动态注册命令方式一般用于注册用户命令。静态注册命令有5个入参,动态注册命令有4个入参。下面除去第一个入参是静态注册独有的,剩余的四个入参两个注册命令是一致的。接口详细信息可以查看[UniProton接口说明](./uniproton_apis.md)。 diff --git a/docs/zh/docs/Embedded/_toc.yaml b/docs/zh/docs/Embedded/_toc.yaml new file mode 100644 index 000000000..e69de29bb -- Gitee From 444f4bd2b771fb2cf7e545ffdece1c2476ecb27c Mon Sep 17 00:00:00 2001 From: chopupu <1123478123@qq.com> Date: Wed, 14 May 2025 17:01:35 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E8=A7=84=E8=8C=83=E5=B5=8C=E5=85=A5?= =?UTF-8?q?=E5=BC=8F=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/zh/docs/Embedded/UniProton/overview.md | 2 +- docs/zh/docs/Embedded/UniProton/uniproton_apis.md | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/zh/docs/Embedded/UniProton/overview.md b/docs/zh/docs/Embedded/UniProton/overview.md index 79ecdf23c..84d252fa8 100644 --- a/docs/zh/docs/Embedded/UniProton/overview.md +++ b/docs/zh/docs/Embedded/UniProton/overview.md @@ -8,4 +8,4 @@ UniProton是基于openEuler社区面向嵌入式场景的操作系统,旨在 ## 编译教程 -相关编译教程,可参考:[https://gitee.com/openeuler/UniProton/blob/master/doc/UniProton_build.md](https://gitee.com/openeuler/UniProton/blob/master/doc/UniProton_build.md/)。 +相关编译教程,可参考:。 diff --git a/docs/zh/docs/Embedded/UniProton/uniproton_apis.md b/docs/zh/docs/Embedded/UniProton/uniproton_apis.md index 60d4b6723..07cea125d 100644 --- a/docs/zh/docs/Embedded/UniProton/uniproton_apis.md +++ b/docs/zh/docs/Embedded/UniProton/uniproton_apis.md @@ -1843,7 +1843,6 @@ sem_destroy()函数销毁 sem 指示的匿名信号量。只有使用 sem_init() 2. oflag参数控制信号量是创建还是仅通过调用sem_open()访问。以下标志位可以在oflag中设置: - O_CREAT:如果信号量不存在,则此标志用于创建信号量。 - - O_EXCL:如果设置了O_EXCL和O_CREAT,且信号量名称存在,sem_open()将失败。如果设置了O_EXCL而未设置O_CREAT,则效果未定义。 3. 如果在oflag参数中指定了O_CREAT和O_EXCL以外的标志,则效果未指定。 -- Gitee