娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

寫(xiě)在前面的話,由于已經(jīng)學(xué)習(xí)了JZ2440V3開(kāi)發(fā)板的裸機(jī)程序。想檢驗(yàn)下學(xué)習(xí)成果,所以從今天開(kāi)始把以前學(xué)的知識(shí)點(diǎn)在tiny4412開(kāi)發(fā)板上面做個(gè)檢驗(yàn)。裸機(jī)部分學(xué)習(xí)到把uboot移植完成就結(jié)束;然后,學(xué)習(xí)內(nèi)核的驅(qū)動(dòng)和其他子系統(tǒng)框架。言歸正傳,現(xiàn)在開(kāi)始學(xué)習(xí)交叉編譯工具鏈的使用。


源文件需要經(jīng)過(guò)編譯才能生成可執(zhí)行文件。在Windows下進(jìn)行開(kāi)發(fā)時(shí),只需要點(diǎn)幾個(gè)按鈕即可編譯,集成開(kāi)發(fā)環(huán)境(比如 Visual studio)已經(jīng)將各種編譯工具的使用封裝好了。


Linux下也有很優(yōu)秀的集成開(kāi)發(fā)工具,但是更多的時(shí)候是直接以命令方式運(yùn)行編譯工具;即使使用集成開(kāi)發(fā)工具,也需要掌握一些編譯選項(xiàng)。


PC機(jī)上的編譯工具鏈為gcc、 ld、 objcopy、 objdump等,它們編譯出來(lái)的程序在x86平臺(tái)上運(yùn)行。要編譯出能在ARM平臺(tái)上運(yùn)行的程序,必須使用交叉編譯工具arm-linux-gcc、arm-linux-ld等,下面分別介紹。


1.arm-linux-gcc工具介紹


一個(gè) C/C++文件要經(jīng)過(guò)預(yù)處理(preprocessing)、編譯(compilation)、匯編(assembly)和連接(linking)等4步才能變成可執(zhí)行文件,如表1.1所示。在日常交流中通常使用"編譯"統(tǒng)稱這4個(gè)步驟,如果不是特指這4個(gè)步驟中的某一個(gè),本書(shū)也依慣例使用"編譯"這個(gè)統(tǒng)稱。


1.1.預(yù)處理


C/C++源文件中,以"#"開(kāi)頭的命令被稱為預(yù)處理命令,如包含命令"#include"、宏定義命令"#define"、條件編譯命令"#if"、"#ifdef"等。預(yù)處理就是將要包含(include)的文件插入原文件中、將宏定義展開(kāi)、根據(jù)條件編譯命令選擇要使用的代碼,最后將這些東西輸出到一個(gè)".i"文件中等待進(jìn)一步處理。預(yù)處理將用到arm-linux-cpp工具。


1.2.編譯


編譯就是把 C/C++代碼(比如上述的".i"文件)"翻譯"成匯編代碼,所用到的工具為cc1(它的名字就是 cc1,不是 arm-linux-cc1)。


1.3.匯編


匯編就是將第二步輸出的匯編代碼翻譯成符合一定格式的機(jī)器代碼,在Linux系統(tǒng)上一般表現(xiàn)為ELF目標(biāo)文件(OBJ文件),用到的工具為arm-linux-as。"反匯編"是指將機(jī)器代碼轉(zhuǎn)換為匯編代碼,這在調(diào)試程序時(shí)常常用到。


1.4.連接


連接就是將上步生成的OBJ文件和系統(tǒng)庫(kù)的OBJ文件、庫(kù)文件連接起來(lái),最終生成了可以在特定平臺(tái)運(yùn)行的可執(zhí)行文件,用到的工具為arm-linux-ld。


編譯器利用這4個(gè)步驟中的一個(gè)或多個(gè)來(lái)處理輸入文件,源文件的后綴名表示源文件所用的語(yǔ)言,后綴名控制著編譯器的缺省動(dòng)作,如表1.1。

image.png

其他后綴名的文件被傳遞給連接器(linker),通常包括:


o:目標(biāo)文件(Object file,OBJ文件)

a:歸檔庫(kù)文件(Archive file)

