移植os and 相關io介紹

18

Click here to load reader

Upload: hong-da-lin

Post on 24-May-2015

957 views

Category:

Technology


0 download

DESCRIPTION

移植Os and 相關io介紹

TRANSCRIPT

Page 1: 移植Os and  相關io介紹

移植OS & 相關IO介紹陳品杰 <[email protected]>林宏達 <[email protected]>

From NCKU國立台北科技大學 / 2014-08-24

2014/8/13 1

Page 2: 移植Os and  相關io介紹

開始前的準備工作

2014/8/13 2

Page 3: 移植Os and  相關io介紹

移植OS

• 首先至FREERTOS官網下載最新版本FREERTOS• 進行多工系統的嵌入式開發

• 至ST官網下載板子週邊lib• http://www.st.com/web/en/catalog/tools/PF259429

• 使用下列網址的Makefile進行修改編譯• https://github.com/PJayChen/STM32f4xx_Bootloader/blob/master/Makefile

2014/8/13 3

Page 4: 移植Os and  相關io介紹

移植OS

• 這邊以之前說明的test為例,將FreeRTOS、Libraries、Makefile放置到test資料夾下

• 板子要燒入必須跟Compiler說明板子的記憶體相關資訊,所以必須放入linkscript(自行Google查詢linkscript相關資訊)

• test資料夾下新增linkscript資料夾,內容為stm32_flash.ld檔• stm32_flash.ld檔案內容可參照下面網址

• https://github.com/PJayChen/STM32f4xx_Bootloader/blob/master/linkscript/stm32_flash.ld

• 在test資料夾下新增source code跟include資料夾,名稱跟Makefile設定路徑一樣

2014/8/13 4

Page 5: 移植Os and  相關io介紹

移植OS

• 所以我們便在test資料夾下新增src跟inc兩個資料夾• 注意因為Makefile內容將freertos移至Libraries內,若要將freertos拉到test資料夾,Makefile也請一併更該PATH

• 最後test資料夾下會只有2個檔案+4資料夾

2014/8/13 5

Page 6: 移植Os and  相關io介紹

UART設置

2014/8/13 6

Page 7: 移植Os and  相關io介紹

啟用UART

• 於src資料夾下,創建main.c,內容可依照下面網址• https://github.com/PJayChen/STM32f4xx_Bootloader/blob/master/src/main.

c• 其內容主要是創建3個task,分別做UART的測試

2014/8/13 7

Page 8: 移植Os and  相關io介紹

啟用UART

• 進入main一開始我們必須設置一個Queue來放置UART傳送的MSG• 設置Queue的方式可到FreeRtos的官網輸入xQueueCreate會出現使用方法如下

2014/8/13 8

需要include的*.h檔

函式使用的方式

設置Queue的長度設置Queue一格的大小

一格大小是一個Char

Page 9: 移植Os and  相關io介紹

啟用UART

• 設定好Queue後我們必須設置接收的function

2014/8/13 9

Page 10: 移植Os and  相關io介紹

啟用UART

• src/hw_it.c內容是設置USART為中斷處理(不是polling的方式)• 所以必須撰寫中斷處理常式,這邊我們在 prvSetupHardware 內的

USART_Configuration 為 開 啟 USART1 , 所 以 中 斷 函 式 的 名 稱 為USART1_IRQHandler(為Libraries/CMSIS/Device/startup_stm32f40xx.s設定好的)。

2014/8/13 10

Page 11: 移植Os and  相關io介紹

啟用UART

• 接著必須設定板子的GPIO打開UART,透過main底下的 prvSetupHardware()來設定,此函式會呼叫src/hw_conf.c

• hw_conf.c會執行• NVIC_SetVectorTable,中斷的設置

• NVIC_PriorityGroupConfig,中斷優先權設置

• USART_Configuration,USART的設置

• 相關設置的參數可以至http://wiki.csie.ncku.edu.tw/embedded/PWM看程式碼說明

• (最後面附註的四個網址也都有說明)

• 其餘myio.c與String.c為實現printf相關檔案

