www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]  最近拿出了空閑已久的Tiny6410開發(fā)板來玩一下,一直對Linux有變態(tài)的崇拜,所以這次過度沒有懸念的拋棄諸如ADS1.2或RVDS等IDE開發(fā)環(huán)境。完全的VIM + GCC搞定一切。  言簡意賅,生成的BIN放入SD卡中啟動,詳細過

  最近拿出了空閑已久的Tiny6410開發(fā)板來玩一下,一直對Linux有變態(tài)的崇拜,所以這次過度沒有懸念的拋棄諸如ADS1.2或RVDS等IDE開發(fā)環(huán)境。完全的VIM + GCC搞定一切。

  言簡意賅,生成的BIN放入SD卡中啟動,詳細過程參見Tiny6410的幫助文檔,配置文件附送光盤里都有。

  這里僅主要介紹一下如何點亮核心板上的4個LED,當然在此之前arm-linux-gcc交叉編譯環(huán)境要搭建起來,還要添入環(huán)境變量之中(在終端中輸入arm-linux-gcc -v 看是否能正確的查詢到當前交叉編譯器的版本號以檢查是否添加成功,出現(xiàn)如圖所示說明添加成功)。

  為了點亮LED,我們先看一下友善之臂Tiny6410開發(fā)板關(guān)于LED的原理圖部分。

  由圖可見,我們要操作的LED分別由GPK[4-7]口控制。

  然后就是看一下三星的datasheet了。

  可見我們把輸入方向配置為輸出,并輸出低電平LED才會亮?! ?/p>

  首先先看匯編代碼。


@********************************************@File:led_on.s@function:LED@author:pang123hui@********************************************.text@定義一個代碼段.global_start@定義一個全局入口_start:@全局入口處LDRR0,=0x7F008800@設(shè)R0為GPKCON0寄存器MOVR1,#0x11112222@設(shè)置GPKC[4-7]為輸出STRR1,[R0]LDRR0,=0x7F008808@R0設(shè)為GPKDAT寄存器MOVR1,#0x00000000@設(shè)置GPKDAT[4-7]為低電平STRR1,[R0]MAIN_LOOP:BMAIN_LOOP


匯編里的B指令為跳轉(zhuǎn)指令,直接向PC寄存器賦值。B跳轉(zhuǎn)是個相對跳轉(zhuǎn)指令,其機器嗎格式如下:

  即B跳轉(zhuǎn)指令依賴于當前PC寄存器的值,這個特點使得使用B指令的程序不依賴于代碼存儲的位置——即不管這條代碼放在什么位置,B指令都可以跳到正確的位置。這類指令被稱為位置無關(guān)碼。

  還有一條BL指令,除了條裝之外,還將返回地址(BL的下一條指令的地址)保存在LR寄存器中,也是位置無關(guān)的指令。

  B和BL指令可跳轉(zhuǎn)的范圍是當前指令的前后32MB.

相關(guān)Makefile文件。


CC=arm-linux-gccCFLAGS=-g-c-oled_on.bin:led_on.s$(CC)$(CFLAGS)led_on.oled_on.sarm-linux-ld-Ttext0x0000000-gled_on.o-oled_on_elfarm-linux-objcopy-Obinary-Sled_on_elfled_on.binclean:rm-fled_on.binled_on_elf*.o


簡單介紹一下相關(guān)指令。

A.a(chǎn)rm-linux-gcc

-c  對源文件進行預(yù)處理、編譯、匯編,但不做鏈接,生成中間OBJ文件,通常以.o結(jié)尾。

-g添加調(diào)試信息

-o  指定輸出文件。如果不指定-o filename選項,默認輸出為a.out文件。

B. arm-linux-ld

-Ttext startaddr

-Tdada startaddr

-Tbss startaddr

其中-T選項用來指定代碼段、數(shù)據(jù)段、BSS段的起始地址。

如果不定義數(shù)據(jù)段和BBS段的起始地址,它們會被依次放在代碼段的后面。