在編譯過(guò)程中,除非使用了"-c","-S"或"-E"選項(xiàng)(或者編譯錯(cuò)誤阻止了完整的過(guò)程),否則最后的步驟總是連接。在連接階段中,所有對(duì)應(yīng)于源程序的.o文件,"-l"選項(xiàng)指定的庫(kù)文件,無(wú)法識(shí)別的文件名(包括指定的".o"目標(biāo)文件和".a"庫(kù)文件)按命令行中的順序傳遞給連接器。


以一個(gè)簡(jiǎn)單的"Hello, world!" C程序?yàn)槔拇a如下,功能為打印"Hello World!"字符串。


/* File: hello.c */

#include

int main(int argc, char *argv[])

{

printf("Hello World!n");

return 0;

}

使用arm-linux-gcc,只需要一個(gè)命令就可以生成可執(zhí)行文件hello,它包含了上述4個(gè)步驟:


arm-linux-gcc -o hello hello.c

加上"-v"選項(xiàng), 即使用"arm-linux-gcc -v -o hello hello.c"命令可以觀看編譯的細(xì)節(jié),下面摘取關(guān)鍵部分:


cc1 hello.c -o /tmp/cctETob7.s

as -o /tmp/ccvv2KbL.o /tmp/cctETob7.s

collect2 -o hello crt1.o crti.o crtbegin.o /tmp/ccvv2KbL.o crtend.o crtn.o

以上3個(gè)命令分別對(duì)應(yīng)于編譯步驟中的預(yù)處理、編譯、匯編和連接, ld被collect2調(diào)用來(lái)連接程序。預(yù)處理和編譯被放在了一個(gè)命令(cc1)中進(jìn)行的,可以把它再次拆分為以下兩步:


cpp -o hello.i hello.c

cc1 hello.i -o /tmp/cctETob7.s

可以通過(guò)各種選項(xiàng)來(lái)控制arm-linux-gcc的動(dòng)作,下面介紹一些常用的選項(xiàng):


總體選項(xiàng):


-c選項(xiàng):預(yù)處理、編譯和匯編源文件,但是不作連接,編譯器根據(jù)源文件生成OBJ文件。缺省情況下,GCC通過(guò)用".o"替換源文件名的后綴".c",".i",".s"等,產(chǎn)生OBJ文件名。可以使用-o選項(xiàng)選擇其他名字。GCC忽略-c選項(xiàng)后面任何無(wú)法識(shí)別的輸入文件。


-S選項(xiàng):編譯后即停止,不進(jìn)行匯編。對(duì)于每個(gè)輸入的非匯編語(yǔ)言文件,輸出結(jié)果是匯編語(yǔ)言文件。缺省情況下,GCC通過(guò)用".s"替換源文件名后綴".c",".i"等等,產(chǎn)生匯編文件名。可以使用-o選項(xiàng)選擇其他名字。GCC忽略任何不需要匯編的輸入文件。


-E選項(xiàng):預(yù)處理后即停止,不進(jìn)行編譯。預(yù)處理后的代碼送往標(biāo)準(zhǔn)輸出。GCC忽略任何不需要預(yù)處理的輸入文件。


-o選項(xiàng):指定輸出文件為file。無(wú)論是預(yù)處理、編譯、匯編還是連接,這個(gè)選項(xiàng)都可以使用。如果沒(méi)有使用'-o'選項(xiàng),默認(rèn)的輸出結(jié)果是:可執(zhí)行文件為'a.out';修改輸入文件的名稱是'source.suffix',則它的OBJ文件是'source.o',匯編文件是'source.s',而預(yù)處理后的C源代碼送往標(biāo)準(zhǔn)輸出。


-v選項(xiàng):顯示制作GCC工具自身時(shí)的配置命令;同時(shí)顯示編譯器驅(qū)動(dòng)程序、預(yù)處理器、編譯器的版本號(hào)。


以一個(gè)程序?yàn)槔齻€(gè)文件,下面列出源碼:


//File: main.c

#include

#include "sub.h"

 

int main(int argc, char *argv[])

{

int i;

printf("Main fun!n");

sub_fun();

return 0;

}

 

//File: sub.h

void sub_fun(void);

 

//File: sub.c

void sub_fun(void)

