欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 23408|回復: 31
收起左側

從0到1教你寫uCOS-III教程(基于STM32單片機)

  [復制鏈接]
ID:384378 發表于 2018-8-8 22:12 | 顯示全部樓層 |閱讀模式
1.1 如何學習本書
本書與市面上的任何一本 uC/OS-III 相關的書都不一樣,它們要么是翻譯官方的參考手冊,要么是講如何使用 uC/OS-III,要么是講 uC/OS-III 的源碼,而本書是教你怎么從 0 開始把 uC/OS-III 寫出來,既講了源碼實現,也講了 API 如何使用。當你拿到本書開始學習的時候你一定會驚訝,原來 RTOS 的學習并沒有那么復雜,反而是那么的有趣,原來自己也可以寫 OS,成就感立馬爆棚。

全書內容循序漸進,不斷迭代,前一章都是后一章的基礎,必須從頭開始閱讀,不能進行跳躍式的閱讀。在學習的時候務必做到兩點:一是不能一味地看書,要把代碼和書本結合起來學習,一邊看書,一邊調試代碼。看書倒是很簡單,那如何調試代碼?即單步執行每一條程序,看看程序的執行流程和執行的效果與自己大腦所想是不是一樣;二是在每學完一章之后,必須將配套的例程重寫一遍(切記不要復制,哪怕是一個分號,但可以抄),做到舉一反三,確保真正理解。在自己寫的時候肯定會錯漏百出,這個時候要珍惜這些錯誤,好好調試,這是你提高編程能力的最好的機會。記住,程序不是寫出來的,而是調試出來的。
1.2 本書的參考資料
1、 uC/OS-III 官方源代碼
2、 uCOS-III 中文翻譯 (電子版)
3、 嵌入式操作系統 uCOS-II(第二版) (電子版)
4、 嵌入式實時操作系統μCOS-II 原理及應用 任哲編著 (電子版)
5、 CM3 權威指南 CnR2 (電子版)
6、 STM32F10xxx Cortex-M3 programming manual (電子版)
1.3 本書的編寫風格
本書以 uC/OS-III 官方源碼為藍本,抽絲剝繭,不斷迭代,教你怎么從 0 開始把uC/OS-III 寫出來。書中涉及到的數據類型,變量名稱、函數名稱,文件名稱,文件存放的位置都完全按照 uC/OS-III 官方的方式來實現,當你學完這本書之后可以無縫地切換到原版的 uC/OS-III 的使用。要注意的是,在實現的過程中,某些函數我會去掉一些形參和一些冗余的代碼,只保留核心的功能,但這并不會影響我們學習。
0.png

第2章 如何學習 RTOS

2.1 為什么要學習 RTOS
當我們進入嵌入式這個領域的時候,往往首先接觸的都是單片機編程,單片機編程又首選 51 單片機來入門。這里面說的單片機編程通常都是指裸機編程,即不加入任何 RTOS(Real Time Operation System 實時操作系統)的程序。常用的 RTOS 有國外的 FreeRTOS、ucOS、RTX 和國內的 Huawei LiteOS、和 RT-Thread 等,其中尤以開源且免費的 FreeRTOS的市場占有率最高,歷史悠久的 ucos 屈居第二。

在裸機系統中,所有的程序基本都是自己寫的,所有的操作都是在一個無限的大循環里面實現。現實生活中的很多中小型的電子產品用的都是裸機系統,而且也能夠滿足需求。但是為什么還要學習 RTOS 編程,偏偏還要整個操作系統進來。一是項目需要,隨著產品要實現的功能越來越多,單純的裸機系統已經不能夠完美地解決問題,反而會使編程變得更加復雜,如果想降低編程的難度,我們可以考慮引入 RTOS 實現多任務管理,這是使用RTOS 的最大優勢。二是學習的需要,必須學習更高級的東西,實現更好的職業規劃,為將來走向人生巔峰迎娶白富美做準備,而不是一味的在裸機編程上面死磕。作為一個合格的嵌入式軟件工程師,學習是永遠不能停止的事,時刻都在為將來準備。書到用時方恨少,我希望機會來臨時你不要有這種感覺。
為了幫大家理清 RTOS 編程的套路,下面我們簡單的分析下這兩種編程方式的區別,這個區別我稱它為學習 RTOS 的命門,只要打通這個任督二脈,以后的 RTOS 學習可以說是易如反掌。在講解這兩種編程方法的區別的時候,我們主要講方法論,不會涉及到具體的代碼編程,主要還是通過偽代碼來講解。