• (請試著讀懂它,將來就業也是透過讀懂別人的Source Code來修改加入自己的功能,請事先練習,為將來先做準備)。

2014/8/13 11

Page 12: 移植Os and  相關io介紹

啟用UART

• 試著使用make編譯,若發生路徑錯誤找不到檔案,請修改Makefle(這邊可能會出現很多錯誤,請練習著修改),將不必要的檔案刪除盡量簡化資料夾內容。

• 其中Source內的startup檔案請選擇gcc的資料夾下的startup• Libraries/CMSIS/Device/ST/STM32F4xx/Source/Templates/gcc_ride7/startup_stm32f40xx.s

• 板子(stm32f4相關的檔案)的編譯都通過後,可能會出現Freertos的錯誤

• 可能錯誤的原因有資料夾的大小寫、路徑錯誤、缺少FreeRTOSConfig.h、缺少portable.h、檔案名稱不同(startup_stm32f4xx.s -> startup_stm32f40xx.s)

• 其中FreeRTOSConfig.h請參照下面網址編寫(將欲打開的設定打開、priority大小設定、以及TASK命名長度等等)

• https://github.com/PJayChen/STM32f4xx_Bootloader/blob/master/Libraries/freeRTOS/FreeRTOSConfig.h• portable.h位於portable/GCC/ARM_CM4F/底下,獎資料夾下兩個檔案複製到Freertos資料夾下

2014/8/13 12

Page 13: 移植Os and  相關io介紹

啟用UART

• 完成編譯後的情況

• 這時候資料夾下會多出幾個檔案(切忌之前提過的不要將非必要的檔案上傳到GITHUB,如這些編譯後的產生檔*.o,*.elf,*.hex及暫存檔*.~等等)

2014/8/13 13

Page 14: 移植Os and  相關io介紹

啟用UART

• 如果不想要上傳非必要的檔案,請在專案資料夾下(這邊即是test資料夾)新增一個.gitignore的隱藏檔,內容為

• 編譯產生的檔案也可以加入,這邊視需求自行新增。

• 若在圖形化介面下看不到隱藏檔案,可使用Ctrl+H顯示所有檔案

2014/8/13 14

Page 15: 移植Os and  相關io介紹

燒入

• 編譯完成後可使用make qemu對板子做燒入動作(板子不可連接USB3.0只能用2.0,因為LINUX要支援3.0必須經過設置)

• 燒入完成後的結果如下

2014/8/13 15

Page 16: 移植Os and  相關io介紹

練習SHELL撰寫

2014/8/13 16

Page 17: 移植Os and  相關io介紹

練習加入Shell task,創造指令

• 請於main.c的main()內加入一個task為Shell,此task內容為偵測使用者輸入的字元判斷是否為有效指令做出相應的動作。

• 可參照https://github.com/openbox00/quadcopter/blob/master/src/shell.c

• Shell這個task很重要,飛行器的控制都是透過解析字元,做出相應的動作

• 如控制轉速(上升、下降)、前後左右、立即停止(重要!如果發生問題請不要猶豫按下停止)

• 因為我們是透過手機APP(這邊若是使用Android手機是連接不到飛控板上的WIFI,必須經過Root,但是Apple手機的可以連接,所以最好是有人會寫Apple的APP這樣比較方便)控制,所以手機發出的訊號相當於透過WIFI傳送字元給飛控板,飛控板的SHELL接收到字元做出相應的動作

2014/8/13 17

Page 18: 移植Os and  相關io介紹

附註

• 請善用grep、find、man指令

• 請熟悉vi操作

• 請熟讀gun make manual• http://www.gnu.org/software/make/manual/html_node/

• 這些東西都是會用到,但是不熟會卡很久,請務必熟悉,對未來就業是很有幫助的

• 請先閱讀• http://wiki.csie.ncku.edu.tw/embedded/USART• http://wiki.csie.ncku.edu.tw/embedded/PWM• http://wiki.csie.ncku.edu.tw/embedded/SPI• http://wiki.csie.ncku.edu.tw/embedded/GPIO• 這些都是飛行器可能會用到的週邊裝置

2014/8/13 18