{

printf("Sub fun!n");

}

arm-linux-gcc、arm-linux-ld等工具與gcc、ld等工具的使用方法相似,很多選項(xiàng)是一樣的。本節(jié)使用gcc、ld等工具進(jìn)行編譯、連接,這樣可以在PC上直接看到運(yùn)行結(jié)果。使用上面介紹的選項(xiàng)進(jìn)行編譯,命令如下:


$ gcc -c -o main.o main.c

$ gcc -c -o sub.o sub.c

$ gcc -o test main.o sub.o

其中,main.o、sub.o是經(jīng)過(guò)了預(yù)處理、編譯、匯編后生成的OBJ文件,它們還沒(méi)有被連接成可執(zhí)行文件;最后一步將它們連接成可執(zhí)行文件test,可以直接運(yùn)行以下命令:


$ ./test

Main fun!

Sub fun!

現(xiàn)在試試其他選項(xiàng),以下命令生成的main.s是main.c的匯編語(yǔ)言文件:


gcc -S -o main.s main.c

以下命令對(duì)main.c進(jìn)行預(yù)處理,并將得到的結(jié)果打印出來(lái)。里面擴(kuò)展了所有包含的文件、所有定義的宏。在編寫(xiě)程序時(shí),有時(shí)候查找某個(gè)宏定義是非常繁瑣的事,可以使用'-dM –E'選項(xiàng)來(lái)查看。命令如下:


$ gcc -E main.c

警告選項(xiàng):


-Wall選項(xiàng):這個(gè)選項(xiàng)基本打開(kāi)了所有需要注意的警告信息,比如沒(méi)有指定類型的聲明、在聲明之前就使用的函數(shù)、局部變量除了聲明就沒(méi)再使用等。 


上面的main.c文件中,第6行定義的變量i沒(méi)有被使用,但是使用"gcc –c –o main.o main.c"進(jìn)行編譯時(shí)并沒(méi)有出現(xiàn)提示。

可以加上-Wall選項(xiàng),例子如下:


$ gcc -Wall -c main.c

執(zhí)行上述命令后,得到如下警告信息:


main.c: In function `main':

main.c:6: warning: unused variable `i

這個(gè)警告雖然對(duì)程序沒(méi)有壞的影響,但是有些警告需要加以關(guān)注,比如類型匹配的警告等。


調(diào)試選項(xiàng):


-g選項(xiàng):以操作系統(tǒng)的本地格式(stabs,COFF,XCOFF,或DWARF)產(chǎn)生調(diào)試信息,GDB能夠使用這些調(diào)試信息。在大多數(shù)使用stabs格式的系統(tǒng)上,'-g'選項(xiàng)加入只有GDB才使用的額外調(diào)試信息。可以使用下面的選項(xiàng)來(lái)生成額外的信息:'-gstabs+','-gstabs','-gxcoff+','-gxcoff','-gdwarf+'或'-gdwarf',具體用法請(qǐng)讀者參考GCC手冊(cè)。


優(yōu)化選項(xiàng):


-O或-O1選項(xiàng):優(yōu)化:對(duì)于大函數(shù),優(yōu)化編譯的過(guò)程將占用稍微多的時(shí)間和相當(dāng)大的內(nèi)存。不使用"-O"或"-O1"選項(xiàng)的目的是減少編譯的開(kāi)銷,使編譯結(jié)果能夠調(diào)試、語(yǔ)句是獨(dú)立的;如果在兩條語(yǔ)句之間用斷點(diǎn)中止程序,可以對(duì)任何變量重新賦值,或者在函數(shù)體內(nèi)把程序計(jì)數(shù)器指到其他語(yǔ)句,以及從源程序中精確地獲取你所期待的結(jié)果。


-O2選項(xiàng):多優(yōu)化一些。除了涉及空間和速度交換的優(yōu)化選項(xiàng),執(zhí)行幾乎所有的優(yōu)化工作。例如不進(jìn)行循環(huán)展開(kāi)(loop unrolling)和函數(shù)內(nèi)嵌(inlining)。和'-O'或'-O1'選項(xiàng)比較,這個(gè)選項(xiàng)既增加了編譯時(shí)間,也提高了生成代碼的運(yùn)行效果。


