0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RT-Thread針對(duì)PSE51標(biāo)準(zhǔn)規(guī)定頭文件及對(duì)應(yīng)接口

科技綠洲 ? 來(lái)源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 作者:RTThread物聯(lián)網(wǎng)操作 ? 2022-04-26 10:55 ? 次閱讀

可移植操作系統(tǒng)接口,POSIX 標(biāo)準(zhǔn)定義了操作系統(tǒng)(很多時(shí)候針對(duì)的是類(lèi) Unix 操作系統(tǒng))應(yīng)該為應(yīng)用程序提供的接口標(biāo)準(zhǔn),從而保證了應(yīng)用程序在源碼層次的可移植性,如今主流的 Linux 系統(tǒng)都做到了兼容 POSIX 標(biāo)準(zhǔn)。由此可見(jiàn),可移植性是 POSIX 的一大特性,如果一個(gè)操作系統(tǒng)擬合了POSIX系統(tǒng),就將可以將自己的 POSIX 應(yīng)用輕松遷移到其他同樣符合POSIX標(biāo)準(zhǔn)的系統(tǒng)平臺(tái),并且可以獲得大量的 POSIX 應(yīng)用,豐富自己系統(tǒng)的應(yīng)用生態(tài)。

POSIX 為了提供不同層級(jí)的RTOS能力,劃定了 PSE51, PSE52, PSE53, PSE54 共四個(gè)級(jí)別;分別對(duì)應(yīng)了四種操作系統(tǒng)。

1、Minimal Real-time System Profile IEEE Std 1003.13 PSE51,基礎(chǔ) RTOS

2、Real-time Controller Profile IEEE Std 1003.13 PSE52,帶有簡(jiǎn)單的文件系統(tǒng)…等

3、Dedicated Real-time Profile IEEE Std 1003.13 PSE53,擁有網(wǎng)絡(luò)功能…等

4、Multi-Purpose Real-time Profile IEEE Std 1003.13 PSE54,完整的文件系統(tǒng),帶有 Shell 組件…等

poYBAGJnXmSAPcAZAAEfbdI81nM851.png

由于標(biāo)準(zhǔn)的制定是隨著時(shí)間發(fā)展而不斷更新的,PSE51, 52, 53, 54 的標(biāo)準(zhǔn)也隨著 MCU,MPU 芯片產(chǎn)業(yè)的發(fā)展,不斷增強(qiáng)的芯片功能和性能使得這些標(biāo)準(zhǔn)所對(duì)應(yīng)的四種操作系統(tǒng)的界限而越顯模糊。在 RT-Thread 中也依靠自身的組件內(nèi)容,提供了多種標(biāo)準(zhǔn)的部分內(nèi)容,為不同的 POSIX 應(yīng)用提供可供在 RTOS 系統(tǒng)上使用的軟件。

2. POSIX 在 RT-Thread 中支持情況

RT-Thread 針對(duì) PSE51 的標(biāo)準(zhǔn)規(guī)定的頭文件及對(duì)應(yīng)接口,提供了大部分接口。除此之外,我們還提供了更加完整的文件系統(tǒng)的接口,以及基于我們 SAL 組件的網(wǎng)絡(luò)接口。這為 POSIX 的應(yīng)用遷移打下了基礎(chǔ),可以使得較復(fù)雜的 POSIX 應(yīng)用也可以經(jīng)過(guò)小部分修改就可以在 RT-Thread 上運(yùn)行。

pYYBAGJnXnSAaUuzAAEQScAh5ew479.png

POSIX FILE 相關(guān)接口,包含了文件系統(tǒng)的內(nèi)容,接口比較豐富;標(biāo)準(zhǔn) I/O 接口,Poll / Select 等較復(fù)雜的功能也已經(jīng)支持

Delay 相關(guān)接口

Clock 相關(guān)接口,對(duì)擁有 RTC 硬件,或者沒(méi)有使用 RTC 硬件的設(shè)備都有對(duì)應(yīng)的功能實(shí)現(xiàn)

Timer 相關(guān)接口,已經(jīng)對(duì)接到 RT-Thread 的定時(shí)器接口,實(shí)現(xiàn)對(duì)應(yīng)的函數(shù)

Pthread 相關(guān)接口,在多任務(wù)編程中使用很廣泛

Dynamic 動(dòng)態(tài)模塊

POSIX 的 標(biāo)準(zhǔn) IPC 接口 :pipe ,message,semaphore 等函數(shù)

通過(guò)上面靈活的配置項(xiàng),開(kāi)發(fā)者可以啟用對(duì)應(yīng)的功能來(lái)添加該類(lèi)函數(shù)的支持;這對(duì)與同樣使用功能宏來(lái)標(biāo)識(shí)一些函數(shù)功能的 POSIX 接口來(lái)說(shuō)十分類(lèi)似,在該界面可以配置對(duì)應(yīng)的 POSIX 函數(shù)支持。

