SlideShare a Scribd company logo
1 of 18
Download to read offline
移植OS & 相關IO介紹
陳品杰 <n26021539@mail.ncku.edu.tw>
林宏達 <openbox00.tw@gmail.com>
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_flas
h.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

More Related Content

What's hot

NF core-workflow
NF core-workflow NF core-workflow
NF core-workflow ChenzheLuo
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版redhat9
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训青帅 常
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器ekoing
 
Virtualbox tutorial
Virtualbox tutorialVirtualbox tutorial
Virtualbox tutorialcri fan
 
Ch9 package & port(2013 ncu-nos_nm)
Ch9 package & port(2013 ncu-nos_nm)Ch9 package & port(2013 ncu-nos_nm)
Ch9 package & port(2013 ncu-nos_nm)Kir Chou
 
06.web sphere培训 实践
06.web sphere培训 实践06.web sphere培训 实践
06.web sphere培训 实践littlecong
 
Harden Your Linux
Harden Your LinuxHarden Your Linux
Harden Your LinuxTim Hsu
 
Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)sunlick
 
如何用 Docker 快速建立 honeypot public
如何用 Docker 快速建立 honeypot public如何用 Docker 快速建立 honeypot public
如何用 Docker 快速建立 honeypot publicTim Hsu
 
Virtual file system (VFS)
Virtual file system (VFS)Virtual file system (VFS)
Virtual file system (VFS)Waylin Ch
 
Clonezilla tutorial.v7
Clonezilla tutorial.v7Clonezilla tutorial.v7
Clonezilla tutorial.v7hs1250
 
Installation and configuration 11g r2
Installation and configuration 11g r2Installation and configuration 11g r2
Installation and configuration 11g r2Zhaoyang Wang
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)acqua young
 
OpenWRT, A value-add base solution for your product. (2nd, Macpual)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)OpenWRT, A value-add base solution for your product. (2nd, Macpual)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)Macpaul Lin
 
[精华回顾]讲座:How To Install Linux
[精华回顾]讲座:How To Install Linux[精华回顾]讲座:How To Install Linux
[精华回顾]讲座:How To Install LinuxNJU OPEN
 
基于Ubuntu 12.04 LTS Server的无盘工作站
基于Ubuntu 12.04 LTS Server的无盘工作站基于Ubuntu 12.04 LTS Server的无盘工作站
基于Ubuntu 12.04 LTS Server的无盘工作站Shawn Zhung
 
利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版xingsu1021
 
1, shell intro
1, shell intro1, shell intro
1, shell introted-xu
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 Lheima911
 

What's hot (20)

NF core-workflow
NF core-workflow NF core-workflow
NF core-workflow
 
Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版Bypat博客出品-利用cent os快速构建自己的发行版
Bypat博客出品-利用cent os快速构建自己的发行版
 
Docker一期培训
Docker一期培训Docker一期培训
Docker一期培训
 
基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器基于PXE实现部署Linux服务器
基于PXE实现部署Linux服务器
 
Virtualbox tutorial
Virtualbox tutorialVirtualbox tutorial
Virtualbox tutorial
 
Ch9 package & port(2013 ncu-nos_nm)
Ch9 package & port(2013 ncu-nos_nm)Ch9 package & port(2013 ncu-nos_nm)
Ch9 package & port(2013 ncu-nos_nm)
 
06.web sphere培训 实践
06.web sphere培训 实践06.web sphere培训 实践
06.web sphere培训 实践
 
Harden Your Linux
Harden Your LinuxHarden Your Linux
Harden Your Linux
 
Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)Php Extension--yahoo(Cc0cc)
Php Extension--yahoo(Cc0cc)
 
如何用 Docker 快速建立 honeypot public
如何用 Docker 快速建立 honeypot public如何用 Docker 快速建立 honeypot public
如何用 Docker 快速建立 honeypot public
 
Virtual file system (VFS)
Virtual file system (VFS)Virtual file system (VFS)
Virtual file system (VFS)
 
Clonezilla tutorial.v7
Clonezilla tutorial.v7Clonezilla tutorial.v7
Clonezilla tutorial.v7
 
Installation and configuration 11g r2
Installation and configuration 11g r2Installation and configuration 11g r2
Installation and configuration 11g r2
 
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
Install oracle ebs r12.1.1 on OEL5.6 x86(include demo)
 
