自發布v4.1.0 beta版本以來,我們一直積極收集大家的反饋與問題報告,經過我們和社區小伙伴們的共同努力,一起修復了一些問題,完善了新增的特性,現在RT-Thread v4.1.0 版本正式發布了。
這篇文章是專門介紹內核部分更新的內容的。
內核部分更新
新增特性
【hook】增加靜態宏方式的HOOK機制【tick】為rt_tick_increase增加HOOK機制【kservice】增加RT_KSERVICE_USING_STDLIB、增加rt_strcpy
修復的問題
修復了一個特定場景下會引起軟件定時器停止工作的BUG
其他優化
完善了內核的調試日志
特性解析
1. 新增了靜態宏方式的HOOK機制
從4.1.0版本開始,RT-Thread在保證向前兼容的基礎上對原有的HOOK方式進行了改進,實現了如下的效果:
與原有使用函數指針進行“運行時刻”HOOK的方式兼容,依賴原有方式進行代碼插入或HOOK的模塊無需修改;
使用RT_USING_HOOK作為總開關
- 當未定義該宏時,將關閉所有HOOK功能,也不再生成任何相關代碼
- 當定義該宏時,在未開啟傳統“函數指針HOOK”時,默認情況下也不再生成額外代碼
允許用戶通過“插入宏的方式”在編譯時刻精細控制具體HOOK哪個位置
- 可以插入任意代碼塊——其中就包括函數指針、對普通函數的調用等等
具體使用方式可以參考共享者小伙伴的這篇文章:
RT-Thread新版本中HOOK的使用方法(請復制以下鏈接至瀏覽器打開:https://club.rt-thread.org/ask/article/3669.html)
注意:非rtos資深用戶,請謹慎使用HOOK機制
2. 為rt_tick_increase增加HOOK機制
我們為 rt_tick_increase 增加了 HOOK 機制。這樣在某些場景下,比如:當用戶需要一個精度較高的時間基準,或者要做一些和系統心跳同頻的事情的時候,就可以借助這個機制。利用前一部分的靜態宏的方式或者使用API rt_tick_sethook設定hook函數的方式,在系統心跳的時候執行一些“非常簡短”的操作。
注意:由于rt_tick_increase的執行頻率較高,設定的HOOK函數一定不能執行復雜的操作,會增大系統負荷!
3. 增加RT_KSERVICE_USING_STDLIB
增加了一些針對 kservice.c 的配置宏,可以配置使用c庫里提供的內存函數替換 RT-Thread Kservice 實現。代碼效率更高,但是在地址非對齊的情況下,可能會出問題。
問題修復
軟件定時器BUG修復
問題描述:
在特定場景下,軟件定時器處理線程會錯誤的掛起自身,導致如果之后沒有啟動軟件定時器的操作,來喚醒處理線程的話,所有的軟件定時器都會停止工作。
問題場景:
當一個定時器到達設定的超時時間,此時軟件定時器處理線程會嘗試獲取下一個定時器的超時時間,來決定何時喚醒自身執行超時操作。如果獲取不到下次超時時間的話,就會掛起自身,永久等待。這里獲取下一次超時時間的函數之前的版本有問題,如果下一次的超時時間恰好為 RT_TICK_MAX 的話,也會被認為是沒有獲取到,就會導致處理線程被異常掛起。
問題修復:
RT-Thread v4.1.0版本已經修復了這個問題:https://github.com/RT-Thread/rt-thread/pull/5637。推薦大家同步修改此補丁。
其他優化
完善了內核的調試日志,添加 RT_DEBUG_DEVICE 類型,統一使用 RT_DEBUG_LOG 宏管理內核的調試日志。
-
軟件
+關注
關注
69文章
4921瀏覽量
87400 -
定時器
+關注
關注
23文章
3246瀏覽量
114720 -
RT-Thread
+關注
關注
31文章
1285瀏覽量
40085
發布評論請先 登錄
相關推薦
評論