3. POSIX 的實(shí)現(xiàn)簡(jiǎn)介由于 RT-Thread 作為一個(gè)可以兼容多種開(kāi)發(fā)方式的操作系統(tǒng),針對(duì) ARMCC,ARMCLANG,IARCC,GCC 現(xiàn)階段占比比較多的開(kāi)發(fā)工具鏈都做了對(duì)應(yīng)的適配。所以,簡(jiǎn)單描述一下RT-Thread 在做適配時(shí),針對(duì)不同的編譯平臺(tái)所做得操作,以及對(duì)應(yīng)的關(guān)系圖。

pYYBAGJnXoaAQo4yAACvKXFKflk001.png

由于在不同的平臺(tái)開(kāi)發(fā)所使用的編譯工具鏈不一致;所以在實(shí)現(xiàn)時(shí),RT-Thread 區(qū)分了三個(gè)概念:廣義的 POSIX,狹隘的 POSIX,編譯器配平層;下面結(jié)合關(guān)系圖,描述一下對(duì)應(yīng)的概念:

廣義的 POSIX ,即 POSIX 接口;這里面包含了一些關(guān)于 pthread, signal, IPC 等函數(shù)以及 C 庫(kù)的相關(guān)內(nèi)容;

狹隘的 POSIX,即不是 C 庫(kù)標(biāo)準(zhǔn)提供以外的 POSIX 函數(shù),例如 pthread 這些內(nèi)容;

編譯器配平層,由 C 庫(kù)相關(guān)提供的函數(shù)。由于不同編譯平臺(tái)對(duì)該內(nèi)容的實(shí)現(xiàn)參差不齊,因此需要針對(duì)不同的編譯平臺(tái)增補(bǔ)這些函數(shù)。這也就是 “ 配平 ” 的由來(lái)。這塊內(nèi)容較多,且不同的編譯工具鏈所支持的操作不一,因此在 POSIX 代碼遷移時(shí)需要修改這里來(lái)解決對(duì)應(yīng)的編譯錯(cuò)誤。

4. POSIX 在 RT-Thread 中使用方法

4.1 Pthread 接口

poYBAGJnXpqADXMEAAB9AYFA-9c456.png

1、在 menuconfig 中打開(kāi) pthread ,設(shè)定支持得最大 pthread 數(shù)目

2、在用戶(hù)代碼中,即可使用 pthread.h, sche.h 這些 pthread 提供的頭文件來(lái)編程

pYYBAGJnXsGAbo19AABeDvh-wu0035.png

4.2 Timer 接口

poYBAGJnXtGATJM9AABo4M9ZdTQ847.png

1、在 menuconfig 中打開(kāi) timer 即可

2、在用戶(hù)代碼中,即可使用 這些 timer 提供的頭文件來(lái)編程

poYBAGJnXuCAWxzXAAAkk8yzkUU148.png

4.3 Net 接口

1、在 menuconfig 中打開(kāi) Enable BSD Socket I/O 就可以使用標(biāo)準(zhǔn) Socket 進(jìn)行編程

4.4 Filesystem 接口

1、在 menuconfig 中打開(kāi)Enable POSIX file system and I/O 配置具體的 POSIX 函數(shù)接口

2、按照需求打開(kāi)需要的功能,例如 設(shè)備I/O,AIO,MMAN 之類(lèi)的功能

4.5 其他接口

其他接口也是一樣,開(kāi)打?qū)?yīng)的 menuconfig 選項(xiàng),即可使用對(duì)應(yīng)頭文件,及提供的函數(shù)來(lái)編程。整個(gè)過(guò)程不需要 rt-thread 的頭文件參與,使編譯出的代碼運(yùn)行在 RT-Thread 操作系統(tǒng)之上。

5. 注意事項(xiàng)5.1 不同編譯平臺(tái)的兼容

在上一節(jié),編譯器配平層的存在解決了多組編譯工具鏈不一致造成的問(wèn)題;同時(shí),也引入了一些在編寫(xiě)代碼時(shí)需要注意的事項(xiàng)。這些注意事項(xiàng)是為了解決對(duì)應(yīng)的編譯錯(cuò)誤。因?yàn)榫幾g工具鏈有的允許頭文件替換,有的不支持這些問(wèn)題。RT-Thread 提供了一個(gè)相對(duì)輕便的解決辦法:

為保證跨不同編譯器、不同工具鏈的兼容性,建議用戶(hù)應(yīng)用層代碼:

使用 《sys/time.h》 代替 《time.h》

使用 《sys/errno.h》 代替 《errno.h》

使用 《sys/signal.h》 代替 《signal.h》

有使用 《time.h》 的引用邏輯的,修改為 《sys/time.h》 的方式來(lái)避免編譯錯(cuò)誤;其他兩個(gè)也是類(lèi)似的處理邏輯,擬合不同編譯工具鏈的處理邏輯。

5.2 Net 接口

