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