精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

RT-Thread 4.1.0中POSIX淵源介紹

RTThread物聯網操作系統 ? 來源:RTThread物聯網操作系統 ? 作者:RTThread物聯網操作 ? 2022-04-27 10:22 ? 次閱讀

1. POSIX 淵源

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

POSIX為了提供不同層級的RTOS能力,劃定了PSE51,PSE52,PSE53,PSE54共四個級別;分別對應了四種操作系統。

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

2、Real-time Controller Profile IEEE Std 1003.13 PSE52,帶有簡單的文件系統…等

3、Dedicated Real-time Profile IEEE Std 1003.13 PSE53,擁有網絡功能…等

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

05d6e52c-c58b-11ec-bce3-dac502259ad0.png

由于標準的制定是隨著時間發展而不斷更新的,PSE51, 52, 53, 54 的標準也隨著 MCU,MPU 芯片產業的發展,不斷增強的芯片功能和性能使得這些標準所對應的四種操作系統的界限而越顯模糊。在 RT-Thread 中也依靠自身的組件內容,提供了多種標準的部分內容,為不同的 POSIX 應用提供可供在 RTOS 系統上使用的軟件。

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

RT-Thread 針對 PSE51 的標準規定的頭文件及對應接口,提供了大部分接口。除此之外,我們還提供了更加完整的文件系統的接口,以及基于我們 SAL 組件的網絡接口。這為 POSIX 的應用遷移打下了基礎,可以使得較復雜的 POSIX 應用也可以經過小部分修改就可以在 RT-Thread 上運行。

05ee39a2-c58b-11ec-bce3-dac502259ad0.png

  • POSIX FILE 相關接口,包含了文件系統的內容,接口比較豐富;標準 I/O 接口,Poll / Select 等較復雜的功能也已經支持

  • Delay 相關接口

  • Clock 相關接口,對擁有 RTC 硬件,或者沒有使用 RTC 硬件的設備都有對應的功能實現

  • Timer 相關接口,已經對接到 RT-Thread 的定時器接口,實現對應的函數

  • Pthread 相關接口,在多任務編程中使用很廣泛

  • Dynamic 動態模塊

  • POSIX 的 標準 IPC 接口 :pipe ,message,semaphore 等函數

通過上面靈活的配置項,開發者可以啟用對應的功能來添加該類函數的支持;這對與同樣使用功能宏來標識一些函數功能的 POSIX 接口來說十分類似,在該界面可以配置對應的 POSIX 函數支持。

3. POSIX 的實現簡介

由于 RT-Thread 作為一個可以兼容多種開發方式的操作系統,針對 ARMCC,ARMCLANG,IARCC,GCC 現階段占比比較多的開發工具鏈都做了對應的適配。所以,簡單描述一下RT-Thread 在做適配時,針對不同的編譯平臺所做得操作,以及對應的關系圖。

06051906-c58b-11ec-bce3-dac502259ad0.png

由于在不同的平臺開發所使用的編譯工具鏈不一致;所以在實現時,RT-Thread 區分了三個概念:廣義的 POSIX狹隘的 POSIX編譯器配平層;下面結合關系圖,描述一下對應的概念:

  • 廣義的 POSIX ,即 POSIX 接口;這里面包含了一些關于 pthread, signal, IPC 等函數以及 C 庫的相關內容;

  • 狹隘的 POSIX,即不是 C 庫標準提供以外的 POSIX 函數,例如 pthread 這些內容;

  • 編譯器配平層,由 C 庫相關提供的函數。由于不同編譯平臺對該內容的實現參差不齊,因此需要針對不同的編譯平臺增補這些函數。這也就是 “ 配平 ” 的由來。這塊內容較多,且不同的編譯工具鏈所支持的操作不一,因此在 POSIX 代碼遷移時需要修改這里來解決對應的編譯錯誤。

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

4.1 Pthread 接口

061a8fac-c58b-11ec-bce3-dac502259ad0.png