C. arm-linux-objcopy

用于將一個目標文件復(fù)制到另一個文件內(nèi),可以使用不同于源文件的格式輸出到目的文件。常用于格式轉(zhuǎn)化。

-O用于指定輸出的文件格式。如二進制–O binary

-I  用于指定源文件的格式

-S  不從源文件中復(fù)制重定位信息和符號信息到目標文件

D. arm-linux-objdump

用于顯示二進制文件住處。常用于進行反匯編,方便調(diào)試。

-D  反匯編所有段

-m  指定反匯編目標文件所使用的架構(gòu),如–m arm指定為ARM體系架構(gòu)。

-b指定輸入文件的格式,這不是必須的,arm-linux-objdump能自動識別多種格式。

C語言代碼。


#definerGPKCON0(*(volatileunsigned*)(0x7F008800))#definerGPKCON1(*(volatileunsigned*)(0x7F008804))#definerGPKDAT(*(volatileunsigned*)(0x7F008808))#definerGPKPUD(*(volatileunsigned*)(0x7F00880C))intmain(void){//設(shè)置GPKCON[4-7]為輸出rGPKCON0=0x11112222;//設(shè)置GPKDAT[4-7]為低電平rGPKDAT=0xffffff0f;return0;}


  有些學習過Bootloader和內(nèi)核的朋友肯定會知道,在調(diào)用C語言函數(shù)之前肯定會有一段匯編代碼在前面鋪路,進行一些必要的初始化工作;而那些只學過單片機而沒有學過ARM的朋友肯定會覺得很奇怪,在單片機中寫C代碼,前面完成可以不用任何匯編代碼。這是為什么呢?

  這主要是因為我們的開發(fā)環(huán)境(這里主要是指編譯環(huán)境)的不同,在開發(fā)單片機程序的時候,開發(fā)環(huán)境(如KEIL)會在編譯C代碼的時候,給我添加啟動代碼(startup-51)或者在編譯時已經(jīng)由編譯器在后臺為我們初始化好了。而在開發(fā)ARM程序時,ARM處 理器支持多種模式,多種功能,而在不同的領(lǐng)域不同的項目里面,我們可以有選擇的、適當?shù)倪x擇這些功能,這時,編譯器就不知道我們需要什么功能,需要什么模 式,編譯器也就無法給我們提供默認的“初始化”代碼,所以,編譯器干脆就“不管”這些了,把這些工作交由我們開發(fā)者來處理。

這里最簡單的啟動代碼。


@****************************************@File:startup.s@function:startup@author:pang123hui@****************************************.text.global_start_start:LDRR0,=0x7E004000@WATCHDOG寄存器地址MOVR1,#0x0STRR1,[R0]@寫入0,禁止WATCHDOG,否則CPU會不斷重啟LDRSP,=0x0c001000@設(shè)置堆棧,注意:這時我們是將程序直接燒錄到SDRAM中,所以堆棧要設(shè)置在SDRAM中@如果將程序燒在NANDFLASH中,需將堆棧改為1024*4,因為NANDFLASH中的代碼@在復(fù)位后會移到內(nèi)部RAM中,此RAM只有4KBLmain@調(diào)用C程序中的main函數(shù)halt_loop:Bhalt_loop


這里要注意的一點是S3C6410中RAM的地址,見datasheet,如圖。

最后是Makefile文件。


CC=arm-linux-gccCFLAGS=-g-c-oled_on.bin:startup.smain.c$(CC)$(CFLAGS)startup.ostartup.s$(CC)$(CFLAGS)main.omain.carm-linux-ld-Ttext0x0c000000-gstartup.omain.o-oled_on_elfarm-linux-objcopy-Obinary-Sled_on_elfled_on.binclean:rm-fled_on.binled_on_elf*.o


  東西很簡單沒什么好說的,在此記錄,以免忘記,如有疑問或發(fā)現(xiàn)本文有何錯誤,歡迎提出。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