啟用網(wǎng)絡(luò)功能后,并不是所有的 BSD Socket 接口都支持,在 RT-Thread 中只實(shí)現(xiàn)了一部分函數(shù)。因此如果對(duì)應(yīng)函數(shù)缺失,需要按照代碼邏輯替換為基礎(chǔ)的 Socket 接口來(lái)兼容原邏輯。完整的 BSD Socket 功能將持續(xù)優(yōu)化以解決這個(gè)問(wèn)題。

審核編輯:彭菁
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    8448

    瀏覽量

    150724
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4284

    瀏覽量

    62325
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1617

    瀏覽量

    49016
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1261

    瀏覽量

    39839
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    RT-Thread文件系統(tǒng)的基本知識(shí)和使用方法

    為了能讓開(kāi)發(fā)者清楚地理解 RT-Thread DFS 框架的概念,學(xué)會(huì)使用 RT-Thread 文件系統(tǒng)。本應(yīng)用筆記將一步步深入介紹 RT-Thread DFS 框架的相關(guān)知識(shí)以及實(shí)
    的頭像 發(fā)表于 08-17 10:01 ?3.1w次閱讀
    <b class='flag-5'>RT-Thread</b><b class='flag-5'>文件</b>系統(tǒng)的基本知識(shí)和使用方法

    RT-Thread NUC97x 移植 LVGL

    不涉及 rt-thread 驅(qū)動(dòng),但是它是 LVGL 和 rt-thread接口。LVGL 在 rt-thread 上運(yùn)行的基石。
    發(fā)表于 07-08 09:37 ?1460次閱讀

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開(kāi)發(fā)組(2015-03-31)。RT-Thread做為國(guó)內(nèi)有較大影響力的開(kāi)源實(shí)時(shí)操作系統(tǒng),本文是RT-Thread實(shí)時(shí)操作系統(tǒng)的編程指南
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread用戶(hù)手冊(cè)

    RT-Thread用戶(hù)手冊(cè)——本書(shū)是RT-Thread的編程手冊(cè),用于指導(dǎo)在RT-Thread實(shí)時(shí)操作系統(tǒng)環(huán)境下如何進(jìn)行編 程。
    發(fā)表于 11-26 16:16 ?0次下載

    RT-Thread STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    ,沒(méi)有更新最新版本軟件)RT-Thread內(nèi)核:V4.0.2STM32 CubeMX: V5.6.0一、創(chuàng)建RT-Thread項(xiàng)目打開(kāi)RT-Thread Studio菜單欄→\rightarrow→
    發(fā)表于 12-14 18:45 ?14次下載
    <b class='flag-5'>RT-Thread</b> STM32 配置系統(tǒng)時(shí)鐘(使用外部晶振)

    RT-Thread Studio驅(qū)動(dòng)SD卡

    總結(jié)前言硬件平臺(tái):RT-Thread ART-Pi STM32H750XBH6開(kāi)發(fā)板 H750開(kāi)發(fā)板開(kāi)發(fā)軟件:RT-Thread Studio參考博客:RT-Thread Studio使用SDIO驅(qū)動(dòng)SD卡掛載
    發(fā)表于 12-27 19:13 ?20次下載
    <b class='flag-5'>RT-Thread</b> Studio驅(qū)動(dòng)SD卡

    RT-Thread全球技術(shù)大會(huì):Kconfig在RT-Thread中的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):Kconfig在RT-Thread中的工作機(jī)制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 14:49 ?1493次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):Kconfig在<b class='flag-5'>RT-Thread</b>中的工作機(jī)制

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例

    RT-Thread全球技術(shù)大會(huì):RT-Thread測(cè)試用例集合案例 ? ? ? ? ? 審核編輯:彭靜
    的頭像 發(fā)表于 05-27 16:34 ?2050次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):<b class='flag-5'>RT-Thread</b>測(cè)試用例集合案例

    2022 RT-Thread全球技術(shù)大會(huì):RT-Thread中的POSIX實(shí)現(xiàn)情況

    PSE51接口實(shí)現(xiàn)情況:已經(jīng)實(shí)現(xiàn)了絕大部分常用的函數(shù),一些因?yàn)闅v史原因的安全函數(shù)已經(jīng)被替換,實(shí)現(xiàn)情況統(tǒng)計(jì)如圖中。
    的頭像 發(fā)表于 05-27 16:51 ?1265次閱讀
    2022 <b class='flag-5'>RT-Thread</b>全球技術(shù)大會(huì):<b class='flag-5'>RT-Thread</b>中的POSIX實(shí)現(xiàn)情況

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡(jiǎn)介 作為一名 RTOS 的初學(xué)者,也許你對(duì) RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會(huì)逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類(lèi)型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?4460次閱讀
    <b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread文檔_RT-Thread 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 簡(jiǎn)介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡(jiǎn)介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    RT-Thread文檔_虛擬文件系統(tǒng)

    RT-Thread文檔_虛擬文件系統(tǒng)
    發(fā)表于 02-22 18:42 ?1次下載
    <b class='flag-5'>RT-Thread</b>文檔_虛擬<b class='flag-5'>文件</b>系統(tǒng)

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個(gè)賬號(hào)登陸,開(kāi)啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?3776次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學(xué)習(xí)