-O3選項(xiàng):優(yōu)化的更多。除了打開(kāi)-O2所做的一切,它還打開(kāi)了-finline-functions選項(xiàng)。 


-O0選項(xiàng):不優(yōu)化。


如果指定了多個(gè)-O選項(xiàng),不管帶不帶數(shù)字,生效的是最后一個(gè)選項(xiàng)。在一般應(yīng)用中,經(jīng)常使用-O2選項(xiàng),比如對(duì)于options程序:


$ gcc -O2 -c -o main.o main.c

$ gcc -O2 -c -o sub.o sub.c

$ gcc -o test main.o sub.o

連接器選項(xiàng):


下面的選項(xiàng)用于連接OBJ文件,輸出可執(zhí)行文件或庫(kù)文件。


object-file-name選項(xiàng):如果某些文件沒(méi)有特別明確的后綴(a special recognized suffix),GCC就認(rèn)為他們是OBJ文件或庫(kù)文件(根據(jù)文件內(nèi)容,連接器能夠區(qū)分 OBJ 文件和庫(kù)文件)。如果GCC執(zhí)行連接操作,這些OBJ文件將成為連接器的輸入文件。


比如上面的"gcc -o test main.o sub.o"中,main.o、sub.o就是輸入的文件。


-llibrary選項(xiàng):連接名為library的庫(kù)文件。連接器在標(biāo)準(zhǔn)搜索目錄中尋找這個(gè)庫(kù)文件,庫(kù)文件的真正名字是'liblibrary.a'。搜索目錄除了一些系統(tǒng)標(biāo)準(zhǔn)目錄外,還包括用戶以'-L'選項(xiàng)指定的路徑。


目錄選項(xiàng):


下列選項(xiàng)指定搜索路徑,用于查找頭文件,庫(kù)文件,或編譯器的某些成員。


-Idir選項(xiàng):在頭文件的搜索路徑列表中添加dir目錄。


頭文件的搜索方法為:如果以"#include<>"包含文件,則只在標(biāo)準(zhǔn)庫(kù)目錄開(kāi)始搜索(包括使用-Idir選項(xiàng)定義的目錄);如以"#include “” "包含文件,則先從用戶的工作目錄開(kāi)始搜索,再搜索標(biāo)準(zhǔn)庫(kù)目錄。


1.2.arm-linux-ld工具介紹


arm-linux-ld用于將多個(gè)目標(biāo)文件、庫(kù)文件連接成可執(zhí)行文件,它的大多數(shù)選項(xiàng)已經(jīng)在上面介紹過(guò)了。


本小節(jié)介紹'-T'選項(xiàng),可以直接使用它來(lái)指定代碼段、數(shù)據(jù)段、bss段的起始地址,也可以用來(lái)指定一個(gè)連接腳本,在連接腳本中進(jìn)行更復(fù)雜的地址設(shè)置。


