第一部分是玩pcduino3下的裸機,這個過程可以讓我們更好的理解嵌入式系統,熟悉我們使用的這個平台。
首先介紹下開發環境:
虛擬機器:vmware? workstation 10.0.2 build-1744117
系統:linux slackware 3.2.29-smp #2 smp
交叉編譯器:arm-linux-gnueabihf- 版本號:gcc version 4.8.2 20130805 (prerelease) (crosstool-ng linaro-1.13.1-4.8-2013.08 - linaro gcc 2013.08)
編輯器:vim
硬體連線如下:
usb 5v電源線和usb轉ttl線連線到pcduino3上,如圖:
說是流水燈,其實我只用到兩個燈,這個板子的led不多,並沒有專門的流水燈配置。我們下看一下原理圖:
我僅僅用到tx_led和rx_led兩個燈:
我們用到這裡的tx和rx兩個燈,重新回到原理圖看看哪兩個管腳來控制這兩個led的:
ph15和ph16分別控制tx_led和rx_led。
在弄清楚硬體連線後,在正式編寫彙編**之前,我們先理清a20的boot順序,根據其datasheet上簡潔的介紹,它支援mmc啟動,也支援nand flash啟動,並且mmc啟動優先於nand flash啟動。a20的datasheet並沒有詳細寫出boot的硬體細節,大概的估摸出大概步驟如下:mmc啟動條件下,硬體會自動將mmc卡中位於偏移量在8k和40k之間的資料搬移到內部的sram1和sram2中:
現在的uboot支援spl方式,就是位於前32k的部分首先在sram中執行,然後初始化dram和mmc介面,然後再搬移後續的uboot到記憶體中執行,再進行載入kernel的操作。
除了這一點,還要注意,mmc啟動時需要加上特定的頭,這裡我們要用到uboot/tools裡面的mksunxiboot工具加這個頭。這個頭由32個位元組的結構體boot_file_head定義,這個結構體裡面有magic和check sum。然後生成一條跳轉**來跳轉到真正地**處進行執行。
**分為兩個彙編檔案:start.s和led.s。start.s設定棧指標,然後就跳到led.s中的主函式中。
start.s**如下:
.text
.global _start
_start:
ldr sp, =0x00007f00
bl main
halt_loop:
b halt_loop
led.s如下:
.equ ph_cfg1, 0x01c20900
.equ ph_cfg3, 0x01c20904
.equ ph_pull0, 0x01c20918
.equ ph_pull1, 0x01c2091c
.equ ph_dat, 0x01c2090c
.global main
main:
ldr r0,=ph_cfg1
ldr r1,=0x10000000
str r1, [r0]
ldr r0,=ph_cfg2
ldr r1,=0x00000001
str r1, [r0]
ldr r0,=ph_pull0
ldr r1,=0x55555555
str r1, [r0]
ldr r0,=ph_pull1
ldr r1,=0x55555555
str r1, [r0]
ledloop:
ldr r0,=ph_dat
ldr r1,=0x000f0000
str r1, [r0]
bl delay
ldr r0,=ph_dat
ldr r1,=0x0000f000
str r1, [r0]
bl delay
b ledloop
delay:
ldr r3,=0xfffff
delay1:
sub r3,r3,#1
cmp r3,#0x0
bne delay1
mov pc,lr
**很簡單,編譯完後記得使用mksunxiboot工具處理一下,最後使用dd命令燒寫到8k偏移處。
最後就可以看到兩個燈一閃一閃亮晶晶了,現在還沒有初始化時鐘,注意調整延時,不然效果不大對。
一步步學ROS
最近因為看svo的 裡面用到catkin決定要好好看ros,年前學會基本操作。啟動節點 rosrun package name executable name 檢視節點 rosnode list 注 rosout 節點是乙個特殊的節點,通過 roscore 自動啟動 檢視特定節點的資訊 rosnod...
windows Thrift c 一步步搭建
1.thrift 原始碼路徑 2.libevent原始碼路徑 3.boost路徑 安裝 conan install boost 1.68.0 conan stable 4.openssl路徑 安裝 conan install openssl 1.1.1a conan stable conan安裝bo...
一步步啟動linux
可以一步一步啟動linux.在ubantu剛一啟動時,按c健即進入grub 提示符狀態,在此狀態下輸入 我用的是ubuntu 13 grub linux vmlinuz grub ls boot grub initrd boot initrd.img 3.11.0 15 generic grub b...