2.2 如何學習 RTOS
裸機編程和 RTOS 編程的風格有些不一樣,而且有很多人說 RTOS 的學習很難,這就導致學習的人一聽到 RTOS 編程就在心理面忌憚三分,結果就是出師未捷身先死。那么到底如何學習一個 RTOS?最簡單的就是在別人移植好的系統之上,看看 RTOS里面的 API 使用說明,然后調用這些 API 實現自己想要的功能即可。完全,不用關心底層的移植,這是最簡單快速的入門方法。這種方法各有利弊,如果是做產品,好處是可以快速的實現功能,將產品推向市場,贏得先機,弊端是當程序出現問題的時候,因對這個RTOS 不夠了解,會導致調試困難,焦頭爛額,一籌莫展。如果是學習,那么只會簡單的調用 API,那是不可取的,我們應該深入的學習其中一款 RTOS。目前市場上現有的 RTOS,它們的內核實現方式都差不多,我們只需要深入學習其中一款就行。萬變不離其宗,以后換到其它型號的 RTOS,使用起來,那自然是得心應手。那如何深入的學習一款 RTOS?這里有一個最有效也是最難的方法,就是閱讀 RTOS 的源碼,深究內核和每個組建的實現方式,這個過程枯燥且痛苦。但為了能夠學到 RTOS 的精華,你不入地獄誰入地獄?

市面上雖然有一些講解相關 RTOS 源碼的書,如果你基礎不夠,且先前沒有使用過該款 RTOS,那么源碼看起來還是會非常枯燥,且并不能從全局掌握整個 RTOS 的構成和實現。
現在,我們采用一種全新的方法來教大家學習一款 RTOS,即不是單純的講里面的API 如何使用,也不是單純的拿里面的源碼一句句來講解。而是,從 0 開始,層層疊加,不斷地完善,教大家怎么把一個 RTOS 寫 0 到 1 寫出來,讓你在每一個階段都能享受到成功的喜悅。在這個 RTOS 實現的過程中,只需要你具備 C 語言的基礎就行,然后就是跟著我們這個教程篤定前行,最后定有所成。
這個用來教學的 RTOS,我們不會完全自己寫一個,不會再重復的造輪子,而是選取年齡最大(26 歲)、商業化最成功、安全驗證最多的 uC/OS-III 為藍本,將其抽絲剝繭,層層疊加,從 0 到 1 寫出來。在實現的過程中,數據類型、變量名、函數名稱、文件類型等都完全按照 uC/OS-III 里面的寫法,不會自己再重新命名。這樣學完我們這個課程之后,就可以無縫地過度到 uC/OS-III 的使用。
2.3 如何選擇 RTOS
選擇一個 RTOS 要看下你是學習還是做產品,如果是學習則選擇一個年齡最大,商業化最成功,安全驗證最多的來學習,而且是深入學習。那么符合前面這幾個標準的只有ucos,所以,學一個 RTOS,首選 ucos,而且 ucos 的資料是最多的。當然,選擇其他的RTOS 來學習也是可以的。學完之后就是要用了,如果是產品中使用 ucos 就要面臨授權的問題,就是要給版權費。一聽到要給錢,大家肯定是不樂意了,所以開源免費的FreeRTOS 就受到各個半導體廠商和開發者的青睞。目前,FreeRTOS 是市場占有率最高的RTOS,非常適合用來做產品。另外,國內的 RT-Thread 也在迅速的崛起,同樣是開源免費。

第3章 新建工程—軟件仿真
  在開始寫 RTOS 之前,我們先新建一個工程,Device 選擇 Cortex-M3 內核的處理器,調試方式選擇軟件仿真,到最后寫完整個 RTOS 之后,我們再把 RTOS 移植到野火 STM32開發板上,到了最后的移植其實已經非常簡單,只需要換一下啟動文件和添加 bsp 驅動就行。

3.1 新建本地工程文件夾
在開始新建工程之前,我們先在本地電腦端新建一個文件夾用于存放工程。文件夾名字我們取為 RTOS,然后再在該文件夾下面新建各個文件夾和文件,有關這些文件夾的包含關系和作用具體見表格 3-1。

表格 3-1 工程文件夾根目錄下的文件夾的作用
0.png

