微信公眾號(hào)?| strongerHuang
年前12月份的時(shí)候,F(xiàn)reeRTOS 升級(jí)到V11.0版本,你們項(xiàng)目用上了這個(gè)最新版本嗎?
我最近抽時(shí)間,把老項(xiàng)目中V10版本的FreeRTOS,升級(jí)(替換)為最新V11.0.1版本,發(fā)現(xiàn)編譯沒有錯(cuò)誤,然后也實(shí)際在產(chǎn)品上跑了一下,沒發(fā)現(xiàn)什么問題。
這說明,V10和V11版本還是兼容,至少用到的這些API接口上沒問題。
當(dāng)然,我只是簡單跑了一下,沒有經(jīng)過嚴(yán)格測試。還有,項(xiàng)目中用到的接口都是一些常規(guī)的,而且只是占據(jù)少部分。
V11和V10的接口是否全面兼容,還有有待驗(yàn)證,只能說常規(guī)的接口是向下兼容,且增加了一些更現(xiàn)代、更先進(jìn)的API接口。
重要的更新內(nèi)容
FreeRTOS從V10升級(jí)到V11,從官網(wǎng)給出的信息,升級(jí)的內(nèi)容非常多,有30條左右,下面給大家列舉一些重要的更新內(nèi)容:
1、支持對(duì)稱多處理 (SMP)?
FreeRTOS 在 2017 年推出了對(duì)非對(duì)稱多處理 (AMP) 的支持,而V11版本的 FreeRTOS 首次將對(duì)稱多處理 (SMP) 支持納入主線版本。借助 SMP, FreeRTOS 內(nèi)核的實(shí)例可以在多個(gè)相同的處理器核心中調(diào)度任務(wù)。
2、合規(guī)性檢查從 PC Lint 切換到 Coverity?
FreeRTOS源代碼遵循?MISRA 行業(yè)規(guī)范,此次升級(jí),將規(guī)范從 MISRA C:2004 更新了 MISRA C:2012,代碼靜態(tài)分析工具也切換到了Coverity.
這里簡單可以一下什么是?MISRA 行業(yè)規(guī)范:MISRA C是由汽車產(chǎn)業(yè)軟件可靠性協(xié)會(huì)(MISRA)提出的C語言開發(fā)標(biāo)準(zhǔn)。
其目的是在增進(jìn)嵌入式系統(tǒng)的安全性及可移植性,針對(duì)C++語言也有對(duì)應(yīng)的標(biāo)準(zhǔn)MISRA C++。
這里可以參看我分享的文章:汽車行業(yè) C 語言標(biāo)準(zhǔn):MISRA C
3、增加FreeRTOSConfig.h說明(注釋)?
就是增加了FreeRTOSConfig.h配置文件的注釋,比以前更加詳細(xì)了。
4、增加內(nèi)存安全檢查?
在heap_4.c和heap5 .c中增加了對(duì)內(nèi)部堆塊指針的邊界檢查和混淆,以幫助捕獲指針異常。
比如 pvPortMalloc :
5、增加一些API接口?
拋開新支持的一些功能之外,也增加了一些實(shí)用的API接口,比如:uxTaskBasePriorityGet 和 uxTaskBasePriorityGetFromISR 來獲取任務(wù)最后分配的基本優(yōu)先級(jí)。
還添加了“跟蹤宏”,支持跟蹤所有api的輸入和退出。
6、更新/修復(fù)一些功能?
更新并修改一些功能和潛在的bug,比如:更新Cortex-M端口的中斷優(yōu)先級(jí)斷言,使它們不會(huì)在沒有實(shí)現(xiàn)PRIO位的QEMU上觸發(fā)。
再比如:更新eTaskGetState和uxTaskGetSystemState,對(duì)于等待就緒的任務(wù)返回eReady.
還有:更新ARMv7-M端口以確保內(nèi)核中斷以最低優(yōu)先級(jí)運(yùn)行。
時(shí)間有限,就整理這么多,詳細(xì)更新說明,大家可以參看:https://github.com/FreeRTOS/FreeRTOS-Kernel/blob/main/History.txt
最后,如果大家升級(jí)到V11有遇到各種問題,歡迎留言交流和討論。