前言
雖然距離上次釋出v4.0.5的更新才剛剛過去一個月的時間,但是經過我們緊鑼密鼓的準備,我們終於在農曆新年第一天為大家帶來了全新的 v4.1.0 Beta 版本。這是一個體驗嚐鮮版並非4.1.0正式釋出版,包含一些重大的更新,目前處於公測階段,歡迎大家下載體驗。預計收集完反饋之後穩定的版本 v4.1.0 將會在今年3月下旬正式釋出。
下載地址:
-
gitee:
https://gitee.com/rtthread/rt-thread/repository/archive/v4.1.0-beta (國內使用者推薦)
-
github:
https://github.com/RT-Thread/rt-thread/archive/refs/tags/v4.1.0-beta.zip
更新紀錄檔
-
更完善的 POSIX 支援(PSE51 以及 其他常用的POSIX API 支援)
-
更完善的跨多編譯器平臺的支援
-
更加穩定精簡的系統核心
-
更完善的CPP11支援(gcc、armclang 雙平臺支援)
-
更完善的64位元架構支援
-
更完善的驅動框架(PM、sensor、sdio、cputime、usb)
-
更多的原廠BSP(瑞薩、新唐、先楫、沁恆、小華半導體、東軟載波...)
詳細紀錄檔
https://github.com/RT-Thread/rt-thread/releases/tag/v4.1.0-beta
遷移指南
在 RT-Thread 的 v4.1.0 版本及後續的版本,移除了 dfs_poll.h, dfs_posix.h, dfs_select.h三個之前常用的標頭檔案。並且移除了 RT_USING_LIBC,RT_USING_POSIX 兩個範圍較大的宏。
修改原因
該項改動的原因,是因為我們推動了 POSIX 程式設計介面標準化工作,方便 POSIX(例如類UNIX) 程式向 RT-Thread 遷移而無需大規模改動標頭檔案。因此我們移除了dfs_poll.h, dfs_posix.h, dfs_select.h 這些被大量使用但帶有 RT-Thread 特點的標頭檔案;移除了模糊且開啟範圍過大的宏開關 RT_USING_POSIX 和 RT_USING_LIBC;細化了裁剪宏開關,使得裁剪更加精細化,在豐富功能的同時,不會導致程式碼體積的膨脹。使用者可根據自己實際需求,精細化設定POSIX相關的功能。
產生的問題
由於歷史原因,在部分軟體包中,仍然有對RT_USING_LIBC,RT_USING_POSIX, dfs_poll.h, dfs_posix.h, dfs_select.h 的使用,在 RT-Thread 的 v4.1.0 版本及後續的版本中可能會出現編譯失敗的問題。
如果發現類似問題,請到社群論壇發帖報告,我們將及時處理
解決方案
-
若程式碼中仍有 RT_USING_LIBC 與 RT_USING_POSIX 來判斷新增某些標頭檔案,則需要將這兩個宏刪除並細化:
1RT_USING_POSIX_FS
2 RT_USING_POSIX_DEVIO --->Enable devices as file descriptors
3 RT_USING_POSIX_STDIO --->Enable standard I/O devices, e.g. STDOUT_FILENO
4 RT_USING_POSIX_POLL --->Enable I/O Multiplexing poll() <poll.h>
5 RT_USING_POSIX_SELECT --->Enable I/O Multiplexing select() <sys/select.h>
6 RT_USING_POSIX_TERMIOS --->Enable Terminal I/O <termios.h>
7 RT_USING_POSIX_AIO --->Enable Asynchronous I/O
8 RT_USING_POSIX_MMAN --->Enable Memory-Mapped I/O <sys/mman.h>
9RT_USING_POSIX_DELAY
10RT_USING_POSIX_CLOCK
11RT_USING_POSIX_TIMER
12RT_USING_PTHREADS
13
-
若程式碼中有 #include <dfs_posix.h>,按照程式碼中,對介面的需要,視情況分別參照 dfs_file.h,unistd.h,stdio.h,sys/stat.h, sys/statfs.h。
-
若程式碼中有 #include <dfs_select.h> 修改為參照 sys/select.h
-
若程式碼中有 #include <dfs_poll.h> 修改為參照 poll.h
需要特殊注意的標頭檔案
為保證跨不同編譯器、不同工具鏈的相容性,建議使用者應用層程式碼:
-
使用 <sys/time.h> 代替 <time.h>
-
使用 <sys/errno.h> 代替 <errno.h>
-
使用 <sys/signal.h> 代替 <signal.h>
歡迎小夥伴至論壇評論區留言!
歡迎大家多多貢獻程式碼(PR)
如何給RT-Thread貢獻程式碼這裡有視訊教學
https://www.bilibili.com/video/BV1gr4y1w7yX