
劉火良 楊森
本書基於野火STM32全系列開發板介紹FreeRTOS內核實現與應用開發,全書分爲兩部分:*部分教你如何從0到1把FreeRTOS內核寫出來,從底層的彙編開始,講解任務如何定義、如何切換,還講解了阻塞延時如何實現,如何支持多優先級,如何實現定時器以及時間片等FreeRTOS的核心知識點;第二部分則開始講解FreeRTOS內核組件的應用以及如何使用FreeRTOS進行多任務編程。本書內容翔實,案例豐富,配有大量示例代碼,適合作爲嵌入式領域工程師和愛好者的技術參考書,也適合相關專業的學生學習參考。
看完了,感覺還是很不錯的,很適合自己,對於freeRTOS入門來說,很不錯的一本書!循序漸進,很有收穫!
解釋的很詳細,很多地方講的比手冊更清楚
或者說鏈表的節點本來就不是用來存儲大量數據的,但是節點跟晾衣架的鉤子一樣,可以掛載很多數據。 但是,在多任務系統中,每個任務都是獨立的、互不干擾的,所以要爲每個任務都分配獨立的棧空間,這個棧空間通常是一個預先定義好的全局數組,也可以是動態分配的一段內存空間,但它們都存在於RAM中。 任務棧其實就是一個預先定義好的全局數據,數據類型爲StackType_t,大小由TASK1_STACK_SIZE這個宏來定義,默認爲128,單位爲字,即512字節,這也是FreeRTOS推薦的最小的任務棧。 系統爲了順利地調度任務,爲每個任務都額外定義了一個任務控制塊,這個任務控制塊相當於任務的身份證,裏面存有任務的所有信息,比如任務的棧指針、任務名稱、任務的形參等。 臨界段,用一句話概括就是一段在執行時不能被中斷的代碼段。在FreeRTOS中,臨界段最常出現的地方就是對全局變量的操作。全局變量就像是一個靶子,誰都可以對其開槍,但是有一人開槍,其他人就不能開槍,否則就不知道是誰命中了靶子。 在FreeRTOS中,數字優先級越小,邏輯優先級也越小,這與RT-Thread和μC/OS剛好相反。 一個MCU能夠支持多少任務,取決於RAM空間的大小。 任務的三要素是任務主體函數、任務棧和任務控制塊, 隊列又稱消息隊列,是一種常用於任務間通信的數據結構,隊列可以在任務與任務間、中斷與任務間傳遞信息,實現了任務接收來自其他任務或中斷的不固定長度的消息。任務能夠從隊列中讀取消息,當隊列中的消息爲空時,讀取消息的任務將被阻塞。用戶還可以指定阻塞的任務時間xTicksToWait,在這段時間中,如果隊列爲空,該任務將保持阻塞狀態以等待隊列數據有效。當隊列中有新消息時,被阻塞的任務會被喚醒並處理新消息;當等待的時間超過指定的阻塞時間,即使隊列中尚無有效數據,任務也會自動從阻塞態轉爲就緒態。消息隊列是一種異步的通信方式。 在FreeRTOS中,信號量用於同步,如任務與任務的同步、中斷與任務的同步,可以大大提高效率。 事件是一種實現任務間通信的機制,主要用於實現多任務間的同步,但事件通信只能是事件類型的通信,無數據傳輸。 heap_5.c方案允許用戶使用多個非連續內存堆空間,每個內存堆的起始地址和大小由用戶定義。 後面要講解的heap_4.c方案採用的內存管理算法能解決內存碎片的問題,可以把這些釋放的相鄰的小內存塊合併成一個大內存塊。 用戶可以配置系統可管理的最高中斷優先級的宏定義configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY,它用於配置內核中的BASEPRI寄存器,當BASEPRI設置爲某個值時,NVIC不會響應比該優先級低的中斷,而優先級比之更高的中斷則不受影響。也就是說,當這個宏定義配置爲5時,中斷優先級數值在0、1、2、3、4的這些中斷是不受FreeRTOS屏蔽的,即使在系統進入臨界段時,這些中斷也能被觸發而不是等到退出臨界段的時候才被觸發,當然,這些中斷服務函數中也不能調用FreeRTOS提供的API函數接口,而中斷優先級在5~15的這些中斷是可以被屏蔽的,也能安全調用FreeRTOS提供的API函數接口。 很詳細的一本基於STM32的FreeRTOS開發指南,值得看多遍,有疑問就看那一節,平時多練習,多觀察。
很適合接觸了c與arm一段時間後,想入門嵌入式實時系統的同學,這本書很系統的講解了系統原理,直接上代碼講解系統內核如何創建與實現任務調度,線程間通信的原理等內容。
開篇就是錯的,嚴重懷疑電子化的人複製粘貼錯了,明明是嵌入式的書,開始的簡介說的都是些啥?什麼黑客測試,什麼加密軟件。這是串了吧!!!
有好多地方文字錯誤,但是總體還行,需要配合 Github 上的代碼看纔行,不然很多實驗跑不通。
囫圇吞棗的讀了一遍,有空再實踐了。
去B站看正點原子的freertos真的超級清楚
講得比較清晰,還是需要多動手吶
可以當工具書,在看源碼的同時,翻翻,看看別人理解。