3.2 使用 KEIL 新建工程
開發環境我們使用 KEIL5,版本為 5.15,高于或者低于 5.15 都行,只要是版本 5 就行。

3.2.1 New Progect
首先打開 KEIL5 軟件,新建一個工程,工程文件放在目錄 Project\RVMDK(uv5)下面,名稱命名為 YH-uCOS-III,其中 YH 是野火拼音首字母的縮寫,當然你也可以換成其它名稱,但是必須是英文,不能是中文,切記。

3.2.2 Select Device For Target
當命名好工程名稱,點擊確定之后會彈出 Select Device for Target 的選項框,讓我們選擇處理器,這里我們選擇 ARMCM3,具體見圖 3-1。

0.png


0.png

其實這兩個文件剛開始都是存放在 KEIL 的安裝目錄下,當我們配置 Manage Run-Time Environment 選項框之后,軟件就會把選中好的文件從 KEIL 的安裝目錄拷貝到我們的工程目錄:Project\RTE\Device\ARMCM3 下面。其中 startup_ARMCM3.s 是匯編編寫的啟動文件,system_ARMCM3.c 是 C 語言編寫的跟時鐘相關的文件。更加具體的可直接閱讀這兩個文件的源碼。只要是 Cortex-M3 內核的單片機,這兩個文件都適用。

3.3 在 KEIL 工程里面新建文件組
在工程里面添加 User、uC/OS-III Source、uC/OS-III Ports、uC/CPU、uC/LIB 和 Doc 這幾個文件組,用于管理文件,具體見圖 3-4。
0.png

對于新手,這里有個問題就是如何添加文件組?具體的方法為鼠標右鍵 Target1,在彈出的選項里面選擇 Add Group…即可,具體見圖 3-5,需要多少個組就鼠標右擊多少次Target1。
0.png

3.4 在 KEIL 工程里面添加文件
在工程里面添加好組之后,我們需要把本地工程里面新建好的文件添加到工程里面。
具體為把 readme.txt 文件添加到 Doc 組,app.c 添加到 User 組,至于 OS 相關的文件我們還沒有編寫,那么 OS 相關的組就暫時為空,具體見圖 3-6。
0.png

對于新手,這里有個問題就是如何將本地工程里面的文件添加到工程組里里面?具體的方法為鼠標左鍵雙擊相應的組,在彈出的文件選擇框中找到要添加的文件,默認的文件類型是 C 文件,如果要添加的是文本或者匯編文件,那么此時將看不到,這個時候就需要把文件類型選擇為 All Files,最后點擊 Add 按鈕即可,具體見圖 3-7。

0.png

3.4.1 編寫 main 函數

一個工程如果沒有 main 函數是編譯不成功的,會出錯。因為系統在開始執行的時候先執行啟動文件里面的復位程序,復位程序里面會調用 C 庫函數__main,__main 的作用是初始化好系統變量,如全局變量,只讀的,可讀可寫的等等。__main 最后會調用__rtentry,再由__rtentry 調用 main 函數,從而由匯編跳入到 C 的世界,這里面的 main 函數就需要我們手動編寫,如果沒有編寫 main 函數,就會出現 main 函數沒有定義的錯誤,具體見圖 3-8。
0.png

main 函數我們寫在 app.c 文件里面,因為是剛剛新建工程,所以 main 函數暫時為空,
具體見代碼清單 3-1。
代碼清單 3-1main 函數
  1. int main(void)
  2. {
  3. for (;;) {
  4. /* 啥事不干 */
  5. }
  6. }
復制代碼
…………
…………
一共16章節
…………
完整的pdf格式文檔51黑下載地址(共126頁PDF):
[野火]《從0到1教你寫uCOS-III》.pdf (3.25 MB, 下載次數: 615)


評分

參與人數 2黑幣 +55 收起 理由
造夢Sir + 5 很給力!
admin + 50 共享資料的黑幣獎勵!

查看全部評分

回復

使用道具 舉報

ID:1 發表于 2018-8-9 03:20 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:328014 發表于 2018-8-9 03:20 | 顯示全部樓層
寫的太棒了,大愛火哥啊.
回復

使用道具 舉報

ID:328014 發表于 2018-8-9 03:22 | 顯示全部樓層
這個是我看過的最通俗易懂的uCOS-III教程
回復

使用道具 舉報