'-T'選項(xiàng)只在連接Bootloader、內(nèi)核等“沒(méi)有底層軟件支持”的軟件;連接運(yùn)行于操作系統(tǒng)之上的應(yīng)用程序時(shí),無(wú)需指定`-T’ 選項(xiàng),它們使用默認(rèn)的方式進(jìn)行連接。


直接指定代碼段、數(shù)據(jù)段、bss段的起始地址:


格式如下:


-Ttext startaddr

-Tdata startaddr

-Tbss startaddr

其中的'startaddr'分別表示代碼段、數(shù)據(jù)段和bss段的起始地址,它是一個(gè)16進(jìn)制數(shù)。示例:


arm-linux-ld -Ttext 0x0000000 -g led_on.o -o led_on_elf

它表示代碼段的運(yùn)行地址為0x0000000,由于沒(méi)有定義數(shù)據(jù)段、bss段的起始地址,它們被依次放在代碼段的后面。


使用連接腳本設(shè)置地址:


示例,它的Makefile中有這一句:


arm-linux-ld -Ttimer.lds -o timer_elf $^

其中的'$^'表示"head.o init.o interrupt.o main.o"(為何如此暫時(shí)不用管),所以這句代碼就變?yōu)椋?p>

arm-linux-ld -Ttimer.lds -o timer_elf head.o init.o interrupt.o main.o

它使用連接腳本timer.lds來(lái)設(shè)置可執(zhí)行文件timer_elf的地址信息,timer_elf文件內(nèi)容如下:


SECTIONS {

. = 0x30000000;

.text : { *(.text) }

.rodata ALIGN(4) : {*(.rodata)}

.data ALIGN(4) : { *(.data) }

.bss ALIGN(4) : { *(.bss) *(COMMON) }

}

解析timer_elf文件之前,先講解連接腳本的格式。連接腳本的基本命令是SECTIONS命令,它描述了輸出文件的"映射圖":輸出文件中各段、各文件怎么放置。一個(gè)SECTIONS命令內(nèi)部包含一個(gè)或多個(gè)段,段(Section)是連接腳本的基本單元,它表示輸入文件中的某部分怎么放置。


完整的連接腳本格式如下,它的核心部分是段(Section):


SECTIONS {

...

secname start ALIGN(align) (NOLOAD) : AT(ldadr)

{ contents } >region :phdr =fill

...

}

secname和contents是必須的,前者用來(lái)命名這個(gè)段,后者用來(lái)確定代碼中的什么部分放在這個(gè)段中。


start是這個(gè)段重定位地址,也稱為運(yùn)行地址。如果代碼中有位置相關(guān)的指令,程序在運(yùn)行時(shí),這個(gè)段必須放在這個(gè)地址上。


ALIGN(align):雖然start指定了運(yùn)行地址,但是仍可以使用 BLOCK(align)來(lái)指定對(duì)齊的要求──這個(gè)對(duì)齊的地址才是真正的運(yùn)行地址。


(NOLOAD):用來(lái)告訴加載器,在運(yùn)行時(shí)不用加載這個(gè)段。顯然,這個(gè)選項(xiàng)只有在有操作系統(tǒng)的情況下才有意義。


AT(ldadr):指定這個(gè)段在編譯出來(lái)的映像文件中的地址──加載地址(load address)。如果不使用這個(gè)選項(xiàng),則加載地址等于運(yùn)行地址。通過(guò)這個(gè)選項(xiàng),可以控制各段分別保存輸出文件中不同的位置,便于把文件保存到到單板上:A段放在A處,B段放在B處,運(yùn)行前再把A、B段分別讀出來(lái)組裝成一個(gè)完整的執(zhí)行程序。


現(xiàn)在,可以明白前面的連接腳本timer.lds的含義了:


第2行表示設(shè)置"當(dāng)前運(yùn)行地址"為0x30000000。


第3行定義了一個(gè)名為".text"的段,它的內(nèi)容為"*(.text)",表示所有輸入文件的代碼段。這些代碼段被集合在一起,起始運(yùn)行地址為0x30000000。


第 4 行定義了一個(gè)名為".rodata"的段,在輸出文件timer_elf中,它緊挨著".text"段存放。其中的"ALIGN(4)"表示起始運(yùn)行地址為4字節(jié)對(duì)齊。假設(shè)前面".text"段的地址范圍是0x30000000~0x300003f1,則".rodata"段的地址是4字節(jié)對(duì)齊后的0x300003f4。


第5、6行的含義與第4行類似。


1.3.arm-linux-objcopy工具介紹


arm-linux-objcopy被用來(lái)拷貝一個(gè)目標(biāo)文件的內(nèi)容到另一個(gè)文件中,可以使用不同于源文件的格式來(lái)輸出目的文件,即可以進(jìn)行格式轉(zhuǎn)換。


在本書(shū)中,常用arm-linux-objcopy來(lái)將ELF格式的可執(zhí)行文件轉(zhuǎn)換為二進(jìn)制文件。arm-linux-objcopy的使用格式如下:


arm-linux-objcopy [ -F bfdname | --target=bfdname ]

[ -I bfdname | --input-target=bfdname ]

[ -O bfdname | --output-target= bfdname ]

[ -S | --strip-all ] [ -g | --strip-debug ]

[ -K symbolname | --keep-symbol= symbolname ]

[ -N symbolname | --strip-symbol= symbolname ]

[ -L symbolname | --localize-symbol= symbolname ]

[ -W symbolname | --weaken-symbol= symbolname ]

[ -x | --discard-all ] [ -X | --discard-locals ]

[ -b byte | --byte= byte ]

[ -i interleave | --interleave= interleave ]

[ -R sectionname | --remove-section= sectionname ]

[ -p | --preserve-dates ] [ --debugging ]

[ --gap-fill= val ] [ --pad-to= address ]

[ --set-start= val ] [ --adjust-start= incr ]

[ --change-address= incr ]

[ --change-section-address= section{=,+,-} val ]

[ --change-warnings ] [ --no-change-warnings ]

[ --set-section-flags= section= flags ]

[ --add-section= sectionname= filename ]

[ --change-leading char ] [--remove-leading-char ]

[ --weaken ]

[ -v | --verbose ] [ -V | --version ] [ --help ]

input-file [ outfile ]

下面講解常用的選項(xiàng):


input-file、outfile選項(xiàng):參數(shù)input-file和outfile分別表示輸入目標(biāo)文件(源目標(biāo)文件)和輸出目標(biāo)文件(目的目標(biāo)文件)。如果在命令行中沒(méi)有明確地指定outfile,那么arm-linux-objcopy將創(chuàng)建一個(gè)臨時(shí)文件來(lái)存放目標(biāo)結(jié)果,然后使用input-file的名字來(lái)重命名這個(gè)臨時(shí)文件(這時(shí)候,原來(lái)的input-file將被覆蓋)。


-I bfdname或--input-target=bfdname選項(xiàng):用來(lái)指明源文件的格式,bfdname是BFD庫(kù)中描述的標(biāo)準(zhǔn)格式名。如果不指明源文件格式,arm-linux-objcopy會(huì)自己去分析源文件的格式,然后去和BFD中描述的各種格式比較,從而得知源文件的目標(biāo)格式名。


-O bfdname或--output-target= bfdname選項(xiàng):使用指定的格式來(lái)輸出文件,bfdname是BFD庫(kù)中描述的標(biāo)準(zhǔn)格式名。


-F bfdname或--target= bfdname選項(xiàng):同時(shí)指明源文件、目的文件的格式。將源目標(biāo)文件中的內(nèi)容拷貝到目的目標(biāo)文件的過(guò)程中,只進(jìn)行拷貝不做格式轉(zhuǎn)換,源目標(biāo)文件是什么格式,目的目標(biāo)文件就是什么格式。


-R sectionname或--remove-section= sectionname選項(xiàng):從輸出文件中刪掉所有名為sectionname的段。這個(gè)選項(xiàng)可以多次使用。


-S 或--strip-all選項(xiàng):不從源文件中拷貝重定位信息和符號(hào)信息到目標(biāo)文件中去。


-g 或--strip-debug選項(xiàng):不從源文件中拷貝調(diào)試符號(hào)到目標(biāo)文件中去。


在編譯bootloader、內(nèi)核時(shí),常用arm-linux-objcopy命令將ELF格式的生成結(jié)果轉(zhuǎn)換為二進(jìn)制文件,比如:


$ arm-linux-objcopy -O binary -S elf_file bin_file

1.4.arm-linux-objdump工具介紹:


arm-linux-objdump用于顯示二進(jìn)制文件信息,本書(shū)中常用來(lái)查看反匯編代碼。使用格式如下:


arm-linux-objdump [-a] [-b bfdname | --target=bfdname]

[-C] [--debugging]

[-d] [-D]

[--disassemble-zeroes]

[-EB|-EL|--endian={big|little}] [-f]

[-h] [-i|--info]

[-j section | --section=section]

[-l] [-m machine ] [--prefix-addresses]

[-r] [-R]

[-s|--full-contents] [-S|--source]

[--[no-]show-raw-insn] [--stabs] [-t]

[-T] [-x]

[--start-address=address] [--stop-address=address]

[--adjust-vma=offset] [--version] [--help]

objfile...

下面講解常用的選項(xiàng):


-b bfdname或--target=bfdname選項(xiàng):指定目標(biāo)碼格式。這不是必須的,arm-linux-objdump能自動(dòng)識(shí)別許多格式。可以使用

"arm-linux-objdump –i"命令查看支持的目標(biāo)碼格式列表。


--disassemble或-d選項(xiàng):反匯編可執(zhí)行段(executable sections)。


--disassemble-all或-D選擇:與-d 類似,反匯編所有段。


-EB或-EL或--endian={big|little}選項(xiàng):指定字節(jié)序。


--file-headers或-f選項(xiàng):顯示文件的整體頭部摘要信息。


--section-headers、--headers或-h選項(xiàng):顯示目標(biāo)文件各個(gè)段的頭部摘要信息。

[1] [2]
關(guān)鍵字:交叉編譯工具  使用說(shuō)明  JZ2440V3 引用地址:交叉編譯工具的使用說(shuō)明

上一篇:Exynos4412芯片的時(shí)鐘管理單元
下一篇:linux系統(tǒng)學(xué)習(xí)1-8:第1個(gè)ARM裸板程序及引申

推薦閱讀

  華為已經(jīng)完成公司董事會(huì)換屆選舉,梁華接替孫亞芳出任新董事長(zhǎng)。新一屆董事會(huì)延續(xù)了集體領(lǐng)導(dǎo)模式,副董事長(zhǎng)郭平、徐直軍、胡厚崑擔(dān)任公司輪值董事長(zhǎng)。輪值董事長(zhǎng)在當(dāng)值期間是公司最高領(lǐng)袖,領(lǐng)導(dǎo)公司董事會(huì)和常務(wù)董事會(huì),輪值期為6個(gè)月。下面就隨手機(jī)便攜小編一起來(lái)了解一下相關(guān)內(nèi)容吧。  梁華出生于1964年,畢業(yè)于武漢汽車工業(yè)大學(xué),博士。1995年加...
集微網(wǎng)消息(文/ANSON),3月25日小米官微公布,用戶在19號(hào)小米商城下單的小米9現(xiàn)已全部發(fā)貨,22號(hào)全款預(yù)售的正在發(fā)貨中,保證3周內(nèi)發(fā)貨,請(qǐng)大家耐心等待。小米官微強(qiáng)調(diào),小米9系列最近一周生產(chǎn)順利,預(yù)計(jì)月底能按計(jì)劃完成150萬(wàn)臺(tái)交付。其中小米9供貨量將會(huì)超過(guò)100萬(wàn)臺(tái)。另一方面,雷軍也在微博上強(qiáng)調(diào):小米一直堅(jiān)持把用戶當(dāng)朋友,我們從未也永遠(yuǎn)不會(huì)故意...
智能早新聞,盡覽天下事。2020年3月26日,我們?yōu)槟鷰?lái)今日早間資訊,涵蓋前沿科技、智能制造等諸多領(lǐng)域熱點(diǎn)話題,讓您能更快洞察行業(yè)風(fēng)向、發(fā)現(xiàn)市場(chǎng)商機(jī)。新聞速覽如下:【熱點(diǎn)關(guān)注】工信部:人工智能等新技術(shù)應(yīng)用于疫苗新藥研發(fā)等工作工信部信息技術(shù)發(fā)展司司長(zhǎng)謝少鋒介紹,在支撐疫情科學(xué)防控方面,一些醫(yī)療機(jī)構(gòu)利用人工智能、大數(shù)據(jù)、5G等技術(shù)加快病毒...
SCHURTER公司的UMT-H表面貼裝陶瓷保險(xiǎn)絲系列產(chǎn)品質(zhì)量上乘,目前該系列產(chǎn)品新增添了額定電流為40A和50A的型號(hào),其額定分?jǐn)嗄芰υ?25VAC/72VDC時(shí)可高達(dá)500A。該系列產(chǎn)品首次提供過(guò)流和短路保護(hù)功能,且結(jié)構(gòu)緊湊,產(chǎn)品尺寸僅為5.3x16mm。UMT-H系列保險(xiǎn)絲的研發(fā)初衷是為尺寸為5x20mm的通孔安裝熔絲管提供一個(gè)體積更小的替代產(chǎn)品,這種熔絲管通常用于主電路保護(hù)...

史海拾趣

問(wèn)答坊 | AI 解惑

【FPGA告警信息】無(wú)波形文件輸入

Warning: Can\'t find signal in vector source file for input pin |whole|clk10m原因:因?yàn)槟愕牟ㄐ畏抡嫖募?vector source file )中并沒(méi)有把所有的輸入信號(hào)(input pin)加進(jìn)去,對(duì)于每一個(gè)輸入都需要有激勵(lì)源的…

查看全部問(wèn)答∨

WinCE5.0內(nèi)存映射文件操作的疑惑

WinCE5.0內(nèi)存映射文件操作的疑惑, 有這么一段程序: // 設(shè)定內(nèi)存映射大小、偏移量等參數(shù) __int64 qwFileSize = 0xD59F80;//文件的最大字節(jié)數(shù)13.3MB(0xD59F80)/64MB(0x4000000)/128MB(0x8000000) __int64 qwFileOffset = 0;      & ...…

查看全部問(wèn)答∨

錄音中的噪音怎么去除!

請(qǐng)各位幫忙:     能不能用軟件的方式處理這種噪音! 或者其他的方式! 其他方案! 謝謝!…

查看全部問(wèn)答∨

學(xué)嵌入式如何入手()給分

我不是計(jì)算機(jī)科班畢業(yè)。硬件知識(shí)一點(diǎn)不懂,不過(guò)軟件沒(méi)問(wèn)題(自學(xué)的)。現(xiàn)在在一家軟件公司作開(kāi)發(fā),想學(xué)嵌入式。怎么入手,看什么書(shū)?先學(xué)什么?詳細(xì)點(diǎn)。給分了…

查看全部問(wèn)答∨

ADC采集的數(shù)據(jù)怎么那么不準(zhǔn)

我在他的AD上外部接了干電池, 我把電壓調(diào)整到2.8V,采樣250次后 我看數(shù)據(jù), 發(fā)現(xiàn)數(shù)據(jù) 從3470----3420 的數(shù)據(jù)都有,真的叫人郁悶 請(qǐng)問(wèn)香主 他的誤差有那么大么.我把電路貼出來(lái), 不知道那位采的數(shù)據(jù)精確點(diǎn)啊…

查看全部問(wèn)答∨

【為C2000做貢獻(xiàn)】SVPWM資料全集+代碼

這里基本上包括了網(wǎng)上所有有用的SVPWM資料,只要一鍵就可以得到所有的資料。看咱們論壇這方面的資料比較就上傳上來(lái)供大家學(xué)習(xí)! 具體內(nèi)容如下: 代碼如下: [ 本帖最后由 fxw451 于 2011-4-12 15:05 編輯 ]…

查看全部問(wèn)答∨

STM32的USB問(wèn)題

我使用ST提供stm32f105-07_f2xx_usbhost_lib.zip的USB庫(kù)在我的板子中進(jìn)行測(cè)試時(shí),板子作為從設(shè)備。用它提供的例程從設(shè)備作為HID設(shè)備時(shí),我不管如何插、拔USB時(shí),電腦都能識(shí)別設(shè)備。當(dāng)從使用VCP例程時(shí),使用JLink進(jìn)行仿真,點(diǎn)擊RUN時(shí),插入U(xiǎn)SB設(shè)備, ...…

查看全部問(wèn)答∨

2個(gè)FPGA例程,LED流水燈和4位計(jì)數(shù)器

例程已經(jīng)在板子上跑過(guò)了,附帶詳細(xì)解釋 syn_cnter_4.qpf4位計(jì)數(shù)器led_w.qpfLED流水燈,方向固定…

查看全部問(wèn)答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 永年县| 正蓝旗| 太湖县| 富川| 河北区| 怀集县| 池州市| 丁青县| 永泰县| 边坝县| 西宁市| 陈巴尔虎旗| 武山县| 阳信县| 久治县| 东乌珠穆沁旗| 八宿县| 富源县| 新巴尔虎右旗| 新建县| 安陆市| 离岛区| 寿阳县| 延津县| 道孚县| 东乌| 全州县| 清丰县| 大连市| 安远县| 齐齐哈尔市| 彝良县| 靖远县| 铜川市| 屯门区| 云浮市| 比如县| 洱源县| 红原县| 安龙县| 资源县|