Lab32: QEMU + FreeRTOS
體驗(yàn)一個(gè)具體而微的 MCU 程式開發(fā)過程,使用 GNU Toolchain
藉由 QEMU 模擬環(huán)境,嘗試控制週邊 (STM32 USART) 並觀察其行為
接觸 FreeRTOS
預(yù)先準(zhǔn)備
安裝 Ubuntu Linux,建議版本為 14.04
安裝必要的套件
sudo apt-get install git zlib1g-dev libsdl1.2-dev automake* autoconf* libtool libpixman-1-dev
若 Ubuntu 使用 64bit 版本 ,請額外安裝 lib32gcc1 之套件
sudo apt-get install lib32gcc1 lib32ncurses5
取得 GNU Toolchain: toolchain-2014_05.tar.bz2 、保存到 /tmp 目錄,並且解開到系統(tǒng)中,操作如下
cd / sudo tar jxvf /tmp/toolchain-2014_05.tar.bz2
檢查 Toolchain 是否正確安裝:ls /usr/local/csl/arm-2014.05/
設(shè)定 Toolchain 執(zhí)行檔路徑
export PATH=/usr/local/csl/arm-2014.05/bin:$PATH
提示: 可更新到 ~/.bashrc
STM32 Overview
Powerful but Cheap
Wireless Connectivity
Computing/Prototyping
One for most use cases
MCU: STM32F103RBT6 ARM Cortex-M3, up to 72MHz operation
128K Bytes Program Flash, 20K Bytes RAM
USB, CAN, x2 I2C, x2 ADC 12 bit, x3 UART, x2 SPI, x3 TIMERS
體驗(yàn)一個(gè)具體而微的 MCU 程式開發(fā)過程,使用 GNU Toolchain
藉由 QEMU 模擬環(huán)境,嘗試控制週邊 (STM32 USART) 並觀察其行為
接觸 FreeRTOS
預(yù)先準(zhǔn)備
安裝 Ubuntu Linux,建議版本為 14.04
安裝必要的套件
sudo apt-get install git zlib1g-dev libsdl1.2-dev automake* autoconf* libtool libpixman-1-dev
若 Ubuntu 使用 64bit 版本 ,請額外安裝 lib32gcc1 之套件
sudo apt-get install lib32gcc1 lib32ncurses5
取得 GNU Toolchain: toolchain-2014_05.tar.bz2 、保存到 /tmp 目錄,並且解開到系統(tǒng)中,操作如下
cd / sudo tar jxvf /tmp/toolchain-2014_05.tar.bz2
檢查 Toolchain 是否正確安裝:ls /usr/local/csl/arm-2014.05/
設(shè)定 Toolchain 執(zhí)行檔路徑
export PATH=/usr/local/csl/arm-2014.05/bin:$PATH
提示: 可更新到 ~/.bashrc
STM32 Overview
Powerful but Cheap
Wireless Connectivity
Computing/Prototyping
One for most use cases
MCU: STM32F103RBT6 ARM Cortex-M3, up to 72MHz operation
128K Bytes Program Flash, 20K Bytes RAM
USB, CAN, x2 I2C, x2 ADC 12 bit, x3 UART, x2 SPI, x3 TIMERS
mkdir -p workspace cd workspace git clone git://github.com/beckus/stm32_p103_demos.git || git clone https://github.com/beckus/stm32_p103_demos.git git clone git://github.com/beckus/qemu_stm32.git || git clone https://github.com/beckus/qemu_stm32.git cd qemu_stm32 git submodule update --init dtc || sudo apt-get install libfdt-dev ./configure --disable-werror --enable-debug \ --target-list="arm-softmmu" \ --extra-cflags=-DDEBUG_CLKTREE \ --extra-cflags=-DDEBUG_STM32_RCC \ --extra-cflags=-DDEBUG_STM32_UART \ --extra-cflags=-DSTM32_UART_NO_BAUD_DELAY \ --extra-cflags=-DSTM32_UART_ENABLE_OVERRUN \ --disable-gtk make cd ../stm32_p103_demos make all make blink_flash_QEMURUN make button_QEMURUN make uart_echo_QEMURUNFreeRTOS
已整合檔案系統(tǒng)到 FreeRTOS 中,並可在 UART 顯示檔案系統(tǒng) (romfs) 中的內(nèi)容 (但是目前版本不能正確運(yùn)作)
測試方式
cd ~/workspace
git clone git@github.com:embedded2014/freertos-plus.git
- 或者: git clone https://github.com/embedded2014/freertos-plus.git
cd freertos-plus
make
make qemu
按下 Ctrl-Alt-1 切到 serial
輸入 “help” 可見已實(shí)作的 shell command
ps
mmtest
host
輸入 host ls 並觀察 host 端終端機(jī)的畫面
使用 ARM 所開發(fā)的目標(biāo)系統(tǒng) (target system),不一定會提供所有的輸入/輸出設(shè)備。因此 ARM 設(shè)計(jì)了 semihost 這種機(jī)制,讓運(yùn)行 ARM debugger 的主機(jī)可以與目標(biāo)系統(tǒng)進(jìn)行 I/O 溝通,以利產(chǎn)品開發(fā)
http://albert-oma.blogspot.tw/2012/04/semihosting.html
Semihost 的實(shí)作是透過使用定義好的軟體中斷 (SVCs),使程式在執(zhí)行過程中產(chǎn)生中斷。一旦目標(biāo)系統(tǒng)上的程式呼叫到對應(yīng)的指令 (semihosting call),便產(chǎn)生軟體中斷,接著 Debug Agent 就會負(fù)責(zé)處理此中斷,進(jìn)行與主機(jī)的溝通
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0205g/Bgbjhiea.html
FreeRTOS extensions: https://github.com/hugovincent/mbed-freertos
lib/semifs.c
mbed (mbed.org) target supports semihosted local filesystem, accessible via the mbed USB interface. Should also work with semihosting-compatible debuggers.
QEMU ARM semihosting
http://balau82.wordpress.com/2010/11/04/qemu-arm-semihosting/
參考執(zhí)行畫面:
QEMU monitor 中按下 Ctrl-Alt-2 可切換到 serial0,即可作 UART 輸出/輸入測試,而按下 Ctrl-Alt-1 可切回 QEMU monitor
詳情可參閱 stm32_p103_demos 目錄的 README 檔案
Ubuntu Linux 的「下載」目錄名稱就叫做「下載」,建議可建立 symbolic link 到 “Downloads” 目錄,如下:
ln -s ~/下載 ~/Downloads
參考設(shè)計(jì)要求
修正原本檔案系統(tǒng)無法運(yùn)作的狀況,使 ls 和 cat 一類的指令得以使用
修正和擴(kuò)充 test,試著追加有用的功能,如計(jì)算質(zhì)數(shù)或 Fibonacci 數(shù),並且適度回報(bào)
在 FreeRTOS 中建立新的 task,定期將系統(tǒng)資訊 (參考 shell.c [ps_command]) 透過 ARM semihosting 存放到 host 端檔案系統(tǒng)的 sysinfo 檔案
繳交作業(yè)
截止日期:
Oct 4, 2014 (含) 之前
更新作業(yè)提案到共筆網(wǎng)站: Lab 32 / 作業(yè)共筆,需要標(biāo)注自己的 ID
將符合作業(yè)提案的程式碼,提交到自行 fork 的 repository
https://github.com/embedded2014/freertos-plus
注意: 要記得 fork freertos-plus
參考資訊
Lab21: RTOS - Hackpad (檔案系統(tǒng)原理)
http://wiki.csie.ncku.edu.tw/embedded/Lab32
*博客內(nèi)容為網(wǎng)友個(gè)人發(fā)布,僅代表博主個(gè)人觀點(diǎn),如有侵權(quán)請聯(lián)系工作人員刪除。
干涉儀相關(guān)文章:干涉儀原理
光纖傳感器相關(guān)文章:光纖傳感器原理