第一篇:嵌入式linux基本操作實(shí)驗(yàn)一的實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)一linux基本操作實(shí)驗(yàn)的實(shí)驗(yàn)報(bào)告
一實(shí)驗(yàn)?zāi)康?/p>
1、熟悉嵌入式開發(fā)平臺(tái)部件,了解宿主機(jī)/目標(biāo)機(jī)開發(fā)模式;
2、熟悉和掌握常用Linux的命令和工具。
二實(shí)驗(yàn)步驟
1、連接主機(jī)和目標(biāo)板;(三根線,網(wǎng)線直接連接實(shí)驗(yàn)箱和PC機(jī),實(shí)驗(yàn)箱UART2連接主機(jī)的UART口)。
2、Linux命令的熟悉與操作
PC端:在PC機(jī)的桌面上打開虛擬機(jī),并啟動(dòng)Linux系統(tǒng),打開命令終端,操作Linux基本命令,如:查看:ls,進(jìn)入目錄:cd,創(chuàng)建文件:mkdir,刪除文件:rmdir,配置網(wǎng)絡(luò):ifconfig,掛載:mount,設(shè)置權(quán)限:chmod,編輯器:vi,拷貝:cp等命令,要求能熟練操作。
使用方法: 1.查看:ls Ls列出文件和目錄
Ls–a
顯示隱藏文件
Ls–l
顯示長(zhǎng)列格式ls–al 其中:藍(lán):目錄;綠:可執(zhí)行文件;紅:壓縮文件;淺藍(lán):鏈接文件;灰:其他文件;紅底白字:錯(cuò)誤的鏈接文件
2.進(jìn)入目錄:cd 改變當(dāng)前目錄:cd 目錄名(進(jìn)入用戶home目錄:cd ~;進(jìn)入上一級(jí)目錄:cd-)3.創(chuàng)建文件:mkdir 建立文件/目錄:touch 文件名/mkdir目錄名 4.刪除文件:rmdir 刪除空目錄:rmdir目錄名 5.配置網(wǎng)絡(luò):ifconfig 網(wǎng)絡(luò)確定目錄 '/ mnt/hda2' 已經(jīng)存在
umount /dev/hda2 卸載一個(gè)叫做hda2的盤使用 “+” 設(shè)置權(quán)限,使用 “-” 用于取消 ls-lh顯示權(quán)限
ls /tmp | pr-T5-W$COLUMNS 將終端劃分成5欄顯示
chmodugo+rwx directory1 設(shè)置目錄的所有人(u)、群組(g)以及其他人(o)以讀(r)、寫(w)和執(zhí)行(x)的權(quán)限
chmod go-rwx directory1 刪除群組(g)與其他人(o)對(duì)目錄的讀寫執(zhí)行權(quán)限 chown user1 file1 改變一個(gè)文件的所有人屬性
chown-R user1 directory1 改變一個(gè)目錄的所有人屬性并同時(shí)改變改目錄下所有文件的屬性
chgrp group1 file1 改變文件的群組
chown user1:group1 file1 改變一個(gè)文件的所有人和群組屬性 find /-perm-u+s羅列一個(gè)系統(tǒng)中所有使用了SUID控制的文件
chmodu+s /bin/file1 設(shè)置一個(gè)二進(jìn)制文件的 SUID 位類似SUID,不過這是針對(duì)目錄的
chmod g-s /home/public 禁用一個(gè)目錄的 SGID 位
chmodo+t /home/public 設(shè)置一個(gè)文件的 STIKY 位-只允許合法所有人刪除文件
chmod o-t /home/public 禁用一個(gè)目錄的 STIKY 位 8.編輯器:vi vi開發(fā)步驟:
a)vi hell.sql(文件名)b)按i
[進(jìn)入插入模式] c)按 esc
[進(jìn)入命令模式] d)輸入qw
[表示退出保存] e)輸入 q![表示退出不保存] f)輸入ls/ls–l
[查看] g)gcc-o my1 hello.sql [-o my1 代表輸出按my1 名] w表示與入的意思,也就將目前的文件內(nèi)容加以保存, q表示退出的意思,也是vi的執(zhí)行 q!強(qiáng)制離開,并且不保存文件
wq將修改過得內(nèi)容保存,并離開vi set nu 在文件中每行加入行號(hào) ser noun 取消行號(hào)
輸入數(shù)字若輸入數(shù)字再按ESC建就可將光標(biāo)移至改行
/字符串在很長(zhǎng)的文件在可以利用”/字符串”的命令來查找特定字 例如“tcp”如果不是所需要的可以按N繼續(xù)往下查找
?字符串可以利用”?字符串”的命令查找特定字
例如”:/tcp”如果不是所需要的可以按N繼續(xù)往下查找 9.拷貝:cp等命令
cp–r dir1 dir2 遞歸復(fù)制命令(復(fù)制子目錄信息)具體操作:打開虛擬機(jī),隨意選擇一個(gè)linux版本,打開命令終端。輸入以上命令,觀察結(jié)果,熟悉指令操作。
圖2-1指令熟悉截圖
3、打開PC桌面的超級(jí)終端,開啟實(shí)驗(yàn)箱電源,觀察嵌入式開發(fā)平臺(tái)的啟動(dòng)過程的打印信息,等待嵌入式平臺(tái)的操作系統(tǒng)啟動(dòng)后,在超級(jí)終端輸入步驟2的相關(guān)命令。
4、下面所有的操作必須以命令形式。
1)在虛擬機(jī)中安裝的Linux系統(tǒng)上建立以自己學(xué)號(hào)命名的文件夾,用vi命令新建以學(xué)號(hào)命名的文件,熟悉如何編輯源程序代碼,隨意輸入代碼并保存退出。
圖2-2編輯源程序代碼截圖
圖2-3建立文件夾截圖
2)從PC機(jī)中復(fù)制一個(gè)嵌入式平臺(tái)的可執(zhí)行文件到該文件夾下(也可以用
vi命令新建一個(gè)C語言的文件,之后用arm-linux-gccxxx.c–o xtu得到嵌入式平臺(tái)可以運(yùn)行的xtu文件),并修改其名稱為xtu。
圖2-4建立xtu文件截圖
3把xtu文件通過cp命令復(fù)制到/tftpboot目錄下,設(shè)置好開發(fā)板的ip。
圖2-5 Ip設(shè)置截圖
設(shè)置好PC中Linux的ip,在嵌入式平臺(tái)通過串口輸入tftp命令從PC上的
Linux下載xtu文件到嵌入式開發(fā)實(shí)驗(yàn)箱平臺(tái)中,在嵌入式平臺(tái)上用chmod 777 xtu更改文件權(quán)限為可執(zhí)行權(quán)限,運(yùn)行xtu程序,并查看運(yùn)行結(jié)果。
圖2-6 下載文件截圖
圖2-7下載文件截圖
三實(shí)驗(yàn)思考
1、比較Linux命令與DOS命令的異同。
Linux是免費(fèi)的系統(tǒng),與windows相比具有可靠、穩(wěn)定、速度快等優(yōu)點(diǎn),且擁有豐富的根據(jù)Linux版本改進(jìn)的強(qiáng)大功能。啟動(dòng): 作為操作系統(tǒng)本身,Linux在啟動(dòng)和退出時(shí)所作的工作要比DOS多得多,可以通過按下Ctrl+Alt+Del三鍵進(jìn)行熱啟動(dòng)。不同的是Linux啟動(dòng)到最后時(shí),需要進(jìn)行登錄。下面是一個(gè)典型的登錄過程:
??RedHat Linux release 5.1
Kernel 2.0.32 on an i686
login: 你鍵入:root
[root@localhost root]#_ 常用命令:
2、注意理解宿主機(jī)/目標(biāo)機(jī)開發(fā)模式,PC機(jī)是宿主機(jī),嵌入式平臺(tái)是目標(biāo)機(jī),未來的開發(fā)工作是在PC機(jī)中開發(fā),目標(biāo)機(jī)中運(yùn)行并驗(yàn)證。
交叉開發(fā)環(huán)境是指編譯、鏈接和調(diào)試嵌入式應(yīng)用軟件的環(huán)境,它與運(yùn)行嵌入式應(yīng)用軟件的環(huán)境有所不同,通常采用宿主機(jī)/目標(biāo)機(jī)模式。宿主機(jī)(host)一般采用一臺(tái)通用計(jì)算機(jī)(如PC機(jī)或者工作站),它通過串口(Serial)或者以太網(wǎng)(Ethernet)接口與目標(biāo)機(jī)通信。宿主機(jī)的軟硬件資源比較豐富,不但包括功能強(qiáng)大的操作系統(tǒng)(如 Windows 和 Linux),而且還有各種各樣優(yōu)秀的開發(fā)工具(如WindRiver的Tornado、Microsoft的Embedded Visual C++等),能夠大大
提高嵌入式應(yīng)用軟件的開發(fā)速度和效率。目標(biāo)機(jī)(target)一般在嵌入式應(yīng)用軟件的開發(fā)和調(diào)試期間使用,用來區(qū)別與嵌入式系統(tǒng)通信的宿主機(jī)。目標(biāo)機(jī)可以是嵌入式應(yīng)用軟件的實(shí)際運(yùn)行環(huán)境,也可以是能夠替代實(shí)際運(yùn)行環(huán)境的仿真系統(tǒng),但軟硬件資源通常都比較有限。嵌入式系統(tǒng)的交叉開發(fā)環(huán)境一般包括交叉編譯器、交叉調(diào)試器和系統(tǒng)仿真器(Emulator),其中交叉編譯器用于在宿主機(jī)上生成能在目標(biāo)機(jī)上運(yùn)行的代碼,而交叉調(diào)試器和系統(tǒng)仿真器則用于在宿主機(jī)與目標(biāo)機(jī)間完成嵌入式軟件的調(diào)試。
四實(shí)驗(yàn)心得
通過本次實(shí)驗(yàn)了解了linux的基本命令,如:ls,cd,mkdir,rmdir,ifconfig,mount,chmod,vi,cp等等,特別是ls,cd,vi等命令比較重要,在以后的實(shí)驗(yàn)中會(huì)經(jīng)常用到。熟悉了嵌入式開發(fā)平臺(tái)部件,了解宿主機(jī)/目標(biāo)機(jī)開發(fā)模式。
在嵌入式試驗(yàn)中使用linux系統(tǒng)是第一次用,一開始對(duì)linux系統(tǒng)的命令以和工具的操作都很陌生,只會(huì)部分命令的操作,操作起來非常慢。在實(shí)驗(yàn)中一個(gè)整體的流程也不是很熟悉,過程中遇到的很多小問題都不會(huì)解決。浪費(fèi)了很多時(shí)間在實(shí)驗(yàn)操作上,同時(shí)實(shí)驗(yàn)室的機(jī)器有部分的壞的,導(dǎo)致做到后邊無法繼續(xù)完成,只能換機(jī)器。但是最后在助教和同學(xué)的幫助下,我還是完成了這個(gè)實(shí)驗(yàn)。在這個(gè)過程中,我覺得個(gè)人的態(tài)度很重要,不管我們以前有沒有接觸過這個(gè)知識(shí),我們都應(yīng)該抱著一顆積極的心去了解它、學(xué)習(xí)它,不能因?yàn)樗吧团懦?。并且在做?shí)驗(yàn)時(shí),不管遇到什么問題以及困難,我們都應(yīng)該要有耐心,心平氣和的去請(qǐng)教別人,直到搞懂所有問題。尤其做到后邊遇到問題不要心急,把整個(gè)流程一步步的搞懂,再操作起來就會(huì)容易些。
第二篇:嵌入式linu學(xué)習(xí)心得
嵌入式Linux學(xué)習(xí)心得
1、Linux命令
ls:查看目錄-l以列表方式查看;ls –l 與ll的功能一樣 pwd: 查看當(dāng)前的目錄
cd:改變當(dāng)前操作目錄cd /直接跳到根目錄 cd..回到上一級(jí)目錄 cat: 打印顯示當(dāng)前文件的內(nèi)容信息
mkdir:創(chuàng)建目錄
fdisk: 查看硬盤分區(qū)信息,-l以列表方式查看
->代表是鏈接文件,類似window下的快捷方式。
cp: 復(fù)制命令,例子cp 文件名 /home/dir/
mv: 移動(dòng)或改名,如mv sonf.confsonf.txt(改名)移動(dòng):mv sonf.conf / rm:刪除命令,如rm –f test.c;如刪除目錄rm –fr d
man:查看某個(gè)命令的幫助,man 命令
2、各系統(tǒng)目錄的功能
drw—r—w--:d代表是目錄,drw代表當(dāng)前用戶的權(quán)限,r代表組用戶的權(quán)限,w代表其它用戶的權(quán)限。x代表有執(zhí)行權(quán)限。
/boot/gruff.conf: 啟動(dòng)引導(dǎo)程序
/dev:brw—rw--:b代表是塊設(shè)備。Linux設(shè)備有三種,塊設(shè)備(b開頭)、字符設(shè)備(c開頭)、網(wǎng)絡(luò)設(shè)備。had代表第一個(gè)硬盤,hdb代表第二個(gè)硬盤。Hdb2代表第二塊硬盤的第二個(gè)分區(qū)。3,67代表主設(shè)備為3,從設(shè)備為67./etc:存放的是系統(tǒng)的配置文件。Inittab文件存放不同啟動(dòng)方式下必須啟動(dòng)的進(jìn)程。Inittab文件中有6個(gè)啟動(dòng)level,wait中對(duì)應(yīng)著6個(gè)level的目錄,respawn代表當(dāng)一個(gè)進(jìn)程被意外終止了,但會(huì)自動(dòng)啟動(dòng)的進(jìn)程,如守護(hù)進(jìn)程。rc.d目錄中存放了一個(gè)rc.sysinit文件,里面存放系統(tǒng)初始化配置信息。/etc還有一個(gè)vsftpd里面存放tcp、ftp的配置。
/home : 用戶目錄,存放用戶的文件,/lib:存放庫(kù)文件,后綴為so的文件代表動(dòng)態(tài)鏈接庫(kù)。
/lost+found:系統(tǒng)意外終止,存放一些可以找回的文件。
/mnt:掛載外部設(shè)備,如掛載光驅(qū):mount –t /dev/cdrom/mnt/cdrom,如
果在雙系統(tǒng)中,要查看windows中D盤的文件,首先應(yīng)該將D盤的文件映射過來,mount –t /dev/hda2/mnt/windows/d
/opt:用戶安裝的應(yīng)用程序
/proc:是系統(tǒng)運(yùn)行的映射,比較重要。里面的文件數(shù)字代表進(jìn)程號(hào)。每個(gè)進(jìn)程號(hào)目錄下包含進(jìn)程的基本信息。還有其他信息,如cpuinfo等,內(nèi)核支持的文件系統(tǒng)filesystem等。系統(tǒng)支持的中斷interrupts,iomen代表內(nèi)存分配情況。ioport存放IO端口號(hào)。還有分區(qū)信息,modole信息,狀態(tài)信息,版本信息
對(duì)于Linux的設(shè)備驅(qū)動(dòng)程序,有兩種加載模式,一種是直接加載進(jìn)linux內(nèi)核,一種是以模塊的方式加載到內(nèi)核。
/sbin: 系統(tǒng)管理的一些工具。如poweroff關(guān)機(jī)工具。
/usr: 安裝系統(tǒng)時(shí)很多文件放在此目錄下面,包含一些更新等,include包含的頭文件,lib 是Linux的庫(kù)文件,src包含Linux2.4的內(nèi)核源碼
/var:存放是臨時(shí)變量
3、
第三篇:實(shí)驗(yàn)一 實(shí)驗(yàn)報(bào)告
網(wǎng) 絡(luò) 程 序 設(shè) 實(shí)驗(yàn)報(bào)告
實(shí)驗(yàn)名稱:Winsock編程接口實(shí)驗(yàn) 實(shí)驗(yàn)類型: 驗(yàn) 證 型
計(jì)
一、實(shí)驗(yàn)?zāi)康?/p>
? 掌握Winsock的啟動(dòng)和初始化;
? 掌握gethostname(),gethostbyname(),GetAdaptersInfo()等信息查詢函數(shù)的使用。
二、實(shí)驗(yàn)設(shè)計(jì)
實(shí)驗(yàn)內(nèi)容:
1、編寫程序能同時(shí)實(shí)現(xiàn)對(duì)多個(gè)域名的解析。比如在控制臺(tái)輸入:getip 004km.cn對(duì)應(yīng)的IP地址列表。
2、編寫程序獲取并輸出本地主機(jī)的所有適配器的IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān),MAC地址。
根據(jù)實(shí)驗(yàn)內(nèi)容編寫程序:
1、對(duì)相關(guān)域名進(jìn)行解析,利用gethostbyname()完成解析,用到的結(jié)構(gòu)體為:
struct hostent{ char FAR*
h_name;char FAR* FAR* h_aliases;short
h_addrtype;short
h_length;char FAR* FAR* h_addr_list;}
得到的IP地址列表由h_addr_list存儲(chǔ);
2、利用GetAdaptersInfo()函數(shù)獲得本地主機(jī)的相關(guān)信息,通過IP_ADAPTER_INFO結(jié)構(gòu)體返回所需信息。
IP_ADAPTER_INFO的定義如下: typedef struct _IP_ADAPTER_INFO {
struct _IP_ADAPTER_INFO* Next;
DWORD ComboIndex;
char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
UINT AddressLength;
BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
DWORD Index;
UINT Type;
UINT DhcpEnabled;
PIP_ADDR_STRING CurrentIpAddress;
IP_ADDR_STRING IpAddressList;
IP_ADDR_STRING GatewayList;
IP_ADDR_STRING DhcpServer;
BOOL HaveWins;
IP_ADDR_STRING PrimaryWinsServer;
IP_ADDR_STRING SecondaryWinsServer;
time_t LeaseObtained;
time_t LeaseExpires;
} IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
三、實(shí)驗(yàn)過程(包含實(shí)驗(yàn)結(jié)果)
1、分析題目,編寫程序;
2、將編寫的程序進(jìn)行編譯、運(yùn)行,輸入題目給定的內(nèi)容,完成題目要求; 結(jié)果如下:
第1題:
第2題:
四、討論與分析
思考題:
1、Winsock初始化的作用:只有調(diào)用了WSAStartup()進(jìn)行初始化之后,應(yīng)用程 序才能調(diào)用其他Windows Sockets API函數(shù),實(shí)現(xiàn)網(wǎng)絡(luò)通信;
2、函數(shù)原型為:
DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo,//接受數(shù)據(jù)的緩沖區(qū)
PULONG pOutBufLen
// 數(shù)據(jù)的長(zhǎng)度大小);
3、域名解析時(shí)出現(xiàn)域名對(duì)應(yīng)多個(gè)IP,原因:該域名存在于多個(gè)服務(wù)器。
五、實(shí)驗(yàn)者自評(píng)
通過本次實(shí)驗(yàn),我掌握了Winsock的啟動(dòng)和初始化以及gethostname(),gethostbyname(),GetAdaptersInfo()等函數(shù)查詢的使用,加深了以前對(duì)課本知識(shí)的認(rèn)識(shí)程度。
六、附錄:關(guān)鍵代碼(給出適當(dāng)注釋,可讀性高)
第1題代碼:
////////////////////////////////////////////////// // GetAllIps.cpp文件
//#include “../common/InitSock.h” #include
using namespace std;
#pragma comment(lib, “WS2_32”)// 鏈接到WS2_32.lib //CInitSock initSock;// 初始化Winsock庫(kù)
void main(){
char szMessage[256];// 取得本地主機(jī)名稱
// 初始化
WSADATA wsaData;if(WSAStartup(MAKEWORD(2,2), &wsaData)!= 0){
exit(0);}
// 通過主機(jī)名得到地址信息
printf(“ Get IP::”);gets(szMessage);
// 獲取主機(jī)信息
hostent *pHost = ::gethostbyname(szMessage);
// 打印出所有IP地址
in_addr addr;for(int i = 0;;i++){
char *p = pHost->h_addr_list[i];
if(p == NULL)
break;
memcpy(&addr.S_un.S_addr, p, pHost->h_length);
char *szIp = ::inet_ntoa(addr);
printf(“ 服務(wù)器 %s IP地址:%s n ”,szMessage, szIp);
printf(“服務(wù)器名字: %s n”,pHost->h_name);}
/////////////////////////// ::WSACleanup();
}
第2題代碼:
// 獲取并輸出本地主機(jī)的所有適配器的IP地址,子網(wǎng)掩碼,默認(rèn)網(wǎng)關(guān),MAC地址
#include
void main(){ // 定義變量
IP_ADAPTER_INFO *pAdapterInfo;ULONG ulOutBufLen;DWORD dwRetVal;PIP_ADAPTER_INFO pAdapter;
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(sizeof(IP_ADAPTER_INFO));ulOutBufLen = sizeof(IP_ADAPTER_INFO);// 第一次獲取適配器信息,得到ulOutBufLen的實(shí)際大小
if(GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
free(pAdapterInfo);
pAdapterInfo =(IP_ADAPTER_INFO *)malloc(ulOutBufLen);} // 第二次獲取適配器信息,獲得了pAdapterInfo信息
if(dwRetVal = GetAdaptersInfo(pAdapterInfo, &ulOutBufLen)!= ERROR_SUCCESS){
cout<<“GetAdapterInfo Error!”< // 打印MAC地址信息、子網(wǎng)掩碼以及網(wǎng)關(guān) pAdapter = pAdapterInfo;while(pAdapter){ cout<<“MAC Address: ”; for(int i=0;i AddressLength;i++) { if(i ==(pAdapter->AddressLength-1)) { cout< } else { cout< } } cout< cout<<“IP 地址:”< IpAddressList.IpAddress.String< cout<<“子網(wǎng)掩碼 :”< IpAddressList.IpMask.String< cout<<“網(wǎng)關(guān) :”< IpAddressList.IpAddress.String< cout<<“****************************************”< pAdapter = pAdapter->Next;} // 釋放資源 if(pAdapterInfo){ free(pAdapterInfo);} cout< } 實(shí)驗(yàn)一 ARM匯編語言程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解IAR Embedded Workbench 集成開發(fā)環(huán)境 2.掌握ARM匯編指令程序的設(shè)計(jì)及調(diào)試 二、實(shí)驗(yàn)設(shè)備 1.PC操作系統(tǒng)WIN98或WIN2000或WINXP,ADSI.2集成開發(fā)環(huán)境,仿真驅(qū)動(dòng)程序 三、實(shí)驗(yàn)內(nèi)容 1.熟悉IAR Embedded Workbench 集成開發(fā)環(huán)境 2.理解下列程序,新建工程,加入下面的程序,并觀察實(shí)驗(yàn)結(jié)果,解釋程序?qū)崿F(xiàn)的功能 分析:該程序?qū)崿F(xiàn)的功能是程序功能:Y = A*B+C*D+E*F 程序代碼: AREA Examl, CODE,READONLY;定義一個(gè)代碼段 ENTRY ;程序入口 MOV R0,#0;設(shè)置R0寄存器的值為0 MOV R8,#0;設(shè)置R8寄存器的值為0 ADR R2,N;將R2寄存器的值設(shè)為數(shù)據(jù)域N的地址 LDR R1,[R2];將以R2的值為地址的數(shù)據(jù)讀入R1 MOV R2,#0;設(shè)置R2的值為0 ADR R3,C;將R3寄存器的值設(shè)為數(shù)據(jù)域C的地址 ADR R5,X;將R5寄存器的值設(shè)為數(shù)據(jù)域X的地址 LOOP LDR R4,[R3,R8];將R3+R8的數(shù)據(jù)讀入R4 LDR R6,[R5,R8];將R5+R8的數(shù)據(jù)讀入R6 MUL R9,R4,R6;R9 = R4*R6 ADD R2,R2,R9;R2 = R2+R9 ADD R8,R8,#4;R8 = R8+4 ADD R0,R0,#1;R0 = R0+1 CMP R0,R1;比較R0和R1的值 BLT LOOP;R0 執(zhí)行結(jié)果如下: 3.實(shí)現(xiàn)1+2+3+4+····+100,求的值,并保存在地址0x90018的地址里面 程序代碼: MOV R0,#100;設(shè)置R0寄存器的值為100 LDR R2,=0X90018;設(shè)置R2寄存器指向地址0x90018 MOV R1,#0;設(shè)置R1的值為0 MOV R3,#0;設(shè)置R3的值為0 LOOP ADD R3,R3,R0;R3 = R3+R0 SUB R0,R0,#1;R0 = R0-1 CMP R0,R1;將R0和R1的值比較 BNE LOOP;不相等的話繼續(xù)執(zhí)行循環(huán) STR R3,[R2];將R3的值裝入到R2指向的地址塊中。END 程序執(zhí)行結(jié)果:程序執(zhí)行完在0x90018內(nèi)存入的數(shù)據(jù)是0x13ba即5050 實(shí)驗(yàn)二 ARM匯編語言程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解ARM匯編語言的基本框架,學(xué)會(huì)使用ARM的匯編語言編程; 2.掌握ARM匯編指令中的堆棧指令的操作,以及存儲(chǔ)器的裝載指令操作。 二、實(shí)驗(yàn)設(shè)備 1.PC操作系統(tǒng)WIN98或WIN2000或WINXP,ADS1.2.集成開發(fā)環(huán)境,仿真器驅(qū)動(dòng)程序。 三、實(shí)驗(yàn)內(nèi)容 1.理解下列程序,新建工程,加入下面的程序,并觀察實(shí)驗(yàn)結(jié)果 程序代碼: x EQU 15;定義常量x=15 y EQU 61;定義常量y=61 stack_top EQU 0X1000;定義堆棧棧頂?shù)刂窞?x1000 ENTRY;程序入口處 MOV sp,#stack_top;將堆棧指針指向棧頂 MOV r0,#x;將x的值放入r0 STR r0,[sp];將r0的值壓入堆棧 MOV r0,#y;將y的值放入r0 LDR r1,[sp];將x的值放入r1 ADD r0,r0,r1;r0 = r0+r1 STR r0,[sp];將r0的值裝入堆棧 Stop;B stop;程序結(jié)果為:r1 = x+y = 0x6D 2.編寫程序循環(huán)R4~R11進(jìn)行累加8次賦值,R4~R11初始值是1~8,每次操作后把R4~R11的內(nèi)容放到SP棧中,SP初始設(shè)置為0x800,最后把R4~R11用LDMFD指令清空為0 程序代碼如下: X EQU 1;定義常量x = 1 stack_top EQU 0X800;定義棧頂?shù)刂?ENTRY;MOV SP,#stack_top;將棧頂?shù)刂分赶?x800 MOV R4,#1;設(shè)置R4 = 1 MOV R5,#2;設(shè)置R5 = 2 MOV R6,#3;設(shè)置R6 = 3 MOV R7,#4;設(shè)置R7 = 4 MOV R8,#5;設(shè)置R8 = 5 MOV R9,#6;設(shè)置R9 = 6 MOV R10,#7;設(shè)置R10 = 7 MOV R11,#8;設(shè)置R11 = 8 LOOP ADD R4,R4,#x;R4累加1 ADD R5,R5,#x;R5累加1 ADD R6,R6,#x;R6累加1 ADD R7,R7,#x;R7累加1 ADD R8,R8,#x;R8累加1 ADD R9,R9,#x;R9累加1 ADD R10,R10,#x;R10累加1 ADD R11,R11,#x;R11累加1 STMIA SP!,{R4-R11};將R4-R11的值壓入堆棧 CMP R4,#9;比較R4和9的大小 BLT LOOP;R4 < 9繼續(xù)執(zhí)行循環(huán) LDMFD SP!,{R4-R11};將R4-R11清零 END;實(shí)驗(yàn)結(jié)果:主要實(shí)現(xiàn)將數(shù)據(jù)2-9,3-10,4-11……9-16壓入堆棧(初始地址是0x800處開始),最后將R4-R11全部清零。 3.更改實(shí)驗(yàn)中1中的X,Y的值,觀察期結(jié)果 程序代碼: x EQU 20 y EQU 120 stack_top EQU 0X1000 ENTRY MOV sp,#stack_top MOV r0,#x STR r0,[sp] MOV r0,#y LDR r1,[sp] ADD r0,r0,r1 STR r0,[sp] Stop B Stop END 程序結(jié)果為:r0 = x+y = 140 = 0X8C 實(shí)驗(yàn)三 ARM匯編語言程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解ARM匯編語言的基本框架,學(xué)會(huì)使用ARM的匯編語言編程 2.掌握ARM匯編的存儲(chǔ)器加載/存儲(chǔ)指令,及if條件、循環(huán)、循環(huán)及循環(huán)的匯編實(shí)現(xiàn) 二、實(shí)驗(yàn)設(shè)備 1.PC操作系統(tǒng)WIN98或WIN2000或WINXP,ADS1.2集成開發(fā)環(huán)境,仿真器驅(qū)動(dòng)程序 三、實(shí)驗(yàn)內(nèi)容 1.理解下列程序,新建工程,加入下面的程序,并觀察實(shí)驗(yàn)結(jié)果 程序代碼: Num EQU 20;定義常量Num = 20 START;LDR r0,=src;將src數(shù)據(jù)塊的開始地址存入r0中 LDR r1,=dst;將dst數(shù)據(jù)塊的開始地址存入r1中 MOV r2,#Num;設(shè)置r2的值為20 MOV sp,#0x400;堆棧指針sp指向0x400 blockcopy;MOVS r3,r2,LSR #3;將r2左移3位移入r3并且影響標(biāo)志位 BEQ copywords;結(jié)果為0的話跳轉(zhuǎn)到copywords STMFD SP!,{r4-r11};將r4-r11的值入棧 octcopy;LDMIA r0!,{r4-r11};將src的前8個(gè)字?jǐn)?shù)據(jù)存入讓r4-r11 STMIA r1!,{r4-r11};將r4-r11中的數(shù)據(jù)放入dst數(shù)據(jù)塊中 SUBS r3,r3,#1;r3 = r3-1 BNE octcopy;結(jié)果不為0跳轉(zhuǎn)到octcopy LDMFD SP!,{R4-R11};恢復(fù)原來的r4-r11 copywords;ANDS r2,r2,#7;r2 = r2&7 BEQ stop;結(jié)果為0跳轉(zhuǎn)到stop wordcopy;LDR r3,[r0],#4;將r0指向的字?jǐn)?shù)據(jù)放入r3中,r0 = r0+4 STR r3,[r1],#4;將r3中的數(shù)據(jù)存入到dst數(shù)據(jù)塊中,r1 = r1+4 SUBS r2,r2,#1;r2 = r2-1 BNE wordcopy;不為0跳轉(zhuǎn)到wordcopy處 stop;B stop;src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4;dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0;END;程序結(jié)果:將src的數(shù)據(jù)全部存入到dst中 2.新建工程,并自行編寫程序,分別使用LDR,STR,LDMIA,STMIA操作,實(shí)現(xiàn)對(duì)某段連續(xù)存儲(chǔ)單元寫入數(shù)據(jù),并觀察結(jié)果 程序代碼: MOV R4,#1;設(shè)置r4 = 1; MOV R5,#2;設(shè)置r5 = 1; MOV R6,#3;設(shè)置r4 = 1; LDR R0,=dst;R0保存dst的首地址 STR R4,[R0];將r4的值裝入r0執(zhí)行的內(nèi)存中 STR R5,[R0,#4];將r5的值裝入r0+4執(zhí)行的內(nèi)存中 STR R6,[R0,#8];將r6的值裝入r0+8執(zhí)行的內(nèi)存中 LDR R7,=src;R0保存src的首地址 LDMIA R7,{R8-R10};將r7執(zhí)行的地址的數(shù)據(jù)讀入r8=r10 LDR R3,=N;r3保存N的首地址 STMIA R3!,{R8-R10};將r8-r10裝入r3指向的內(nèi)存 N DCD 0,0,0 src DCD 1,2,3 dst DCD 0,0,0 END 程序結(jié)果:熟悉使用LDMIA,STMIA和LDR,STR指令 3.使用ARM匯編指令實(shí)現(xiàn)if條件執(zhí)行,使用ARM匯編指令實(shí)現(xiàn)for條件執(zhí)行,使用ARM匯編指令實(shí)現(xiàn)while條件執(zhí)行,使用ARM匯編指令實(shí)現(xiàn)do…while條件執(zhí)行。程序代碼: 實(shí)現(xiàn)if條件: MOV R0,#1 MOV R1,#2 CMP R0,R1 BGT LOOP1 BLT LOOP2 LOOP1 MOV R3,R0 LOOP2 MOV R3,R1 END 程序結(jié)果: 實(shí)現(xiàn)for和while條件: MOV R1,#1 MOV R3,#0 MOV R2,#101;LOOP ADD R3,R1,R3 ADD R1,R1,#1 CMP R1,R2 BLT LOOP END 程序結(jié)果: 實(shí)現(xiàn)do…while條件: MOV R0,#1 MOV R1,#100 MOV R3,#0 LOOP CMP R0,R1 BGT STOP ADD R3,R0,R3 ADD R0,R0,#1 B LOOP STOP END 程序結(jié)果: 實(shí)驗(yàn)四 基于ARM的C語言程序設(shè)計(jì) 一、實(shí)驗(yàn)?zāi)康?/p> 1.了解ARM C語言的基本框架,學(xué)會(huì)使用ARM的C語言編程。2.掌握C語言和匯編語言編程的相互調(diào)用。 二、實(shí)驗(yàn)設(shè)備 1.EL-ARM-830教學(xué)實(shí)驗(yàn)箱,PentiumII以上的PC機(jī),仿真器電纜。 三、ARM C語言簡(jiǎn)介與使用規(guī)則 1.ARM使用C語言編程是大勢(shì)所趨 在應(yīng)用系統(tǒng)的程序設(shè)計(jì)中,若所有的編程任務(wù)均由匯編語言來完成,其工作量巨大,并且不宜移植。由于ARM的程序執(zhí)行速度較高,存儲(chǔ)器的存儲(chǔ)速度和存儲(chǔ)量也很高,因此,C語言的特點(diǎn)充分發(fā)揮,使得應(yīng)用程序的開發(fā)時(shí)間大為縮短,代碼的移植十分方便,程序的重復(fù)使用率提高,程序架構(gòu)清晰易懂,管理較為容易等等。因此,C語言的在ARM編程中具有重要地位。 2.ARM C語言程序的基本規(guī)則 在ARM程序的開發(fā)中,需要大量讀寫硬件寄存器,并且盡量縮短程序的執(zhí)行時(shí)間的代碼一般使用匯編語言來編寫,比如ARM的啟動(dòng)代碼,ARM的操作系統(tǒng)的移植代碼等,除此之外,絕大多數(shù)代碼可以使用C語言來完成。 C語言使用的是標(biāo)準(zhǔn)的C語言,ARM的開發(fā)環(huán)境實(shí)際上就是嵌入了一個(gè)C語言的集成開發(fā)環(huán)境,只不過這個(gè)開發(fā)環(huán)境和ARM的硬件緊密相關(guān)。 在使用C語言時(shí),要用到和匯編語言的混合編程。當(dāng)匯編代碼較為簡(jiǎn)潔,則可使用直接內(nèi)嵌匯編的方法,否則,使用將匯編文件以文件的形式加入項(xiàng)目當(dāng)中,通過ATPCS的規(guī)定與C程序相互調(diào)用與訪問。 ATPCS,就是ARM、Thumb的過程調(diào)用標(biāo)準(zhǔn)(ARM/Thumb Procedure Call Standard),它規(guī)定了一些子程序間調(diào)用的基本規(guī)則。如寄存器的使用規(guī)則,堆棧的使用規(guī)則,參數(shù)的傳遞規(guī)則等。 在C程序和ARM的匯編程序之間相互調(diào)用必須遵守ATPCS。而使用ADS的C語言編譯器編譯的C語言子程序滿足用戶指定的ATPCS的規(guī)則。但是,對(duì)于匯編語言來說,完全要依賴用戶保證各個(gè)子程序遵循ATPCS的規(guī)則。具體來說,匯編語言的子程序應(yīng)滿足下面3個(gè)條件: ● 在子程序編寫時(shí),必須遵守相應(yīng)的ATPCS規(guī)則; ● 堆棧的使用要遵守相應(yīng)的ATPCS規(guī)則; ● 在匯編編譯器中使用-atpcs選項(xiàng)?;镜腁TPCS規(guī)定,請(qǐng)?jiān)斠娤嚓P(guān)技術(shù)文檔。 匯編程序調(diào)用C程序 匯編程序的設(shè)置要遵循ATPCS規(guī)則,保證程序調(diào)用時(shí)參數(shù)正確傳遞。在匯編程序中使用IMPORT偽指令聲明將要調(diào)用的C程序函數(shù)。在調(diào)用C程序時(shí),要正確設(shè)置入口參數(shù),然后使用BL調(diào)用。 C程序調(diào)用匯編程序 匯編程序的設(shè)置要遵循ATPCS規(guī)則,保證程序調(diào)用時(shí)參數(shù)正確傳遞。 在匯編程序中使用EXPORT偽指令聲明本子程序,使其他程序可以調(diào)用此子程序。在C語言中使用extern關(guān)鍵字聲明外部函數(shù)(聲明要調(diào)用的匯編子程序)。 在C語言的環(huán)境內(nèi)開發(fā)應(yīng)用程序,一般需要一個(gè)匯編的啟動(dòng)程序,從匯編的啟動(dòng)程序,跳到C語言下的主程序,然后,執(zhí)行C程序,在C環(huán)境下讀寫硬件的寄存器,一般是通過宏調(diào)用,在每個(gè)項(xiàng)目文件的Startup44b0/INC目錄下都有一個(gè)44b.h的頭文件,那里面定義了所有關(guān)于44B0的硬件寄存器的宏,對(duì)宏的讀寫,就能操作44B0的硬件。 具體的編程規(guī)則同標(biāo)準(zhǔn)C語言。 四、實(shí)驗(yàn)內(nèi)容 1、理解下列程序,新建工程,加入下面的程序,并觀察實(shí)驗(yàn)結(jié)果。程序代碼: /*實(shí)現(xiàn)5個(gè)數(shù)的相加*/ int sum5(int a,int b,int c,int d,int e){ return(a+b+c+d+e);};匯編語言 IMPORT sum5;聲明調(diào)用c函數(shù) CALLSUMS STMFD SP!,{LR};將LR寄存器入棧 MOV R0,#1;r0 = 1 ADD R1,R0,R0;r1 = 2 ADD R2,R1,R0;r2 = 3 ADD R3,R1,R2;r3 = 5 STR R3,[SP,#-4]!;將r3的值入棧當(dāng)做第五個(gè)參數(shù) ADD R3,R1,R1;R3 = R3+R1=4 BL sum5;調(diào)用sum5 ADD SP,SP,#4;sp = sp+4 LDMFD SP,{PC} 程序結(jié)果:實(shí)現(xiàn)了i+2i+3i+4i+5i的匯編語言調(diào)用c語言 2、用匯編語言實(shí)現(xiàn)1到100累加的函數(shù),用C言語編寫主程序,在主程序中調(diào)用所編寫的匯編函數(shù) 程序代碼: NAME asmfile PUBLIC sum5 SECTION.intvec : CODE(2)CODE32 sum5 ENTRY MOV R1,#1 MOV R2,#0 sum6 ADD R2,R1,R2 ADD R1,R1,#1 CMP R1,R0 BLE sum6 MOV PC,LR END #include 總結(jié) 本次實(shí)驗(yàn)主要是通過對(duì)ARM的各種指令進(jìn)行操作,通過對(duì)這些指令的應(yīng)用,讓我們學(xué)會(huì)了如何使用匯編來進(jìn)行編程,掌握匯編編程和C語言編程的技巧,并且能夠熟練的使用匯編語言,深刻理解ARM的工作。并且培養(yǎng)了我們寫代碼的能力以及對(duì)代碼的閱讀能力和修改能力。為我們?cè)谝院蟮膶W(xué)習(xí)和生活中更實(shí)用ARM,利用匯編進(jìn)行編程奠定了一定的基礎(chǔ)! 計(jì)算機(jī)專業(yè)類課程 實(shí)驗(yàn)報(bào)告 課程名稱:嵌入式微處理器系統(tǒng)及應(yīng)用 學(xué) 院:計(jì)算機(jī)科學(xué)與工程 專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù) 學(xué)生姓名:廖雪平學(xué) 號(hào):2011060120003 指導(dǎo)教師:陳麗蓉 日 期:2014年5月15日 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 電 子 科 技 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告 實(shí)驗(yàn)一 ? 實(shí)驗(yàn)名稱:熟悉嵌入式系統(tǒng)軟件開發(fā)工具與環(huán)境 一、實(shí)驗(yàn)學(xué)時(shí):4 二、實(shí)驗(yàn)內(nèi)容和目的: AR熟悉嵌入式系統(tǒng)軟件開發(fā)工具與環(huán)境 M處理器指令編程基礎(chǔ)實(shí)驗(yàn) ARM處理器工作模式實(shí)驗(yàn) ARM處理器異常處理實(shí)驗(yàn) 編寫2段匯編程序,一段實(shí)現(xiàn)數(shù)據(jù)區(qū)的拷貝,另一段實(shí)現(xiàn)對(duì)第一個(gè)程序的調(diào)用,完成參數(shù)傳遞和返回值的傳遞。數(shù)據(jù)拷貝程序需要判斷傳遞參數(shù)的正確性:源數(shù)據(jù)區(qū)和目的數(shù)據(jù)區(qū)不能重疊,如果重疊則不進(jìn)行拷貝操作,并返回錯(cuò)誤碼(1),否則進(jìn)行數(shù)據(jù)拷貝并返回成功碼(0)。 三、實(shí)驗(yàn)原理: M處理器指令編程基礎(chǔ)。 ARM處理器工作模式 ARM處理器異常處理 四、實(shí)驗(yàn)器材(設(shè)備、元器件) Pc機(jī)、開發(fā)板 五、實(shí)驗(yàn)步驟 1、了解并連接開發(fā)板。 2、運(yùn)行程序熟悉環(huán)境并對(duì)開發(fā)板進(jìn)行測(cè)試。 3、編寫程序并調(diào)試運(yùn)行 4、完成實(shí)驗(yàn)內(nèi)容。 5、調(diào)試并撰寫實(shí)驗(yàn)報(bào)告。 六、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析: 實(shí)驗(yàn)代碼: 實(shí)驗(yàn)截圖: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 七、實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議: 實(shí)驗(yàn)本身不會(huì)很難,但初次開發(fā)還是不太熟練,不過本實(shí)驗(yàn)讓我更加熟練了ARM匯編的開發(fā),以及熟悉了ARM的開發(fā)流程以及開發(fā)環(huán)境 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 電 子 科 技 大 學(xué) 實(shí) 驗(yàn) 報(bào) 告 實(shí)驗(yàn)二 一、實(shí)驗(yàn)名稱:UART串口通訊實(shí)驗(yàn) 二、實(shí)驗(yàn)學(xué)時(shí):4 三、實(shí)驗(yàn)內(nèi)容和目的: 1) 在已有串口驅(qū)動(dòng)軟件及測(cè)試程序的基礎(chǔ)上,修改測(cè)試程序,嘗試對(duì)串口的各項(xiàng)通訊參數(shù)進(jìn)行修改,并調(diào)整相應(yīng)的與主機(jī)的連接配置,以便修改參數(shù)后的串口仍然能夠正常通訊; 2)通過查閱芯片手冊(cè),嘗試自行實(shí)現(xiàn)串口的初始化函數(shù),替代已有驅(qū)動(dòng)軟件庫(kù)中的串口初始化函數(shù),并通過測(cè)試程序驗(yàn)證自行編寫的函數(shù)的正確性。 四、實(shí)驗(yàn)原理:UART串口通訊原理 五、實(shí)驗(yàn)器材(設(shè)備、元器件) pc、開發(fā)板、相關(guān)環(huán)境 六、實(shí)驗(yàn)步驟: 1、了解實(shí)驗(yàn)內(nèi)容 2、修改測(cè)試程序調(diào)整連接配置以便修改參數(shù)后的串口仍然能夠正常通訊 2、編寫實(shí)驗(yàn)代碼 3、測(cè)試驗(yàn)證自行編寫的函數(shù)的正確性。 七、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析: 實(shí)驗(yàn)代碼: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 實(shí)驗(yàn)截圖: 電子科技大學(xué)計(jì)算機(jī)學(xué)院實(shí)驗(yàn)中心 八、實(shí)驗(yàn)結(jié)論、心得體會(huì)和改進(jìn)建議: 通過本實(shí)驗(yàn)讓我對(duì)串口程序的編寫有初步的了解,已經(jīng)對(duì)軟硬件間的銜接更加深刻的理解第四篇:嵌入式實(shí)驗(yàn)報(bào)告
第五篇:嵌入式實(shí)驗(yàn)報(bào)告