移植os and 相關io介紹
DESCRIPTION
移植Os and 相關io介紹TRANSCRIPT
移植OS & 相關IO介紹陳品杰 <[email protected]>林宏達 <[email protected]>
From NCKU國立台北科技大學 / 2014-08-24
2014/8/13 1
開始前的準備工作
2014/8/13 2
移植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
移植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
移植OS
• 所以我們便在test資料夾下新增src跟inc兩個資料夾• 注意因為Makefile內容將freertos移至Libraries內,若要將freertos拉到test資料夾,Makefile也請一併更該PATH
• 最後test資料夾下會只有2個檔案+4資料夾
2014/8/13 5
UART設置
2014/8/13 6
啟用UART
• 於src資料夾下,創建main.c,內容可依照下面網址• https://github.com/PJayChen/STM32f4xx_Bootloader/blob/master/src/main.
c• 其內容主要是創建3個task,分別做UART的測試
2014/8/13 7
啟用UART
• 進入main一開始我們必須設置一個Queue來放置UART傳送的MSG• 設置Queue的方式可到FreeRtos的官網輸入xQueueCreate會出現使用方法如下
2014/8/13 8
需要include的*.h檔
函式使用的方式
設置Queue的長度設置Queue一格的大小
一格大小是一個Char
啟用UART
• 設定好Queue後我們必須設置接收的function
2014/8/13 9
啟用UART
• src/hw_it.c內容是設置USART為中斷處理(不是polling的方式)• 所以必須撰寫中斷處理常式,這邊我們在 prvSetupHardware 內的
USART_Configuration 為 開 啟 USART1 , 所 以 中 斷 函 式 的 名 稱 為USART1_IRQHandler(為Libraries/CMSIS/Device/startup_stm32f40xx.s設定好的)。
2014/8/13 10
啟用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
啟用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
啟用UART
• 完成編譯後的情況
• 這時候資料夾下會多出幾個檔案(切忌之前提過的不要將非必要的檔案上傳到GITHUB,如這些編譯後的產生檔*.o,*.elf,*.hex及暫存檔*.~等等)
2014/8/13 13
啟用UART
• 如果不想要上傳非必要的檔案,請在專案資料夾下(這邊即是test資料夾)新增一個.gitignore的隱藏檔,內容為
• 編譯產生的檔案也可以加入,這邊視需求自行新增。
• 若在圖形化介面下看不到隱藏檔案,可使用Ctrl+H顯示所有檔案
2014/8/13 14
燒入
• 編譯完成後可使用make qemu對板子做燒入動作(板子不可連接USB3.0只能用2.0,因為LINUX要支援3.0必須經過設置)
• 燒入完成後的結果如下
2014/8/13 15
練習SHELL撰寫
2014/8/13 16
練習加入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
附註
• 請善用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