1、在 menuconfig 中打開 pthread ,設定支持得最大 pthread 數目

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

 1#include
 2#include
 3#include
 4#include
 5
 6#defineNUM_THREADS5
 7
 8staticvoid*a_thread_func(void*num)
 9{
10printf("arg=%li
",(long)num);
11returnnum;
12}
13
14intmain(void)
15{
16pthread_tnew_th;
17longi;
18void*res;
19intret;
20
21for(i=1;i1;i++){
22ret=pthread_create(&new_th,NULL,a_thread_func,(void*)i);
23
24if(ret){
25fprintf(stderr,"pthread_create():%s
",
26strerror(ret));
27return-1;
28}
29
30pthread_join(new_th,&res);
31
32if((long)res!=i){
33printf("TestFAILED:Returnedvaluedidnotmatch%li!=%li",
34(long)res,i);
35return-1;
36}
37}
38printf("TestPASSED
");
39return0;
40}
4.2 Timer 接口

062e9588-c58b-11ec-bce3-dac502259ad0.png

1、在 menuconfig 中打開 timer 即可

2、在用戶代碼中,即可使用 這些 timer 提供的頭文件來編程

 1#include
 2#include
 3
 4intmain(void)
 5{
 6time_tsec;
 7time_tret;
 8time_ttimestamp=1609459200;
 9ret=time(&sec);
10
11if(ret!=sec)
12{
13return-1;
14}
15if(ret!=timestamp)
16{
17return-1;
18}
19return0;
20}
4.3 Net 接口

1、在 menuconfig 中打開 Enable BSD Socket I/O 就可以使用標準 Socket 進行編程

4.4 Filesystem 接口

1、在 menuconfig 中打開Enable POSIX file system and I/O 配置具體的 POSIX 函數接口

2、按照需求打開需要的功能,例如 設備I/O,AIO,MMAN 之類的功能

4.5 其他接口

其他接口也是一樣,開打對應的 menuconfig 選項,即可使用對應頭文件,及提供的函數來編程。整個過程不需要 rt-thread 的頭文件參與,使編譯出的代碼運行在 RT-Thread 操作系統之上。

5. 注意事項

5.1 不同編譯平臺的兼容

在上一節,編譯器配平層的存在解決了多組編譯工具鏈不一致造成的問題;同時,也引入了一些在編寫代碼時需要注意的事項。這些注意事項是為了解決對應的編譯錯誤。因為編譯工具鏈有的允許頭文件替換,有的不支持這些問題。RT-Thread 提供了一個相對輕便的解決辦法:

為保證跨不同編譯器、不同工具鏈的兼容性,建議用戶應用層代碼:

  • 使用 代替

  • 使用 代替

  • 使用 代替

有使用 的引用邏輯的,修改為 的方式來避免編譯錯誤;其他兩個也是類似的處理邏輯,擬合不同編譯工具鏈的處理邏輯。

5.2 Net 接口

啟用網絡功能后,并不是所有的 BSD Socket 接口都支持,在 RT-Thread 中只實現了一部分函數。因此如果對應函數缺失,需要按照代碼邏輯替換為基礎的 Socket 接口來兼容原邏輯。完整的 BSD Socket 功能將持續優化以解決這個問題。

原文標題:RT-Thread 4.1.0 特性解析之LIBC與POSIX

文章出處:【微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 操作系統
    +關注

    關注

    37

    文章

    6738

    瀏覽量

    123190
  • Posix
    +關注

    關注

    0

    文章

    36

    瀏覽量

    9487
  • RT-Thread
    +關注

    關注

    31

    文章

    1272

    瀏覽量

    39924

原文標題:RT-Thread 4.1.0 特性解析之LIBC與POSIX

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    RT-Thread中使用POSIX Threads接口

    。Pthreads是libc的一個子庫,RT-Thread的Pthreads是基于RT-Thread內核函數的封裝,使其符合POSIX標準。后續章節會詳細
    發表于 08-12 15:02

    RT-Thread Smart已正式上線

    rt-smart內核即可包含基本功能,同時也可定制裁剪。rt-smart用戶態應用環境采用musl libc提供POSIX接口調用及C運行環境,延續 RT-Thread 原有的生態,使
    的頭像 發表于 11-29 10:31 ?2775次閱讀

    RT-Thread v4.1.0版本正式發布

    自發布v4.1.0 beta版本以來,我們一直積極收集大家的反饋與問題報告,經過我們和社區小伙伴們的共同努力,一起修復了一些問題,完善了新增的特性,現在RT-Thread v4.1.0 版本正式發布了。
    的頭像 發表于 04-15 16:23 ?2472次閱讀
    <b class='flag-5'>RT-Thread</b> v<b class='flag-5'>4.1.0</b>版本正式發布

    RT-Thread v4.1.0FAL介紹

    在 V4.1.0 ,將 fal 軟件包重新定義為 RT-Thread 內部組件。
    的頭像 發表于 04-26 13:34 ?3775次閱讀

    RT-Thread V4.1.0新特性CMake介紹與構建CMake工程

    ? ? CMake 支持 在 RT-Thread 4.1.0 正式發布版,添加了對 CMake 的支持。開發者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持
    的頭像 發表于 05-24 19:20 ?2953次閱讀

    RT-Thread 4.1.0的CMake構建教程

    CMake 支持 在 RT-Thread 4.1.0 正式發布版,添加了對 CMake 的支持。開發者可以使用 SCons 工具來生成 CMakeLists.txt 文件。 為何要支持 CMake
    的頭像 發表于 05-25 11:06 ?3307次閱讀

    RT-Thread全球技術大會:Kconfig在RT-Thread的工作機制

    RT-Thread全球技術大會:Kconfig在RT-Thread的工作機制 ? ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 14:49 ?1502次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:Kconfig在<b class='flag-5'>RT-Thread</b><b class='flag-5'>中</b>的工作機制

    RT-Thread大會:RT-ThreadPOSIX的實現

    對于部分C函數,編譯器配平層負責實現這些接口;由于RT-Thread需要維持多平臺可用,所以編譯器配平層的主要工作就是擬補各個編譯平臺的不足。
    的頭像 發表于 05-27 16:46 ?1568次閱讀
    <b class='flag-5'>RT-Thread</b>大會:<b class='flag-5'>RT-Thread</b>對<b class='flag-5'>POSIX</b>的實現

    RT-Thread全球技術大會:RT-ThreadPOSIX的實現情況介紹

    RT-Thread全球技術大會:RT-ThreadPOSIX的實現情況介紹 ? ? ? ? ? ? 審核編輯:彭靜
    的頭像 發表于 05-27 16:52 ?1857次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>RT-Thread</b>對<b class='flag-5'>POSIX</b>的實現情況<b class='flag-5'>介紹</b>

    RT-Thread全球技術大會:POSIX FILE select的調用過程

    在上午RT-Thread全球技術大會,RT-Thread開發者詳細介紹POSIX FILE select的調用過程。如下圖:
    的頭像 發表于 05-28 10:56 ?1528次閱讀
    <b class='flag-5'>RT-Thread</b>全球技術大會:<b class='flag-5'>POSIX</b> FILE select的調用過程

    RT-Thread 4.1.0正式添加對Arm Compiler 6支持

    RT-Thread 4.1.0 正式發布版,添加了對 Arm Compiler 6 的支持,用戶可以修改 rtconfig.py 指定生成 mdk5 工程時使用的編譯器
    的頭像 發表于 06-01 15:20 ?1989次閱讀
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>4.1.0</b>正式添加對Arm Compiler 6支持

    RT-Thread V4.1.0 版本部分更新內容

    RT-Thread V4.1.0 版本已經發布四月有余了,在這四個月中,RT-Thread的主倉庫收到了包含了內核到BSP的方方面面的 PR 與 ISSUE。在我們和社區的共同努力下
    的頭像 發表于 08-30 09:48 ?2424次閱讀

    聊聊新版RT-Thread內核的鉤子

    4.1.0版本開始,RT-Thread在保證向前兼容的基礎上對原有的HOOK方式進行了改進,實現了如下的效果:
    的頭像 發表于 10-25 09:32 ?1193次閱讀

    RT-Thread文檔_RT-Thread 簡介

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

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

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