ID:396960 發表于 2018-9-16 10:44 | 顯示全部樓層
下來看看,謝謝樓主無私
回復

使用道具 舉報

ID:104779 發表于 2018-9-18 01:55 | 顯示全部樓層
向上傳資料人致敬!
回復

使用道具 舉報

ID:86450 發表于 2018-9-18 10:06 | 顯示全部樓層
好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:411798 發表于 2018-10-18 16:44 | 顯示全部樓層
很好的資料
回復

使用道具 舉報

ID:18591 發表于 2018-11-6 23:23 | 顯示全部樓層
好資料,~~~~~~~~~~~~~~~~~~
回復

使用道具 舉報

ID:5203 發表于 2018-11-7 08:08 | 顯示全部樓層
書中的內容很好,很實用。謝謝啦!
回復

使用道具 舉報

ID:393586 發表于 2018-11-7 20:35 | 顯示全部樓層
這是野火的吧 公眾號里面也發布了
回復

使用道具 舉報

ID:445403 發表于 2018-12-13 09:24 | 顯示全部樓層
我想下載來學習,可是沒有積分。。。
回復

使用道具 舉報

ID:162136 發表于 2018-12-27 22:09 | 顯示全部樓層
下載看了一下,不錯,感謝。
回復

使用道具 舉報

ID:58591 發表于 2019-1-11 15:02 | 顯示全部樓層
下載學習下,感謝分享
回復

使用道具 舉報

ID:66915 發表于 2019-1-12 12:37 | 顯示全部樓層
寫的太棒了,大愛火哥啊
回復

使用道具 舉報

ID:467292 發表于 2019-1-13 11:10 | 顯示全部樓層
贊一個!好資料,51黑有你更精彩!!!
回復

使用道具 舉報

ID:185317 發表于 2019-1-15 11:26 | 顯示全部樓層
謝謝上傳
回復

使用道具 舉報

ID:18591 發表于 2019-1-20 19:15 | 顯示全部樓層
寫的太棒了
回復

使用道具 舉報

ID:466010 發表于 2019-1-23 17:37 | 顯示全部樓層
下載下來看看
回復

使用道具 舉報

ID:344498 發表于 2019-1-28 14:30 | 顯示全部樓層
帶OS應該是做單片機最高階了
回復

使用道具 舉報

ID:273165 發表于 2019-5-16 10:08 | 顯示全部樓層
不可多得的好資料,謝謝分享
回復

使用道具 舉報

ID:492919 發表于 2019-5-16 19:55 | 顯示全部樓層
看上去好利害啊!
下來看看
回復

使用道具 舉報

ID:346927 發表于 2019-5-17 20:44 | 顯示全部樓層
正在學STM32,不可多得的好資料,謝謝分享!
回復

使用道具 舉報

24#
無效樓層,該帖已經被刪除
ID:171630 發表于 2019-6-30 22:58 | 顯示全部樓層
不錯,已經下載下來,希望可以學習學習。
回復

使用道具 舉報

ID:282431 發表于 2019-7-2 08:52 | 顯示全部樓層
這個是最通俗易懂的uCOS-III教程,學習中
回復

使用道具 舉報

ID:282095 發表于 2019-7-2 11:16 | 顯示全部樓層
很實用
回復

使用道具 舉報

ID:559960 發表于 2019-9-27 08:56 | 顯示全部樓層
感謝分享
回復

使用道具 舉報

29#
無效樓層,該帖已經被刪除
30#
無效樓層,該帖已經被刪除
ID:644362 發表于 2019-11-18 15:53 | 顯示全部樓層
非常棒的教程,謝謝謝謝!
回復

使用道具 舉報

32#
無效樓層,該帖已經被刪除
ID:146034 發表于 2020-1-16 12:41 | 顯示全部樓層
好資料  學習了
回復

使用道具 舉報

ID:655943 發表于 2020-5-2 13:00 | 顯示全部樓層
正想學這個,感謝分享
回復

使用道具 舉報

ID:282431 發表于 2020-5-2 17:24 | 顯示全部樓層
正在學STM32F,好資料,謝謝分享!
回復

使用道具 舉報

ID:690363 發表于 2020-5-9 10:59 | 顯示全部樓層
我這點黑幣啊,估計最后都不夠用了,都是好資料,謝謝
回復

使用道具 舉報

37#
無效樓層,該帖已經被刪除
38#
無效樓層,該帖已經被刪除
您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表