OpenWRT, A value-add base solution for your product. (2nd, Macpual)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)OpenWRT, A value-add base solution for your product. (2nd, Macpual)
OpenWRT, A value-add base solution for your product. (2nd, Macpual)
 
[精华回顾]讲座:How To Install Linux
[精华回顾]讲座:How To Install Linux[精华回顾]讲座:How To Install Linux
[精华回顾]讲座:How To Install Linux
 
基于Ubuntu 12.04 LTS Server的无盘工作站
基于Ubuntu 12.04 LTS Server的无盘工作站基于Ubuntu 12.04 LTS Server的无盘工作站
基于Ubuntu 12.04 LTS Server的无盘工作站
 
利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版利用Cent Os快速构建自己的发行版
利用Cent Os快速构建自己的发行版
 
1, shell intro
1, shell intro1, shell intro
1, shell intro
 
Install Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 LInstall Oracle11g For Aix 5 L
Install Oracle11g For Aix 5 L
 

Similar to 移植Os and 相關io介紹

嵌入式平台移植技巧概說
嵌入式平台移植技巧概說嵌入式平台移植技巧概說
嵌入式平台移植技巧概說Joseph Lu
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)Max Lai
 
I pv6電子郵件系統講習 0623_v2
I pv6電子郵件系統講習 0623_v2I pv6電子郵件系統講習 0623_v2
I pv6電子郵件系統講習 0623_v2宏義 張
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率Bo-Yi Wu
 
Crashlytics 使用教學
Crashlytics 使用教學Crashlytics 使用教學
Crashlytics 使用教學ShengWen Chiou
 
@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azure@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azureBruce Chen
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
Weic2015 docker
Weic2015 dockerWeic2015 docker
Weic2015 dockerRay Lin
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
OpenStack系列公开课2 -20130508
OpenStack系列公开课2 -20130508OpenStack系列公开课2 -20130508
OpenStack系列公开课2 -20130508OpenCity Community
 
OpenWrt Case Study 2008
OpenWrt Case Study 2008OpenWrt Case Study 2008
OpenWrt Case Study 2008Rex Tsai
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC
 
Firefox OS Overview
Firefox OS OverviewFirefox OS Overview
Firefox OS OverviewYan-ren Tsai
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式Bo-Yi Wu
 
用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手Alan Tsai
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIChu-Siang Lai
 

Similar to 移植Os and 相關io介紹 (20)

嵌入式平台移植技巧概說
嵌入式平台移植技巧概說嵌入式平台移植技巧概說
嵌入式平台移植技巧概說
 
使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)使用 Pytest 進行單元測試 (PyCon TW 2021)
使用 Pytest 進行單元測試 (PyCon TW 2021)
 
I pv6電子郵件系統講習 0623_v2
I pv6電子郵件系統講習 0623_v2I pv6電子郵件系統講習 0623_v2
I pv6電子郵件系統講習 0623_v2
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率
 
Crashlytics 使用教學
Crashlytics 使用教學Crashlytics 使用教學
Crashlytics 使用教學
 
@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azure@Connect(); microsoft visual studio vnext & azure
@Connect(); microsoft visual studio vnext & azure
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
Clonezilla
ClonezillaClonezilla
Clonezilla
 
Weic2015 docker
Weic2015 dockerWeic2015 docker
Weic2015 docker
 
Ox office現在。即未來(201509)
Ox office現在。即未來(201509)Ox office現在。即未來(201509)
Ox office現在。即未來(201509)
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
OpenStack系列公开课2 -20130508
OpenStack系列公开课2 -20130508OpenStack系列公开课2 -20130508
OpenStack系列公开课2 -20130508
 
OpenWrt Case Study 2008
OpenWrt Case Study 2008OpenWrt Case Study 2008
OpenWrt Case Study 2008
 
twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops) twMVC#38 How we migrate tfs to git(using azure dev ops)
twMVC#38 How we migrate tfs to git(using azure dev ops)
 
Python01
Python01Python01
Python01
 
Firefox OS Overview
Firefox OS OverviewFirefox OS Overview
Firefox OS Overview
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手用Octopus deploy做自動部署 - 快速上手
用Octopus deploy做自動部署 - 快速上手
 
Continuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CIContinuous Delivery with Ansible x GitLab CI
Continuous Delivery with Ansible x GitLab CI
 

移植Os and 相關io介紹