当前位置:文档之家› 嵌入式实验zpy

嵌入式实验zpy

嵌入式实验zpy
嵌入式实验zpy

如果有截图就插入每个实验的相应位置。

实验十三音频实验

通信2班朱鹏宇E08680230

一、实验目的

1.掌握S3C44B0X自带的IIS音频接口的使用方法。

2.掌握DMA数据传输方式。

二、实验内容

学习S3C44B0X自带的IIS音频接口的使用,通过DMA数据传输方式编程实现对W AV声音文件(不超过10秒)的循环播放。

三、实验设备及工具

硬件:ARM嵌入式开发平台,用于ARM7TDMI的JTAG仿真器、PC机Pentium100以上、耳麦。

软件:PC机操作系统win98以上、ARM SDT 2.51或ADS1.2集成开发环境、仿真器驱动程序、Source Insight 3.0。

四、实验原理及说明

1.W A V音乐格式

在Windwos 环境下,大部分的多媒体文件都依循着一种结构来存放信息,这种结构称为“资源互换文件格式”( resources interchange file format , 简称RIFF)。例如声音的WA V文件、视频的AVI文件等等均是由此结构衍生出来的。RIFF可以看作是一种树状结构,其基本构成单位为chunk ,犹如树状结构中的节点,每个chunk由“辨别码”、“数据大小”及“数据”所组成。辨别码由 4 个ASCII码所构成,数据大小则标示出紧跟其后数据的长度(单位为Byte),而数据大小本身也用掉4 个Byte,所以事实上一个chunk的长度为数据大小加8。一般而言,chunk 本身并不允许内部再包含chunk,但有两种例外,分别为以“RIFF”及“LIST”为辨别码的chunk 。而针对这两种chunk,RIFF又从原先的“数据”中切出4个Byte。这4个Byte 称为“格式辨别码”,然而RIFF又规定文件中仅能有一个以“RIFF”为辨别码的chunk。只要是依循这一结构的文件, 我们均称之为RIFF文档。这种结构提供了一种系统化的分类。如果和MS-DOS文件系统作比较,“RIFF”chunk就好比是一台硬盘的根目录,其格式辨别码便是此硬盘的逻辑代码(C:或D:),而“LIST”chunk 即为其下的子目录,其他的chunk则为一般的文件。至于在RIFF文件的处理方面,微软提供了相关的函数。视窗下的各种多媒体文件格式就如同在磁盘上规定仅能放怎样的目录,而在该目录下仅能放何种数据。

WA V 为waveform(波形)的缩写。声音文件的结构如表4-1所示,“RIFF”的格式辨别码为“W A VE”。整个文件由两个chunk 所组成:辨别码“fmt ”(注意,最后一个是空白字符!)及“data”。

表4-1W AV 文件结构

“RIFF”

××××

“WA VE”

“fmt”

sizeof(PCMW A VEFORMA T

)

struct of

PCMW A VEFORMA T

data

××××

wave form data

在“fmt”的chunk下包含了一个PCMW A VE-FORMAT数据结构,其定义如下:

typedef struct pcmwaveformat-tag{

WA VEFORMAT wf;

WORD wBitsPerSample;

}PCMW A VEFORMA T;

typedef struct waveformat-tag{

WORD wFormat Tag ;

WORD nChannels;

DWORD nSamplesPerSec;

DWORD nAvgBytesperSec;

WORD nBlockAlign;

}WA VEFORMAT;

其意义分别为:

wFormat Tag:记录着此声音的格式代号,例如W A VE- FORMA T- PCM,W A VE- FORAM- AD-PCM等等。

nChannels:记录声音的通道数。

nSamplesPerSec:记录每秒取样数。

nAvgBytesPerSec:记录每秒的数据量。

nBlockAlign:记录区块的对齐单位。

wBitsPerSample:记录每个取样所需的位数。

“data”Chunk包含着真正的声音数据。Windows目前仅提供W A VE- FORMAT- PCM一种数据格式,所代表的意义是脉冲编码调制(pulse code modulation)。针对这种格式,Windows 定义了在“data”的chunk中数据的存放情形,图4-1中列出了四种不同通道数及取样所需的位元数以及位元位置的安排。

图4-1 PCM 文件中位元安排方式

第一排表示单声道8位元,第二排表示双声道8位元,第三排表示单声道16位元,第四排

表示双声道16位元。8位元代表音量大小由8个位元所表示,16位元则代表音量大小由16 个位元所表示。理论上8位元可以表示0~255,16位元可表示0~65535,不过Windows 规定16 位元其值的范围为-32168~32167。此外尚有一点要注意的是,0并不一定代表无声,而是由中间的数值来决定,也就是在8位元时为128,16 位元时为0才是无声。所以,若程序设计时需放入无声的数据,需特别注意声音格式是16或是8位元,以放入适当的值。五、实验步骤

1.新建工程,将“Exp13音频实验”中的文件添加到工程。

2.编辑主任务函数(Main_Task()),如下图4-2所示:

void Main_Task(void *Id) //Main_Test_Task

{

U32 nbyte;

FILE *pfile;

char filename[]="1.wav";

rIISCON=0; //disable;

rIISMOD=IISMOD_TX|IISMOD_16BIT|IISMOD_32FS|IISMOD_MCLK_384FS;

rIISFCON=IISFCON_TXDMA|IISFCON_TXFIFO;

rIISPSR=0x11;

rIISCON=IISCON_PRESCALE|IISCON_ENABLE;

Init_UDA1341();

pfile=OpenOSFile(filename, FILEMODE_READ);

if(!pfile)

return ;

ReadOSFile(pfile, (U8*) buffer, 0x16*2);//读取头文件信息

nbyte=ReadOSFile(pfile, (U8*) buffer, sizeof(buffer));//读取波形数据

for(;;)

{//死循环

/****** BDMA0 Initialize ******/

//for Source

rBDISRC0=(1<<30)+(1<<28)+(int)buffer; //Half word,inc,Buf

//for des

rBDIDES0=(1<<30)+(3<<28)+((int)0x1d18010); //M2IO,fix,IISFIF

//Size

//iis,reserve,done_int,not auto-reload/start,DMA enable,COUNT

rBDICNT0=(1<<30)+(1<<26)+(3<<22)+(0<<21)+(0<<20)+(sizeof(buffer)&(~0x3));

rBDICNT0 |= (1<<20);//enable

//Enable DMA

rBDCON0 = 0x0<<2;

//Tx DMA

rIISCON|=IISCON_TXDMA;

}

初始化IIS寄存器

IISMOD

IISFCON

IISPSR

IISCON

初始化DA转换器

Init_UDA1341()

(IIS-S3C44B0.h)

读取WAV文件数据

初始化DMA寄存器

打开DMA请求

(BDCON0)

打开IIS发送DMA请求

(IISCON)

图4-2 主任务函数

读取wav文件数据可使用以下代码

pfile=OpenOSFile(filename, FILEMODE_READ);

if(!pfile)

return ;

ReadOSFile(pfile, (U8*) buffer, 0x16*2); //读取头文件信息

nbyte=ReadOSFile(pfile, (U8*) buffer, sizeof(buffer)); //读取波形数据

其中filename为打开的文件名,在字符串数组中定义:

char filename[]="1.wav";

buffer为存放波形数据的缓冲区,应定义成全局变量

int buffer[AUDIO_IN_BUFFERSIZE*20]; //5秒钟的数据

3.将声音文件“1.wav”下载到开发板中。

4.将耳机插入平台“PHONES”插口,或者调节音量电位器到合适位置而采用板载扬声器发音,调试程序,可以听到音乐。

实验十四绘图的API函数

一、实验目的

学习使用嵌入式系统绘图的API函数。理解绘图设备上下文(DC)在多任务操作系统中的作用。会使用绘图设备上下文(DC)在屏幕上绘制一个圆角矩形和一个圆。了解绘制动画防止闪烁的基本原理,可以实现无闪烁的动画。

二、实验内容

本次实验通过使用嵌入式系统的绘图API函数,首先,在屏幕上绘制一个圆角矩形和一个整圆。然后,再在屏幕上无闪烁的绘制一个移动的正弦波。

三、实验原理

请查阅附录API函数,在Display.h中定义了和绘图显示有关的数据类型和函数原型。在uCOS-II系统环境下,绘图必须通过使用绘图设备上下文(DC)来实现。绘图设备上下

文(DC)中包括了与绘图相关的信息,比如:画笔的宽度、绘图的原点等等。这样,在多任务系统中,不同的任务通过不同的绘图设备上下文(DC)绘图才不会互相影响。绘图设备上下文(DC)的结构定义如下:

typedef struct{

int DrawPointx;

int DrawPointy; //绘图所使用的坐标点

int PenWidth; //画笔宽度

U32 PenMode; //画笔模式

COLORREF PenColor; //画笔的颜色

int DrawOrgx; //绘图的坐标原点位置

int DrawOrgy;

int WndOrgx; //绘图的窗口坐标位置

int WndOrgy;

int DrawRangex; //绘图的区域范围

int DrawRangey;

structRECT DrawRect; //绘图的有效范围

U8 bUpdataBuffer; //是否更新后台缓冲区及显示

U32 Fontcolor; //字符颜色

}DC,*PDC

与绘图设备上下文(DC)有关的函数有:initOSDC()用来初始化系统的DC,为DC动态内存开辟空间;CreateDC()和DestoryDC(PDC pdc)分别用来创建和删除DC,前者返回所创建的DC指针,后者则释放DC的内存空间。

和绘图有关的函数有TextOut(),LineTo(),FillRect(),Circle(),ShowBmp()等常见的图形函数,用户可以查看附录API函数显示部分,尝试使用这些函数。

在uCOS-II操作系统中,液晶显示屏的刷新是通过Lcd_Fresh_Task任务完成的,该任务是在系统附加任务初始化函数OSAddTask_Init()中定义的,该函数开辟了LCD刷新任务,触摸屏任务,键盘任务等。绘图首先是在绘图缓冲区中完成的,然后系统自动(也可以通过设置绘图设备上下文参数,不让系统自动刷新)向Lcd_Fresh_Task发送更新消息。其流程图如图4-3所示:

图4-3 绘图流程

因为绘图是在后台进行的,绘制完成之后,再更新到液晶屏上,所以,在绘图的时候不用担心反覆的擦除屏幕会引起屏幕的闪烁,这样,可以很方便的实现动画无闪烁的显示。绘制完一次图形以后,必须要使用OSTimeDly()给出一定时间的延时(推荐用200),同时使Main_Task任务主动让出对CPU的控制权,使Lcd_Fresh_Task任务可以完成刷新。

四、实验步骤

1、新建工程,将“Exp14绘图的API函数”中的文件加入工程。

2、编辑Main.c文件,在Main_Task任务中加入代码。使用操作系统的绘图API函数,绘制出如图4-4所示的图形。

int oldx,oldy;//保存原来坐标系位置

PDC pdc;//定义绘图设备上下文结构

int x,y;//坐标

double offset=0;//x坐标偏移量

ClearScreen();//清屏

pdc=CreateDC();//创建绘图设备上下文

SetDrawOrg(pdc, LCDWIDTH/2,LCDHEIGHT/2, &oldx, & oldy); //设置绘图原点为屏幕中心

Circle(pdc,0, 0, 50);//画圆

MoveTo(pdc, -50, -50);//移动

LineTo(pdc, 50, -50);//画线

ArcTo(pdc, 80, -20, TRUE, 30);//画弧

LineTo(pdc, 80, 20);

ArcTo(pdc, 50, 50, TRUE, 30);

LineTo(pdc, -50, 50);

ArcTo(pdc, -80, 20, TRUE, 30);

LineTo(pdc, -80, -20);

ArcTo(pdc, -50, -50, TRUE, 30);

OSTimeDly(3000);//将任务挂起3秒

ClearScreen();

SetDrawOrg(pdc, 0, LCDHEIGHT/2, &oldx,&oldy);//设置绘图原点为屏幕左边中部

图4-4 绘制的图形

提示:

1)绘制整个圆可以用Circle函数,绘制直线用LineTo函数,绘制圆弧用ArcTo函数。调试的过程中可以在每次调用绘图函数之后调用OSTimeDly()函数,使系统更新显示,输出到液

晶屏上。

2)为方便绘图,可使用SetDrawOrg函数设置绘图的原点。

3)因为本次实验不用系统的字符显示,所以,可以去掉Main()函数中LoadFont()函数,以节省系统启动的时间。

3、用ARM SDT 2.5 或ADS1.2编译、下载并调试上述程序,检查运行结果。

4、在屏幕上无闪烁的绘制一个移动的正弦波。

for(;;)

{

MoveTo(pdc, 0, 0);

for(x=0;x

{//画正弦波

y=(int)(50*sin(((double)x)/20.0+offset));

LineTo(pdc, x, y);

}

offset+=1;

if(offset>=2*3.14)

offset=0;

OSTimeDly(1000);

ClearScreen();

}

提示:

1)绘制正弦波等有数学表达式的曲线时,可以根据平面几何的知识通过数学计算得到曲线上点的坐标,然后用线段连起来构成整个曲线。两帧画面之间可以清屏擦掉原来图形,然后重画新图形。

2)因为绘图需要使用sin()函数,所以需要在main.c中加入#include

5、用ARM SDT 2.5 或ADS1.2编译、下载并调试上述程序,检查运行结果。

6、生成发行版本的.bin文件,通过USB下载到嵌入式开发板中,运行并检查输出结果。

实验十五系统的消息循环

一、实验目的

学习使用系统的消息循环。掌握如何通过系统的消息循环来响应键盘任务的消息,同时学会使用图形模式下的液晶屏文字显示函数。

二、实验内容

本次实验将通过使用消息队列接收键盘任务发出的按键消息,并把对应按键的字符显示在液晶屏和PC机的终端上。

三、实验原理

通常在多任务操作系统中,任务之间的通讯是通过发送消息来实现的。消息队列是uCOS-II 操作系统的一种通信机制,它可以使一个任务或者中断服务程序向另一个任务发送以指针方式定义的变量。uCOS-II操作系统提供了若干对消息队列进行操作的函数,例如OSQCreate(),OSQPend(),OSQPost()等,都定义在OS_Q.C中。但是,在将uCOS-II移植到本ARM嵌入式开发平台时,对消息队列相关函数又作了提高,使得程序中对消息队列的使用变得更加简

单易行。请参考附录API函数系统消息部分,开发平台的消息队列相关函数定义在OSMessage.h中。程序中可以用OSCreateMessage()函数为某个控件创建消息,用SendMessage()函数将该消息发送到消息队列中,用WaitMessage()函数等待消息,用DeleteMessage()函数删除消息。

消息的数据结构定义如下:

typedef struct {

POS_Ctrl pOSCtrl; //消息所发到的窗口(控件),为NULL时指桌面

U32 Message; //消息类型

U32 WParam; //消息参数

U32 LParam; //消息参数

}OSMSG, *POSMSG;

下面是平台的基本消息类型定义:

#define OSM_KEY 1 //键盘消息

#define OSM_TOUCH_SCREEN 2 //触摸屏消息

#define OSM_SERIAL 100 //串口收到数据的消息

#define OSM_LISTCTRL_SELCHANGE 1001 //列表框的选择被改变的消息

#define OSM_LISTCTRL_SELDBCLICK 1002 //列表框的选择双击消息#define OSM_BUTTON_CLICK 1003 //单击按钮消息

下表4-19是各基本消息类型的参数说明:

表4-19 基本消息类型的参数说明

Message WParam LParam OSM_KEY 键盘扫描码

OSM_TOUCH_SCREEN 低16位=触摸点x坐标值

高16位=触摸点y坐标值

触摸动作

OSM_LISTCTRL_SELCHANGE CtrlID CurrentSel OSM_LISTCTRL_SELDBCLICK CtrlID CurrentSel OSM_BUTTON_CLICK CtrlID

对于键盘消息来说其类型pMsg->Message=OSM_KEY,参数pMsg->WParam则是按键的键码(pMsg是指向该消息结构体的指针)。键盘中断服务程序只向键盘邮箱(邮箱是uCOS-II 的另一种通信机制)中发送一个消息,通知键盘扫描任务发生按键事件:

void ISR_Key()

{

OSMboxPost(Key_MailBox, (void*)1);

}

当键盘扫描任务等到该邮箱的消息后就会从键盘扫描芯片读取扫描码,继而将该扫描码对应

的键码用键盘消息发送到消息队列:

void Key_Scan_Task(void *Id)//键盘扫描任务

{

U32 key;

INT8U err;

POSMSG pmsg;

Uart_Printf("begin key task \n");

for (;;){

OSMboxPend(Key_MailBox, 0, &err);

key=ZLG7289_ReadKey();

if(key>=64)

continue;

pmsg=OSCreateMessage(NULL, OSM_KEY,KeyBoard_Map[key],0);

if(pmsg)

SendMessage(pmsg);

}

}

所谓的系统消息循环如下图4-5所示:

图4-5 系统消息循环

应用程序在Main_Task任务中等待消息,并对该消息进行判断和处理,如果是键盘消息则提取出键码,变换为对应字符,然后将其显示到液晶屏上。在图形模式下,液晶屏的文字输出函数是TextOut(),实际是通过在图形方式下绘图完成文字显示的。此函数输出的字符数组必须是基于双字节Unicode编码的。在程序中可以使用Int2Unicode()和strChar2Unicode()两个函数分别将整形数或ASCII字符转换为Unicode字符串。这部分内容请参考附录API函数,在Ustring.h定义。

四、实验步骤

1、新建工程,将“Exp15系统的消息循环”中的文件加入工程。

2、编辑Main_Task任务中的代码,理解如何实现消息循环。即:等待消息、处理(响应)消息、删除消息。

void Main_Task(void *Id) //Main_Test_Task

{

POSMSG pMsg=0;//创建消息结构

ClearScreen();//清屏

//消息循环

for(;;){

pMsg=WaitMessage(0); //等待消息

switch(pMsg->Message){

case OSM_KEY://键盘消息

onKey(pMsg->WParam,pMsg->LParam);

break;

}

DeleteMessage(pMsg);//删除消息,释放资源

}

}

提示:

1)使用WaitMessage(0)接收消息,通常等待时间设置为无限长。

2)系统的消息循环是一个无限循环。

3)收到消息以后(即WaitMessage()函数返回后),通过判断消息结构中Message成员来判断消息类型。如果是键盘消息,则Message的值为OSM_KEY,WParam参数存储的是按键的键码,LParam参数存储的是同时按下的功能键(如果没有,则为0)。

4)开始等待下一条消息之前必须使用DeleteMessage删除消息,释放系统的内存空间。3、编写键盘消息响应函数onKey(),处理键盘的消息。当有键盘消息收到的时候,把按键字符显示在液晶屏上,同时,发送给PC机的终端。

void onKey(int nkey, int fnkey)

{

PDC pdc;//创建绘图设备上下文结构

U16 ch[10];

ClearScreen();//清屏

pdc=CreateDC();//创建绘图设备上下文

Uart_Printf("key=%s\n",KeyTable[nkey]);//向串口发送按键值对应的ASCII吗

strChar2Unicode(ch,KeyTable[nkey]);//将整形数据转化成Unicode

TextOut(pdc, 150, 100, ch, TRUE, FONTSIZE_MIDDLE);//文本模式下显示文字

DestoryDC(pdc);//删除绘图设备上下文

}

提示:

通过Uart_Printf()函数向串行口发送键面字符串。

用ARM SDT 2.5 或ADS1.2编译、下载并调试上述程序,检查运行结果。

5、生成发行版本的.bin文件,通过USB下载到嵌入式开发板中,运行并检查输出结果。

实验十六文件的使用

一、实验目的

学习使用文件相关的API函数,了解在uCOS-II操作系统上扩展文件系统的情况。

二、实验内容

通过使用开发平台提供的API函数,打开一个保存在FLASH海量存储器中的英文文本文件,将其文件内容输出显示在液晶屏上。

三、实验原理

uCOS-II操作系统本身并没有文件系统,不支持文件相关的管理功能。在将uCOS-II操作系统移植到ARM嵌入式开发平台时参考FAT16为该系统扩展了一个简单的文件系统,从而使该操作系统功能更强大,也符合实际嵌入式产品开发的需要。开发平台的硬件中有一片容量至少16M的NAND FLASH存储芯片作为嵌入式设备的固态数据存储器,或称为电子硬盘。该存储器由文件系统管理,在文件系统的功能函数与FLASH芯片之间有相关驱动程序实现高层系统功能和底层具体硬件的数据交换。

嵌入式系统经常使用的存储介质FLASH芯片具有和磁盘完全不同的结构特点,开发平台上的K9F2808U0A芯片具有1024个Block,每个Block有32个Page,每个Page有512+16=528个Byte。这种芯片的读写操作具有以下特点:

1)必须以Page为单位进行读写;

2)写之前必须先擦除原有内容;

3)擦除操作必须对Block进行,即一次至少擦除一个Block的内容。

针对这种情况,将一个Page定为一个扇区;将2个Block即64个扇区定为一个簇,簇的容量正好为512×64=32K,满足FAT16对簇的要求。FAT是按簇为单位分配空间的,但其给出的地址LBA(Logical Block Address)只是一个扇区号,比如LBA=0x40对于FLASH芯片来说实际代表簇2的扇区0。因此需要将LBA转换为芯片的物理地址才可以进行数据存取操作。转换关系如下:

FLASH的Block=LBA/0x20;

FLASH的Page =LBA%0x20。

根据该公式就可以将LBA转换为正确的Block和Page,然后就可以用芯片的读写命令存取该Block/Page的数据了。

FAT文件系统包括MBR区,FAT区,DIR区,DA TA区。其中MBR(主引导记录)区在磁盘文件系统中也称0扇区。硬盘上由于存在多个分区而在每个分区中还有DBR(DOS引导记录)区。MBR扇区必须包括BPB(BIOS Parameter Block),其中有对文件系统进行识别的关键信息。由于开发平台的电子硬盘结构比较简单并且不要求启动,MBR不必含有启动代码,但最后两个字节必须是0x55AA。关于引导扇区、FAT和DIR的详细结构请参考相关资料。

FLASH前两个Block的内容如下表4-20所示:

表4-20 FLASH前两个Block的内容

LBA Block Page Bytes 说明

0 0 0 512 MBR=BPB+Excutable Code+0x55AA

1-2 0 1-2 1024 第1个FAT区

3-4 0 3-4 1024 第2个FAT区(备份)

5-39H 0-1 DIR区,BPB中的目录项数使其正好添满本簇。

40H 2 0 DA TA区起始扇区。

在系统对FLASH芯片进行格式化操作时将FAT写入芯片,使其逻辑空间符合文件系统的需要。当主机发出READ命令后,FLASH读写操作开始,首先读取MBR得到诸如扇区大小、每簇扇区数、总扇区数等存储介质有关信息。然后读取FAT得到文件目录列表,基于此就可以进行文件的复制、删除、创建等操作了。开发平台的电子硬盘可以和USB通讯构成U 盘,当和PC机连接并激活该U盘后会在PC上出现可移动磁盘。

PC机启动时BIOS会读取MBR中的Excutable Code(引导程序)并把控制权转交于它,然后由该引导程序负责引导操作系统。而ARM嵌入式设备启动时BIOS则直接依赖文件系统从FLASH中引导用户的可执行程序。在用户程序中也可以使用平台提供的文件操作函数存取FLASH中的文件。请参考附录API函数文件系统部分,在OSFile.h中定义。有了这些文件系统函数,用户就能屏蔽硬件上FLASH芯片物理空间和读写时序等复杂问题,可以象在PC机上一样使用文件系统,存取并处理文件。

在使用文件系统之前必须通过initOSFile()函数初始化文件系统,为文件缓冲区分配存储空间。FILE是一个文件相关的结构体,定义如下:

typedef struct{

U8 Buffer[Block_Size]; //文件缓冲区32*1024

U32 fileCluster; //文件当前的簇的位置

U32 filemode; //打开文件的模式

U32 filebufnum; //文件缓冲区中已经读取/写入的字节数

U32 fileCurpos; //读写的当前位置

U32 filesize; //文件的大小

}FILE;

在FLASH存储器中数据是按整块(Block)存储的,在文件缓冲区中是以Block为单位开辟空间的,每个Block是16KB大小。

另外可以用OpenOSFile()函数以指定模式打开文件;用ReadOSFile()函数读取已打开文件数据到指定缓冲区;用WriteOSFile()函数将指定缓冲区的数据写入到文件;用LineReadOSFile()函数读取文本文件的一行字符;用CloseOSFile()函数关闭文件,释放文件缓冲区;用SeekOSFile()函数定位文件指针;用DeleteOSFile()函数删除指定文件。

四、实验步骤

1、进入嵌入式开发平台的BIOS,连接USB电缆并激活U盘,在PC机上向开发平台的FLASH 存储器复制一个小体积文本文件。

2、新建工程,将“Exp16文件的使用”中的文件加入工程。

3、打开Main.c文件,编辑Main_Task任务中的代码,打开上述的文本文件,逐行读取文件,并显示在液晶屏上。具体的流程如图4-6所示:

void Main_Task(void *Id) //Main_Test_Task

{

char str[256];//文件缓冲区

FILE* pfile;//定义文件结构指针

ClearScreen();//清屏

LCD_ChangeMode(DspTxtMode);//改变显示模式

LCD_Cls();//文本模式下清屏

pfile=OpenOSFile(TextFilename,FILEMODE_READ);//打开文件

if(pfile==NULL){//文件打开失败

LCD_printf("Can't Open file!\n");

for(;;)

OSTimeDly(1000);

}

while(LineReadOSFile(pfile, str)>2){//以行的方式读文件

str[strlen(str)-2]='\n';

str[strlen(str)-1]=0;

LCD_printf(str);//向lcd输出文件内容

}

CloseOSFile(pfile);//关闭文件

for(;;)

OSTimeDly(1000);

}

图4-6 流程图

提示:

1)使用OpenOSFile()函数以只读方式(FILEMODE_READ)打开文件。

2)通过LineReadOSFile()函数逐行读取文本文件,并在液晶屏上显示出来。LineReadOSFile()函数的返回值是读取该行的字节数(包括:回车和换行符),可以根据LineReadOSFile()函数的返回值判断是否读到文件的结尾(读到文件结尾时该函数返回值小于2,只有换行回车的空行等于2)。

3)文件读取完毕以后,一定要用CloseOSFile()函数关闭文件,释放文件缓冲区中的内存空间。

4、用ARM SDT 2.5 或ADS1.2编译、下载并调试上述程序,检查运行结果。

5、生成发行版本的.bin文件,通过USB下载到嵌入式开发板中,运行并检查输出结果。

实验十七列表框控件的使用

一、实验目的

学习列表框控件的使用,了解图形系统中控件的使用方法。继续学习操作系统的文件相关API函数,查找指定扩展名的文件并在列表框中显示其扩展名。

二、实验内容

通过使用操作系统中文件相关API函数,列出系统中存储在电子硬盘中的指定扩展名的文件(比如:*.bmp位图文件)。使用列表框控件把文件名列出来,同时,可以使用键盘选择某位图文件并显示该图片。

三、实验原理

控件是可视化编程的基础,每个控件是一个相对独立的组件,有其自有的显示方式,动态内存管理模式以及与系统通信的方法。对于应用程序开发人员来说,并不需要掌握控件内部到底是怎么样工作,只需要使用控件提供的API函数,设置控件的属性,即可改变控件的显示结果。开发平台的uCOS-II操作系统提供了列表框、文本框、图片框、按钮和窗口等几种简单的控件及其API函数。请参考附录API函数系统控件部分,在Control.h中定义。

在使用系统控件之前需要通过initOSCtrl()函数初始化系统的控件,为动态创建控件分配空间。与系统控件有关的API函数有:

SetWndCtrlFocus()函数设置窗口中指定ID的控件为焦点控件,返回原来焦点控件的ID;GetWndCtrlFocus()函数获取当前焦点控件的ID。

ReDrawOSCtrl()函数重画所有的系统可见控件,当由于某原因清屏后必须重画控件。GetCtrlfromID()函数从指定ID的控件获取该控件的指针。

SetCtrlMessageCallBk()函数设置指定控件的消息回调函数,程序中收到发给该控件的消息后可以调用其消息回调函数。

OSOnSysMessage()函数是系统的消息处理函数,程序中收到消息后可以用该函数将其传送给控件。

下面是列表框控件的结构定义:

typedef struct{

U32 CtrlType; //控件的类型

U32 CtrlID; //列表框控件的ID

structRECT ListCtrlRect; //列表框的位置和大小

structRECT ClientRect; //列表框列表区域

U32 FontSize; //列表框字体大小

U32 style; //列表框的风格

U8 bVisible; //是否可见

PWnd parentWnd; //控件的父窗口指针

U8 (*CtrlMsgCallBk)(void*); //列表框控件的消息回调函数

U16 **pListText; //列表框所容纳的文本指针

int ListMaxNum; //列表框所容纳的最大文本的行数

int ListNum; //列表框所容纳的文本的行数

int ListShowNum; //列表框所能显示的文本行数

int CurrentHead; //列表的表头号

int CurrentSel; //当前选中的列表项号

structRECT ListCtrlRollRect; //列表框滚动条方框

structRECT RollBlockRect; //列表框滚动条滑块方框

}ListCtrl,*PListCtrl

在程序中可以使用CreateListCtrl()函数来创建列表框控件,该函数返回指向列表框的指针,并用SetWndCtrlFocus()函数将焦点转移到该控件上。注意在系统中每个控件具有唯一的ID,用它来标识控件。然后就可以使用AddStringListCtrl ()函数向该列表框中添加表项了,在本实验中添加的是所查找到的文件名。

四、实验步骤

1、进入嵌入式开发平台的BIOS,连接USB电缆并激活U盘,在PC机上向平台的电子硬盘中复制几个24位真彩色位图文件(扩展名为Bmp)。

2、新建工程,将“Exp17列表框控件的使用”中的文件加入工程。

3、打开Main.c文件,编辑Main_Task任务中的代码,编写一个函数实现文件列表的显示。首先创建一个列表框控件,通过文件相关的API函数,列出扩展名为Bmp的文件,并添加到上面创建的列表框中。

void Main_Task(void *Id) //Main_Test_Task

{

POSMSG pMsg=0;//定义消息结构

ClearScreen();//清屏

CreateFileList(); //创建文件列表框

//消息循环

for(;;){

POS_Ctrl pCtrl;//定义控件结构指针

pMsg=WaitMessage(0);//等待消息

if(pMsg->pOSCtrl){//发送给控件的消息

if(pMsg->pOSCtrl->CtrlMsgCallBk)

(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);

}

else{

switch(pMsg->Message){

case OSM_KEY://键盘消息

pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));//得到焦点控件的指针

if(pCtrl->CtrlType==CTRLTYPE_WINDOW){

if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE){

//焦点是有模式窗口,消息直接传递过去

OSOnSysMessage(pMsg);

break;

}

}

if(onKey(pMsg->WParam,pMsg->LParam))

break;

default:

OSOnSysMessage(pMsg);

break;

}

}

DeleteMessage(pMsg);//删除消息

}

}

提示:

1)用CreateListCtrl()函数创建列表框,其ID在程序中指定:

#define ID_MainListBox 101 //列表框控件ID

在使用该函数前先用SetRect(&rect, 0,18,120,200)设置一个矩形结构rect,并将其作为CreateListCtrl()的参数,用来规定列表框的大小范围。

2)使用ListNextFileName()函数列出当前目录位置以后的第一个符合指定扩展名的文件名,同时,当前目录的位置指针自动下移。如果成功则返回TRUE,如果没有适合的文件则返回FALSE。该函数属于文件相关函数,请参考附录API函数。

3)因为ListNextFileName()函数得到的文件名不是Unicode字符串,所以要通过strChar2Unicode()函数转换成Unicode字符串,才可以添加到列表框中显示出来。同时,为了以后方便得到文件名字符串的非Unicode格式,提倡在一个数组中记录ListNextFileName()返回的char型字符串,以便以后打开相应的文件。

4、编写键盘消息响应函数,定义按键,使列表框的高亮度条可以向上或向下滚动,按确定键可以绘制高亮条目对应的图片。

提示:

1)通过ListCtrlSelMove()函数改变列表框的高亮度条的位置。但是,用户程序的键盘消息响应函数中可以不必考虑通过“向上键”或“向下键”来移动列表框的高亮度条。因为列表框控件对这两个按键已经作了处理。从程序中可以看出,如果用户的键盘消息响应函数onKey()中不处理这两个按键就会返回FALSE,从而在Main_Task的消息循环中就会用OSOnSysMessage()函数将该键盘消息分发给焦点控件本身处理,系统的每个控件都有自己的消息处理函数,例如列表框的是OSListCtrlOnMessage().

2)使用ShowBmp()函数可以显示指定文件名的真彩色的位图图片。该绘图函数定义在Display.h中,请参考附录API函数。

图4-7 Main_Task中的消息循环

5、编写Main_Task中的消息循环,等待键盘消息并处理该消息。程序的流程图如图4-7所示。

6、用ARM SDT 2.5 或ADS1.2编译、下载并调试上述程序,检查运行结果。

7、生成发行版本的.bin文件,通过USB下载到嵌入式开发板中,运行并检查输出结果。

实验十八文本框控件的使用

一、实验目的

学习文本框控件的使用。掌握以二进制模式打开并读取文件的方法。把一个二进制文件中的数据在文本框中显示出来。利用键盘消息,实现文本框内容的编辑。掌握如何将数据写入二进制文件。

二、实验内容

把一个二进制文件中的数值内容在文本框中显示出来,通过键盘编辑文本框,可以改变文本框的内容,并可以保存到文件,系统掉电以后,文件内容不丢失。

三、实验原理

文本框控件也是系统的一个基本控件,其结构定义如下:

typedef struct{

U32 CtrlType; //控件的类型

U32 CtrlID; //控件的ID

structRECT TextCtrlRect; //文本框的位置和大小

structRECT ClientRect; //客户区域

U32 FontSize; //文本框的字符大小

U32 style; //文本框的风格

U8 bVisible; //是否可见

PWnd parentWnd; //控件的父窗口指针

U8 (*CtrlMsgCallBk)(void*); //文本框控件的消息回调函数

U8 bIsEdit; //文本框是否处于编辑状态

char* KeyTable; //文本框的字符映射表

U16 text[40]; //文本框中的字符块

}TextCtrl,*PTextCtrl

对文本框控件的使用和列表框相似,这里可以使用CreateTextCtrl()函数来创建文本框控件,同样必须指定文本框的唯一ID。用SetTextCtrlText()函数即可将Unicode文本添加到文本框中,而GetTextCtrlText()函数用来获取文本框中字符串的指针。用AppendChar2TextCtrl()函数和TextCtrlDeleteChar()函数分别在文本框中追加一个字符或删除最后一个字符。也可以用SetTextCtrlEdit()函数设置文本框为编辑状态,使文本框可以响应键盘消息,通过键盘输入文字。请参考附录API函数系统控件部分,在Control.h中定义。

四、实验步骤

1、在PC机上使用UltraEdit创建一个二进制文件,文件长度为4个字节以上。实际上是要保存一个整型数值。把此文件复制到嵌入式开发平台的电子硬盘中。

2、新建工程,将“Exp18文本框控件的使用”中的文件加入工程。

3、打开Main.c文件,编辑Main_Task任务中的代码。编写LoadSysNumber()函数,在其中打开指定文件名的二进制文件,读取一个整型数到全局变量中。编写SaveSysNumber()函数用来把整型变量的值保存到该二进制文件中。编写键盘消息响应函数onKey(),处理回车键和取消键。编写CreateText()函数,在其中创建文本框,将所读取的整型数值转换为Unicode 字符串后设置为文本框的内容。

void CreateText()

{

structRECT rect;//定义矩形框结构

U16 str[20];

LoadSysNumber();

SetRect(&rect, 100,30,160,50); //设置PID参数轴1P的文本框

pTextCtrl=CreateTextCtrl(ID_MainTextCtrl, &rect, FONTSIZE_MIDDLE, CTRL_STYLE_FRAME, NULL, NULL);//创建文本框

Int2Unicode(sysnumber,str);//将整形数据转换为Unicode数据

SetWndCtrlFocus(NULL, ID_MainTextCtrl);//将焦点移到文本框中

SetTextCtrlText(pTextCtrl, str,TRUE);//设置文本框内容

}

void Main_Task(void *Id) //Main_Test_Task

{

POSMSG pMsg=0;//定义消息结构

ClearScreen();//清屏

CreateText(); //创建文本框

//消息循环

for(;;){

POS_Ctrl pCtrl;//定义消息结构

pMsg=WaitMessage(0);//等待消息

if(pMsg->pOSCtrl){//发给控件的消息

if(pMsg->pOSCtrl->CtrlMsgCallBk)

(*pMsg->pOSCtrl->CtrlMsgCallBk)(pMsg);

}

else{

switch(pMsg->Message){

case OSM_KEY://键盘消息

pCtrl=GetCtrlfromID(NULL, GetWndCtrlFocus(NULL));//得到由焦点控件的结构指针

if(pCtrl->CtrlType==CTRLTYPE_WINDOW){

if((((PWnd)pCtrl)->style&WND_STYLE_MODE)==WND_STYLE_MODE){

//焦点是有模式窗口,消息直接传递过去

OSOnSysMessage(pMsg);

break;

}

}

if(onKey(pMsg->WParam,pMsg->LParam) )

break;

default:

OSOnSysMessage(pMsg);

break;

}

}

DeleteMessage(pMsg);//删除消息

}

}

U8 onKey(int nkey, int fnkey)

{

U16 str[20];

static U8 input=FALSE;//编辑状态标志

switch(nkey){

case 14://OK

if(!input){//不处于编辑模式

pTextCtrl->text[0]=0; //清空文本框

SetTextCtrlEdit(pTextCtrl, TRUE);//使文本框处于编辑状态

DrawTextCtrl(pTextCtrl);//重绘文本框

input=TRUE;//置编辑状态标治

}

else{

sysnumber=Unicode2Int(pTextCtrl->text);//将文本框中的内容由Unicode 变为整形

SetTextCtrlEdit(pTextCtrl, FALSE);//使文本框退出编辑状态

DrawTextCtrl(pTextCtrl);//重绘文本框

SaveSysNumber();

input=FALSE;//置编辑标志为否

}

return TRUE;

case 7://Cancel

SetTextCtrlEdit(pTextCtrl, FALSE);//使文本框退出编辑状态

Int2Unicode(sysnumber,str);//将整形变为unicode

SetTextCtrlText(pTextCtrl, str,TRUE);//设置文本框内容

input=FALSE;

return TRUE;

}

return FALSE;

}

提示:

1)使用OpenOSFile()函数以只读方式(FILEMODE_READ)打开二进制文件后可用ReadOSFile()函数读取若干字节到指定地址的缓存区。之后必须关闭文件。

2)使用WriteOSFile()函数可以保存内存中缓冲区的数据到二进制文件。

3)实际上文本框控件的消息处理函数已经对回车键和取消键作了处理,但这里根据需要在用户的键盘消息响应函数onKey()中依然可以对这两个按键处理,并且返回TRUE使得Main_Task任务中的消息循环不再把该消息传给控件本身。而其他键的键盘消息则由文本框控件本身处理,以能实现从键盘输入数字。实际上控件本身是使用TextCtrlDeleteChar()和AppendChar2TextCtrl()函数在文本框中删除和追加字符的。

4)在onKey()中根据文本框是否处于编辑状态分别处理回车键,如果不在编辑状态则通过SetTextCtrlEdit()函数使其进入编辑状态,否则退出编辑状态并保存数据。SetTextCtrlEdit()函数的第2个参数为TRUE或FALSE分别使指定的文本框控件进入或退出编辑状态。

5)用CreateTextCtrl()函数创建文本框之前同样需要用SetRect()定义一个矩形结构变量,规定文本框大小和位置,另外文本框控件的ID也需要事先指定。本系统中图形模式下的字符显示都需要Unicode编码,所以要用Int2Unicode()函数将整数转换为Unicode字符串,以便用SetTextCtrlText()函数显示在文本框中。

嵌入式系统综合实验一

嵌入式系统综合实验一

学号: 装 订 线 实验报告 课程名称: 嵌入式系统设计 指导老师:马永昌 成绩:________________ 实验名称:综合实验一dht11和人体感应传感器 实验类型:验证型 同组学生姓名:孙凡原 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得 一、实验目的和要求 1.掌握字符设备驱动程序的基本结构和开发方法 2.掌握用户空间调用设备驱动的方法 3.掌握用户和内核的交互 二、实验内容和原理 专业:测控技术与仪器 姓名:颜睿

装订 线1.编写温湿度传感器DHT11驱动,传输打印温湿度信息 2.编写人体感应传感器驱动,控制LED灯亮灭 原理: 温湿度传感器DHT11: 1.引脚图 实际使用传感器没有NC引脚 2.数据采集 a.数据总时序 用户主机发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出40bit 的数据,幵触发一次信采集。

b.主机发送起始信号 连接DHT11的DATA引脚的I/O口输出低电平,且低 电平保持时间不能小于18ms,然后等待DHT11 作出 应答信号。 装 线 订 c.检测从机应答信号 DHT11 的DATA 引脚检测到外部信号有低电平时, 等待外部信号低电平结束,延迟后DHT11 的DATA 引脚处于输出状态,输出80 微秒的低电平作为应答信 号,紧接着输出80 微秒的高电平通知外设准备接收数 据。

装 订线 d.接收数据 (1)数据判定规则 位数据“0”的格式为:50 微秒的低电平和26-28 微秒的高电平,位数据“1”的格式为:50 微秒的低电平加70微秒的高电平。 接收数据时可以先等待低电平过去,即等待数据线拉高,再延时60us,因为60us大于28us且小于70us,再检测此时数据线是否为高,如果为高,则数据判定为1,否则为0。 (2)数据格式 一次传送40 位数据,高位先出 8bit 湿度整数数据+ 8bit 湿度小数数据+8bit 温度整

嵌入式系统及应用 实验大纲

《嵌入式系统及应用》课程实验 一、实验课程的性质、目的和任务 性质:《嵌入式系统及应用》课程是自动化专业的专业基础课程,本实验课是该课程教学大纲中规定必修的实验教学内容。 目的和任务:通过实验环节来巩固和加深学生对嵌入式系统的理解,使学生掌握MCS51单片机和ARM的基本原理和应用技术。通过熟悉MCS51开发环境和ARM集成开发环境,使学生掌握嵌入式系统开发的一般规律和方法。在集成开发环境下,进行系统功能程序的编写和调试的训练,掌握嵌入式系统软硬件调试的一般方法和系统设计的能力。 二、实验内容、学时分配及基本要求

三、考核及实验报告 (一)考核 本课程实验为非独立设课,实验成绩占课程总成绩的15%,综合评定实验成绩。(二)实验报告 实验报告应包括: 实验名称 实验目的 实验内容与要求 设计思路(如:分析、程序流程图等) 实验步骤 实验代码(含必要注释) 实验结果分析 实验小结(本题调试过程中遇到的问题和解决方法、注意事项、心得体会等)注:综合型实验需写出系统功能、设计过程 实验报告的要求: 实验报告以文本形式递交,实验报告要书写规范、文字简练、语句通顺、图表清晰。 四、主要仪器设备 硬件:微型计算机;嵌入式系统开发平台。 软件:Keil C51;ADT 五、教材及参考书 教材

[1] 高锋.单片微型计算机原理与接口技术(第二版).北京:科学出版社,2007 [2] 自编.嵌入式系统及应用 参考书 [1] 王田苗.嵌入式系统设计与实例开发.北京:清华大学出版社,2003 [2] 陈赜.ARM9 嵌入式技术及Linux高级实践教程.北京:北京航空航天大学出版社,2005 [3] 李忠民等.ARM嵌入式VxWorks实践教程.北京:北京航空航天大学出版社,2006

嵌入式综合实验报告

《嵌入式系统综合实验》报告 学号: 姓名: Shanghai University of Engineering Science School of Electronic and Electrical Engineering

基于STM32的GPS信息显示系统 ——嵌入式系统综合实验报告 班级:0211112 姓名:褚建勤学号:021111228 班级:0211112 姓名:于心忆学号:021111216 班级:0211112 姓名:乐浩奎学号:021111232 一、产品设计要求(产品规格描述) 1 、嵌入式产品名称 GPS信息显示系统 2 、嵌入式产品目的 在学校的生活中,你经常可能需要联系不是同一间宿舍的同学,但是你不能确定他现在在什么地方,这时候全球定位系统(GPS)就可以发挥作用了,但是传统的GPS系统只能提供经纬度信息,不能直观的显示你想要找到人在何处,我们的系统就在传统的GPS的基础上添加了对应位置显示的功能,方便你更方便更快捷的找到你想找的同学 3 、嵌入式产品功能 使用GPS输入用户位置信息 GPS将相关经纬度信息反馈给主处理器 主处理器处理相关位置信息并将信息转换为对应位置在LCD上显示出来 在LCD上输出用户状态信息 4 、嵌入式产品的输入和输出 输入设备:GPS系统 输出设备:LCD 二、产品方案设计(产品设计方案) 1 2 1 )处理器选择 本系统选用基于ARMCortex-M3内核的STM32F103RB嵌入式微控制器作为处理器。 ①选用原因 A 技术因素 工作频率: 最高72MHz。 内部和外部存储器: 128K字节的闪存程序存储器,用于存放程序及数据;多达20K字节的内置SRAM,CPU能以0等待周期访问(读/写)。

嵌入式系统实验报告

实验报告 课程名称:嵌入式系统 学院:信息工程 专业:电子信息工程 班级: 学生姓名: 学号: 指导教师: 开课时间:学年第一学期

实验名称:IO接口(跑马灯) 实验时间:11.16 实验成绩: 一、实验目的 1.掌握 STM32F4 基本IO口的使用。 2.使用STM32F4 IO口的推挽输出功能,利用GPIO_Set函数来设置完成对 IO 口的配置。 3.控制STM32F4的IO口输出,实现控制ALIENTEK 探索者STM32F4开发板上的两个LED实现一个类似跑马灯的效果。 二、实验原理 本次实验的关键在于如何控制STM32F4的IO口输出。IO主要由:MODER、OTYPER、OSPEEDR、PUPDR、ODR、IDR、AFRH和AFRL等8个寄存器的控制,并且本次实验主要用到IO口的推挽输出功能,利用GPIO_Set函数来设置,即可完成对IO口的配置。所以可以通过了开发板上的两个LED灯来实现一个类似跑马灯的效果。 三、实验资源 实验器材: 探索者STM32F4开发板 硬件资源: 1.DS0(连接在PF9) 2.DS1(连接在PF10) 四、实验内容及步骤 1.硬件设计 2.软件设计 (1)新建TEST工程,在该工程文件夹下面新建一个 HARDWARE文件夹,用来存储以后与硬件相关的代码。然后在 HARDWARE 文件夹下新建一个LED文件夹,用来存放与LED相关的代码。 (2)打开USER文件夹下的test.uvproj工程,新建一个文件,然后保存在 LED 文件夹下面,保存为 led.c,在led.c中输入相应的代码。

(3)采用 GPIO_Set 函数实现IO配置。LED_Init 调用 GPIO_Set 函数完成对 PF9 和 PF10 ALIENTEK 探索者 STM32F407 开发板教程 119 STM32F4 开发指南(寄存器版) 的模式配置,控制 LED0 和 LED1 输出 1(LED 灭),使两个 LED 的初始化。 (4)新建一个led.h文件,保存在 LED 文件夹下,在led.h中输入相应的代码。 3.下载验证 使用 flymcu 下载(也可以通过JLINK等仿真器下载),如图 1.2所示: 图1.2 运行结果如图1.3所示:

嵌入式学习心得体会5篇

嵌入式学习心得体会5篇 嵌入式学习心得体会(一) 首先我声明,我是基于嵌入式系统平台级设计的,硬件这个方向我相对来讲比较有发言权,如果是其它方面所要具备的基本技能还要和我们培训中心其它专业级讲师沟通。他们的方面上我只能说是知道些,但不是太多,初级的问题也可以问我。 对于硬件来讲有几个方向,就单纯信号来分为数字和模拟,模拟比较难搞,一般需要很长的经验积累,单单一个阻值或容值的精度不够就可能使信号偏差很大。因此年轻人搞的较少,随着技术的发展,出现了模拟电路数字化,比如手机的modem 射频模块,都采用成熟的套片,而当年国际上只有两家公司有此技术,自我感觉模拟功能不太强的人,不太适合搞这个,如果真能搞定到手机的射频模块,只要达到一般程度可能月薪都在15k以上。 另一类就是数字部分了,在大方向上又可分为51/arm的单片机类,dsp类,fpga 类,国内fpga的工程师大多是在ic设计公司从事ip核的前端验证,这部分不搞到门级,前途不太明朗,即使做个ic前端验证工程师,也要搞上几年才能胜任。dsp 硬件接口比较定型,如果不向驱动或是算法上靠拢,前途也不会太大。 而arm单片机类的内容就较多,业界产品占用量大,应用人群广,因此就业空间极大,而硬件设计最体现水平和水准的就是接口设计这块,这是各个高级硬件工程师相互pk,判定水平高低的依据。而接口设计这块最关键的是看时序,而不是简单的连接,比如pxa255处理器i2c要求速度在100kbps,如果把一个i2c外围器件,最高还达不到100kbps的与它相接,必然要导致设计的失败。这样的情况有很多,比如51单片机可以在总线接lcd,但为什么这种lcd就不能挂在arm的总线上,还有arm7总线上可以外接个winband的sd卡控制器,但为什么这种控制器接不到arm9或是xscale处理器上,这些都是问题。 因此接口并不是一种简单的连接,要看时序,要看参数。一个优秀的硬件工程师应该能够在没有参考方案的前提下设计出一个在成本和性能上更加优秀的产品,靠现有的方案,也要进行适当的可行性裁剪,但不是胡乱的来,我遇到一个工程师

嵌入式linux基本操作实验一的实验报告

实验一linux基本操作实验的实验报告 一实验目的 1、熟悉嵌入式开发平台部件,了解宿主机/目标机开发模式; 2、熟悉和掌握常用Linux的命令和工具。 二实验步骤 1、连接主机和目标板;(三根线,网线直接连接实验箱和PC机,实验箱UART2连接主机的UART口)。 2、Linux命令的熟悉与操作 PC端:在PC机的桌面上打开虚拟机,并启动Linux系统,打开命令终端,操作Linux基本命令,如:查看:ls,进入目录:cd,创建文件:mkdir,删除文件:rmdir,配置网络:ifconfig,挂载:mount,设置权限:chmod,编辑器:vi,拷贝:cp等命令,要求能熟练操作。 使用方法: 1.查看:ls Ls列出文件和目录 Ls–a 显示隐藏文件 Ls–l 显示长列格式ls–al 其中:蓝:目录;绿:可执行文件;红:压缩文件;浅蓝:链接文件;灰:其他文件;红底白字:错误的链接文件 2.进入目录:cd 改变当前目录:cd 目录名(进入用户home目录:cd ~;进入上一级目录:cd -) 3.创建文件:mkdir 建立文件/目录:touch 文件名/mkdir目录名 4.删除文件:rmdir 删除空目录:rmdir目录名 5.配置网络:ifconfig 网络- (以太网和WIFI无线) ifconfig eth0 显示一个以太网卡的配置 6.挂载:mount mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘- 确定目录'/ mnt/hda2' 已经存在 umount /dev/hda2 卸载一个叫做hda2的盘- 先从挂载点'/ mnt/hda2' 退出fuser -km /mnt/hda2 当设备繁忙时强制卸载 umount -n /mnt/hda2 运行卸载操作而不写入/etc/mtab文件- 当文件为只读或当磁盘写满时非常有用 mount /dev/fd0 /mnt/floppy 挂载一个软盘 mount /dev/cdrom /mnt/cdrom挂载一个cdrom或dvdrom mount /dev/hdc /mnt/cdrecorder挂载一个cdrw或dvdrom mount /dev/hdb /mnt/cdrecorder挂载一个cdrw或dvdrom mount -o loop file.iso /mnt/cdrom挂载一个文件或ISO镜像文件

嵌入式基本实验

1.实验六(流水灯) (1) #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ void delay(void) { int i,j; for(i=0;i<=1000;i++) for(j=0;j<=1000;j++); } void main(void) { DDRA=0xff;//定义A口输出 PORTA=0x00;//灯全灭 for(;;) { delay(); PORTA=0x55;//高电平灯亮 delay(); PORTA=~PORTA; } } (2)高位到低位逐个点亮 #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ void delay() { unsigned int i,j; for(i=0;i<=100;i++) for(j=0;j<=100;j++); } void main(void) { DDRA=0xFF; PORTA=0x80; for(;;) { delay(); PORTA>>=1;//右移一位 if(PORTA==0x00)//反复循环 PORTA=0x80; }

} 低位到高位逐个点亮 #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ void delay() { unsigned int i,j; for(i=0;i<=100;i++) for(j=0;j<=100;j++); } void main(void) { DDRA=0xFF; PORTA=0x01; for(;;) { delay(); PORTA<<=1;//左移一位 if(PORTA==0x00)//反复循环 PORTA=0x01; } } (3)与按键结合 #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */ void main(void) { DDRA=0xff; DDRH=0x00; for(;;) { PORTA=PTH^0x0f;//按下时灯灭,取反后按键灯亮 } } 2.实验七(定时器延迟流水灯) (1) #include /* common defines and macros */ #include "derivative.h" /* derivative-specific definitions */

嵌入式系统综合实验一

实验名称: 姓名: 学号: 装 订 线 P.1 实验报告 课程名称: 嵌入式系统设计 指导老师:马永昌 成绩:________________ 实验名称:综合实验一dht11和人体感应传感器 实验类型:验证型 同组学生姓名:孙凡原 一、实验目的和要求(必填) 二、实验内容和原理(必填) 三、主要仪器设备(必填) 四、操作方法和实验步骤 五、实验数据记录和处理 六、实验结果与分析(必填) 七、讨论、心得 一、实验目的和要求 1.掌握字符设备驱动程序的基本结构和开发方法 2.掌握用户空间调用设备驱动的方法 3.掌握用户和内核的交互 二、实验内容和原理 1.编写温湿度传感器DHT11驱动,传输打印温湿度信息 2.编写人体感应传感器驱动,控制LED 灯亮灭 原理: 温湿度传感器DHT11: 1.引脚图 实际使用传感器没有NC 引脚 2.数据采集 a.数据总时序 用户主机发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发 专业:测控技术与仪器 姓名:颜睿 学号:3130103850 日期:2018.4.28 地点:创客空间

装订线送响应信号,送出40bit 的数据,幵触发一次信采集。 b.主机发送起始信号 连接DHT11的DATA引脚的I/O口输出低电平,且低电平保持时间不能小于18ms,然后等待DHT11 作出应答信号。 c.检测从机应答信号 DHT11 的DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后DHT11 的DATA引脚处于输出状态,输出80 微秒的低电平作为应答信号,紧接着输出80 微秒的高电平通知外设准备接收数据。 d.接收数据 (1)数据判定规则 位数据“0”的格式为:50 微秒的低电平和26-28 微秒的高电平,位数据“1”的格式为:50 微秒的低电平加70微秒的高电平。 接收数据时可以先等待低电平过去,即等待数据线拉高,再延时60us,因为60us大于28us且小于70us,再检测此时数据线是否为高,如果为高,则数据判定为1,否则为0。

嵌入式实验心得体会

嵌入式实验心得体会 嵌入式实验心得体会是计算机专业应该具备的常用知识,以下这篇范文整理个人对嵌入式系统的认识,和进行操作之后的个人体会,对操作的疑难的反思。下面是这篇嵌入式实验心得体会 嵌入式实验心得体会 学期开始,我们开始学习《嵌入式系统及应用》,由于初次接触嵌入式系统,感觉蛮难的,所以收获不是很大,很多的概念都比较模糊,等到学期结束开始做嵌入式课程设计时,真是茫然无从下手,自,从拿到设计主题后,我就从像热锅像上的蚂蚁,一个字“急”。最后实在没有办“法,逼着自己去学法 习,查资料,总算对嵌入式有了资浅层理解。浅 嵌入式系统本本身是一个相对模糊的定义义,一个手持的mp3和一个一pc104的微型工业业控制计算机都可以认为是嵌入是式系统。总体来说,嵌入式系统是“用于控,制,监视或者辅制 助操作机器器和设备的装备”。一个典典型的桌面linux系统统包括3个主要的软件层---linux-内核、cc库和应用程序代码。内核核是唯一可以完全控制硬件的层,内核驱动程序代件表应用程表序与硬件之间进行行会话。内核之上是c 库,,负责把posixapii转换为内核可以识别的形形式,然后调用内核,从应应用程序向内核传递参数。应用程序依靠驱动内核。来完成特定的任务。来在了解了基础知识之后,我了开始进行上机操作,当然开,,其中遇到很多的难题,很多东西都是第一次接触很,又没有别,人在旁边指导操作,完全凭借自己去摸操索索练习。其中的困难可想而知。然而坚持就是胜利而,,牙一咬眼一闭坚持做下去去,而通过本次实验,我感觉收获还是蛮多的。可感能我对于嵌入能式的知识学习的还是不太多,但是这习之外的东西收获颇丰。之

嵌入式实验报告

目录 实验一跑马灯实验 (1) 实验二按键输入实验 (3) 实验三串口实验 (5) 实验四外部中断实验 (8) 实验五独立看门狗实验 (11) 实验七定时器中断实验 (13) 实验十三ADC实验 (15) 实验十五DMA实验 (17) 实验十六I2C实验 (21) 实验十七SPI实验 (24) 实验二十一红外遥控实验 (27) 实验二十二DS18B20实验 (30)

实验一跑马灯实验 一.实验简介 我的第一个实验,跑马灯实验。 二.实验目的 掌握STM32开发环境,掌握从无到有的构建工程。 三.实验内容 熟悉MDK KEIL开发环境,构建基于固件库的工程,编写代码实现跑马灯工程。通过ISP 下载代码到实验板,查看运行结果。使用JLINK下载代码到目标板,查看运行结果,使用JLINK在线调试。 四.实验设备 硬件部分:PC计算机(宿主机)、亮点STM32实验板、JLINK。 软件部分:PC机WINDOWS系统、MDK KEIL软件、ISP软件。 五.实验步骤 1.熟悉MDK KEIL开发环境 2.熟悉串口编程软件ISP 3.查看固件库结构和文件 4.建立工程目录,复制库文件 5.建立和配置工程

6.编写代码 7.编译代码 8.使用ISP下载到实验板 9.测试运行结果 10.使用JLINK下载到实验板 11.单步调试 12.记录实验过程,撰写实验报告 六.实验结果及测试 源代码: 两个灯LED0与LED1实现交替闪烁的类跑马灯效果,每300ms闪烁一次。七.实验总结 通过本次次实验我了解了STM32开发板的基本使用,初次接触这个开发板和MDK KEILC 软件,对软件操作不太了解,通过这次实验了解并熟练地使用MDK KEIL软件,用这个软件来编程和完成一些功能的实现。作为STM32 的入门第一个例子,详细介绍了STM32 的IO口操作,同时巩固了前面的学习,并进一步介绍了MDK的软件仿真功能。

嵌入式实验

Part1------安装arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz 1、通过Vmware的共享文件加载压缩文件 arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz ①首先配置Vmware加载文件所在位置。 ②点击下方的Add按钮,添加文件所在文件夹,一路点击,直至完成,如图所示 2.

①进入linux系统,进入到挂载目录下 ●cd /mnt ②查看挂载目录mnt文件夹下所有目录,看是否有hgfs目录 ●ls ③进入到hgfs下查看,看是否有共享的的D盘 ●cd hgfs ④查看hgfs下文件夹的下的目录 ●Ls /*******************************************************************/ 进入到hgfs下查看,若能查看到对应目录则表示成功,如查看不到请运行下面命令 输入命令 ●cd /usr/bin ●./vmware-config-tools.pl 先后输入Y和N安装虚拟机工具即可 /****************************************************************************/ ⑤进入到挂载目录下的目标文件位置 (即一直进入到arm-2007q3-51-arm-none-linux-gnueabi-i686.tar.bz所在的目录) ●cd D/omap3530Linux/tools ⑥查看:ls ⑦然后输入命令:安装 /*********************************************************

嵌入式系统实验实验报告

嵌入式系统实验实验报告 一、实验目的 1.基本实验

. Word 资料搭建PXA270嵌入式LINUX开发软硬件环境;安装LINUX操 作系统;安装与配置建立宿主机端交叉编译调试开发环境;配置宿主机 PC 机端的minicom(或超级终端)、TFTP服务、NFS服务,使宿主PC机与PXA270开发板可以通过串口通讯,并开通TFTP 和NFS服务。 2.人机接口 键盘驱动;LCD控制;触摸屏数据采集与控制实验; 3.应用实验 完成VGA显示;Web服务器实验;网络文件传输实验;多线程应用实验。 4.扩展应用实验 完成USB摄像头驱动与视频采集;GPS实验;GSM/GPRS通讯;视频播放移植;USB蓝牙设备无线通讯;NFS文件服务器;蓝牙视频文件服务器。 5.QT实验 完成基本嵌入式图形开发环境搭建;“Hello world!”QT初探;创建一个窗口并添加按钮;对象通信:Signal和Slot;菜单和快捷键;工具条和状态栏;鼠标和键盘事件;对话框;QT的绘图;俄罗斯方块;基于QT的GSM手机在嵌入式LINUX下的设计与实现。 二、实验内容 1.人机接口实验 实验十九键盘驱动实验 ?实验目的:矩阵键盘驱动的编写

?实验内容:矩阵键盘驱动的编写 ?作业要求:完成键盘加减乘除运算 ?实验作业源码及注释: #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE #INCLUDE #DEFINE DEVICE_NAME “/DEV/KEYBOARD” INT MAIN(VOID){ INT FD; INT RET; UNSIGNED CHAR BUF[1]; INT I,F,J; DOUBLE X; INT A[2]={0}; CHAR PRE_SCANCODE=0XFF; FD=OPEN(DEVICE_NAME,O_RDWR); IF(FD==-1)PRINTF(“OPEN DEVICE %S ERROR\N”,DEVICE_NAME); ELSE{ BUF[0]=0XFF; I=0;F=0; WHILE(1){ READ(FD,BUF,1);

嵌入式实验报告心得

嵌入式实验报告心得 篇一:嵌入式系统原理实验总结报告 嵌入式系统原理实验总结报告 车辆座椅控制系统实验 XX/5/23 嵌入式系统原理实验总结报告 一、技术性总结报告 (一)题目:车辆座椅控制系统实验(二)项目概述: 1.为了实现车辆座椅控制的自动化与智能化。 2.方便用户通过智能手机与车载传感器之间的联动。 3.使车辆作为当今物联网中重要的一个节点发挥作用。 4.通过车辆座椅控制系统实验实现对嵌入式系统原理课程的熟练掌握与对嵌入式系统原理知识的深化记忆。 5. 加强本组学生对嵌入式系统原理的更深层次的理解与运用。 (三)技术方案及原理 本次试验分为软件、硬件两个部分。 1.软件部分。 A.智能手机部分,包括通过智能手机对座椅的控制部分、手机所携带的身份信息部分。 本部分软件使用Java编写,其程序部分为:主程序:package ;

import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ; import ;import ; import ; import ; public class MainActivity extends ActionBarActivity { private Button Up = null; private Button Left = null; private Button Dowm = null; private Button Right = null; private Socket socket = null; private static final String HOST = "";private static final int PORT = 10007; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(; initControl();} private void initControl() {

嵌入式实验

实验一、dip_switch 按键实验 一、实验目的 1.了解DIP_SWITCH 的用处。 2.了解C6748 连接的控制DIP_SWITCH 方法。 3.熟悉CCS 操作,学会使用工程,学习编译和下载、运行程序。 二、实验设备 1.PC 兼容机一台;操作系统为WindowsXP 或者以上版本。 2.ICETEK-C6748-AE 实验箱一台。如无实验箱则配备ICETEK-XDS100v2+仿真器和ICETEK–C6748-A,+5V 电源一只。 3.USB 连接电缆一条。 三、实验原理 ICETEK-C6748-AE 通过GPIO 来控制拨码开关的,通过对对应的GPIO 引脚的读,可以知道拨码开关的状态,再通过对GPIO 控制led 的显示,把拨码开关的状态显示出来。 2.实验程序流程图:

四、实验步骤 1.实验准备: (1) 连接实验箱: (2) 准备进行硬件仿真: (3) 检查ICETEK- C6748-KB 板上跳线选择器U15 为0000。 2.启动Code Composer Studio v5 3.打开工程文件: 工程文件目录为:C:\ICETEK\ICETEK-C6748-AE\Lab0301-Led_dip 打开源程序LED.c 阅读程序,理解程序内容。 4.点击图标,ccs 会自动连接,编译和下载程序。 5.运行程序,观察结果。 6.退出CCS。 五、实验结果 [C674X_0] ------------------------------------------------------------ C6748-A LED and Dip Switch Test Test Description ---------------- this code will begin by flashing the leds, then it will sit in a forever loop checking the dip switches. when a change in the dip switches is detected, a message will be printed to stdout and an led will be toggled. ------------------------------------------------------------ Initialize the Required BSL Modules ----------------------------------- Execute Test ------------ flash led patterns loop forever printing dips switch status and setting leds based on dips 拨动相应的拨码开关 SW1,对应的 led 灯会跟着亮灭 六、问题与思考 拨码开关用到的gpio 口是与EMIFA 数据线复用的,应用时注意避免硬件间的冲突。七、实验心得 通过这次实验我们了解了dip_switch 按键的使用方法,熟悉了CCS 操作,了解了C6748 连接的控制DIP_SWITCH 方法。 实验二.RTC 实验 一、实验目的 1.了解RTC 的用途。 2.了解C6748 连接的控制的访问RTC 的方法。 3.熟悉CCS 操作,学会使用工程,学习编译和下载、运行程序。 二、实验设备 1.PC 兼容机一台;操作系统为WindowsXP 或者以上版本。 2.ICETEK-C6748-AE 实验箱一台。如无实验箱则配备ICETEK-XDS100v2+仿真器和ICETEK–C6748-A,+5V 电源一只。 3.USB 连接电缆一条。

嵌入式应用开发实验指导书 (1)

实验一基本接口实验(一) [实验设备] 1.JXARM9-2410教学实验箱 2.ADT1000仿真器和ADT IDE集成开发环境 3.串口、并口连接线 [实验目的] 1.掌握ARM的串行口工作原理,编程实现ARM的UART通讯; 2.掌握嵌入式系统中断的处理流程和ARM中断编程; 3.在ADT环境下如何建立工程,对工程进行正确的设置。添加相应文件(汇编、脚本、.c 源文件等) [实验内容一] 实现查询方式串口的收发功能。接收来自串口(通过超级终端)的字符并将接收到的字符发送到超级终端。 [预备知识] 1.了解ADT集成开发环境的基本功能 2.学习串口通讯的基本知识 3. 熟悉S3C2410串口有关的寄存器 [基础知识] 串行通信接口电路组成 1.可编程的串行接口芯片 2.波特率发生器 3.EIA与TTL电平转换器 4.地址译码电路 通信协议: 1.异步协议 2.同步协议 异步串行通讯 异步串行方式是将传输数据的每个字符一位接一位(例如先低位、后高位)地传送。 数据的各不同位可以分时使用同一传输通道,因此串行I/O 可以减少信号连线,最少用一对线即可进行。 接收方对于同一根线上一连串的数字信号,首先要分割成位,再按位组成字符。为了恢复发送的信息,双方必须协调工作。 在微型计算机中大量使用异步串行I/O 方式,双方使用各自的时钟信号,而且允许时钟频率有一定误差,因此实现较容易。但是由于每个字符都要独立确定起始和结束(即每个字符都要重新同步),字符和字符间还可能有长度不定的空闲时间,因此效率较低。 异步串行通信中的字符传送格式

开始前,线路处于空闲状态,送出连续“1”。传送开始时首先发一个“0” 作为起始位,然后出现在通信线上的是字符的二进制编码数据。 每个字符的数据位长可以约定为5位、6位、7位或8位,一般采用ASCII编码。后面是奇偶校验位,根据约定,用奇偶校验位将所传字符中为“1”的位数凑成奇数个或偶数个。也可以约定不要奇偶校验,这样就取消奇偶校验位。 最后是表示停止位的“1”信号,这个停止位可以约定持续1 位、1.5 位或2 位的时间宽度。 至此一个字符传送完毕,线路又进入空闲,持续为“1”。经过一段随机的时间后,下一个字符开始传送才又发出起始位。 每一个数据位的宽度等于传送波特率的倒数。微机异步串行通信中,常用的波特率为110,150,300,600,1200,2400,4800,9600 等。 DB-25 DB-9引脚定义 DB-25 DB-9引脚说明

嵌入式心得体会

对于电焊,虽然一点都不陌生,但亲手操作的机会却只有几次,因此我很庆幸能够有这样的焊接机会,进行这样的实践。 焊接看似容易,实则需要长时间练习才能掌握。刚开始的时候,手一直在抖,尤其这次焊的还是贴片电容、电阻,原器件比以前焊的小好多,用镊子的手一抖就夹不住了,拿着烙铁的手抖得都不容易将器件焊上,焊出来的焊点也特别难看,在不断尝试,不断挑战自我的过程中,我的手不抖了,也基本能掌握锡的用量了,当焊点终于不再“丑不忍睹”的时候,对焊接也没有当初的恐惧了。对自己的动手能力也有了信心。 在焊接的过程中我学到了许多以前我不知道的东西,比如,以前我只知道有电烙铁,但不知道它还有好多种类,有单用式、两用式、调温式、恒温式、直热式、感应式、内热式和外热式。松香可以将多余的锡弄下来,用酒精可以把板擦的干净些。通过视频和查找资料,知道了在焊不同的器件时用的电烙铁的头不同,比如在焊引脚时要用尖头,焊CPU时要用刀口,为防止锡将焊引脚的小孔堵住,用松香把纸条粘在小孔上,把小孔盖住,把CPU的引脚对齐,用锡先涂满两边,固定好芯片,在焊另外两边,然后用尖头的电烙铁沾着松香将多余的锡弄下来。 本次课程设计的是信号发生器,信号发生器在EDA课程,数字信号处理课程中都曾涉及,所以还是较为熟悉的,在设计之前查阅了一些相关书籍,也从网上查找了一些相关资料,程序代码中运用到了C语言,将程序加入到嵌入式结构框架中,进行定义变量,端口,设定所用的GPIO参数等等。 在焊接的过程中我不仅学到了知识,而且让我深深地体会到一个团队中各成员合作的重要性,要善于团队合作,在进行团队合作的时候,还要耐心听取每个成员的意见,每个人都有长处和短处,只有在包容别人的同时我们才可以取长补短,不断完善和不断进步,交到更多的朋友,学到更多的知识。同时还让我明白:做任何事都要一心一意,严谨认真,反复琢磨,不能畏惧,要有信心和勇气,一定要做好充分的准备。不能盲目去做,要坚持,还要学会反思跟总结,我们不是为了完成任务而完成,这还是一个学习跟提高的过程。 在大学里学的不是知识,而是一种叫做自学的能力。在这个知识爆炸的时代,知识更新太快,靠原有的一点知识肯定不行。以后的工作中肯定会用到一些新的

嵌入式实验报告心得

竭诚为您提供优质文档/双击可除 嵌入式实验报告心得 篇一:嵌入式系统各实验实验报告 嵌入式系统设计实验报告 班级:学号:姓名:成绩:指导教师: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 1.实验一 1.1实验名称 博创up-net3000实验台基本结构及使用方法 1.2实验目的 熟悉up-net3000实验平台的核心硬件电路和外设 通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态 1.3实验环境 硬件:ARm嵌入式开发平台、用于ARm7TDmI的JTAg仿真器、pc机 pentium100以上。 软件:pc机操作系统windows、ADs1.2集成开发环境、

仿真器驱动程序、 超级终端通讯程序。 1.4实验内容及要求 一、内容 ①嵌入式系统开发流程概述 ②熟悉up-net3000实验平台的核心硬件电路和外设 ③ARmJTAg的安装与使用 ④通过操作系统自带的通讯软件超级终端,检验各个外设的工作状态 二、要求 通过本次课程对各个外设的了解,为今后各个接口实验打下基础。 1.5实验设计与实验步骤 一、JTAg的驱动程序的安装: 执行armJtag目录下armJtagsetup.exe程序,选择安装目录,安装JTAg软件。 二、通过通讯软件超级终端来检验外设的工作状态: ①运行windows系统下的超级终端(hyperTerminal)应用程序,新建一个通信终端。为所建超级终端取名为arm,可以为其选择第一个图标。单击“确定”按钮。 ②在接下来的对话框中选择ARm开发平台实际连接的pc 机串口(如com1),按确定按钮后出现属性对话框,设置通

嵌入式系统实验报告

嵌入式系统实验报告文件排版存档编号:[UYTR-OUPT28-KBNTL98-UYNN208]

大连理工大学 本科实验报告 课程名称:嵌入式系统实验 学院(系):电子信息与电气工程学部 专业:自动化 班级: 0804 学号: 学生姓名:何韬 2011年 11月 18日 大连理工大学实验报告 学院(系):电信专业:自动化班级: 0804 姓名:何韬学号:组: ___ 实验时间: 2011-11-12 实验室: d108 实验台: 指导教师签字:成绩: 实验二ARM的串行口实验 一、实验目的和要求 见预习报告 二、实验原理和内容 见预习报告 三、主要仪器设备

硬件:ARM嵌入式开发平台、用于ARM7TDMI 的JTAG 仿真器、PC机Pentium100 以上、串口线。 软件:PC 机操作系统win98、Win2000 或WinXP 、ARM SDT 或集成开发环境、仿真器驱动程序、超级终端通讯程序。 四、实验步骤 见预习报告 五、核心代码 在主函数中实现将从串口0接收到的数据发送到串口0() int main(void) { char c1[1]; char err; ARMTargetInit(); 通过调用OSTaskCreate()或OSTaskCreateExt()创建至少一个任务; . OSStart(); /ucos-ii/" /* uC/OS interface */ #include "../ucos-ii/add/" #include "../inc/" #include "../inc/sys/" #include "../src/gui/" #include <> #include <>

嵌入式系统实验报告

郑州航空工业管理学院 嵌入式系统实验报告 (修订版) 20 – 20第学期 赵成,张克新 院系: 姓名: 专业: 学号: 电子通信工程系 2014年3月制

实验一ARM体系结构与编程方法 一、实验目的 了解ARM9 S3C2410A嵌入式微处理器芯片的体系结构,熟悉ARM微处理器的工作模式、指令状态、寄存器组及异常中断的概念,掌握ARM指令系统,能在ADS1.2 IDE中进行ARM汇编语言程序设计。 二、实验内容 1.ADS1.2 IDE的安装、环境配置及工程项目的建立; 2.ARM汇编语言程序设计(参考附录A): (1)两个寄存器值相加; (2)LDR、STR指令操作; (3)使用多寄存器传送指令进行数据复制; (4)使用查表法实现程序跳转; (5)使用BX指令切换处理器状态; (6)微处理器工作模式切换; 三、预备知识 了解ARM嵌入式微处理器芯片的体系结构及指令体系;熟悉汇编语言及可编程微处理器的程序设计方法。 四、实验设备 1. 硬件环境配置 计算机:Intel(R) Pentium(R) 及以上; 内存:1GB及以上; 实验设备:UP-NETARM2410-S嵌入式开发平台,J-Link V8仿真器; 2. 软件环境配置 操作系统:Microsoft Windows XP Professional Service Pack 2; 集成开发环境:ARM Developer Suite (ADS) 1.2。 五、实验分析 1.安装的ADS1.2 IDE中包括和两个软件组件。在ADS1.2中建立类型的工程,工程目标配置为;接着,还需要对工程进行、及链接器设置;最后,配置仿真环境为仿真方式。 2.写出ARM汇编语言的最简程序结构,然后在代码段中实现两个寄存器值的加法运算,给出运算部分相应指令的注释。 ; 文件名:

嵌入式心得体会解读

嵌入式心得体会 嵌入式心得体会一:嵌入式学习心得体会 4月10号,为期一个阶段的Linux开发基础培训课程圆满结束,回首这些天所留下的点点滴滴,感触深深,学习上知识点的积累,灵活运用的过程中感受到了Linux操作的快速高效性能,这也是我所追求的效率! 当初初涉培训课程的第一门课程时,都说Linux操作很繁琐复杂,心里总有些顾忌,带着种种不安与些许拼博的决心,开始了自我提升阶段的“充电”,由徐海兵老师教授我们基础课程的培训,我们则像着小学生般认真的记着笔记,仔细听着并学会如何去在实践中运用所学的Linux下的各种强大的命令集。 在Unit 1中,徐老师详细生动的为我们讲述了有关Linux的诞生、初成长以及辉煌的发展至今,今后应用范围则愈来愈广泛,讲解了为Linux这个伟大的OS做出巨大贡献的一位位出色的、伟大的人物,他们那种学习钻研的精神、锲而不舍的信念、勇于把握住难得的机会,从小处着手,踏踏实实的创造出了对人类科技发展做出卓越贡献的Linux(Unix)系统,他们的种种,都值得我们去深刻反省、刻苦学习、传承并永远发展下去。 查看ip地址和重启网络服务是我学的第一个命令: ifconfig eth0、ifconfig eth0 IP 地址、service network restart。了解到远程登录软件可用xmanager。 secureCRT是我们常用的,安装好后利用其登录到了Red hat Linux,需要知道Linux 主机的ip 地址。徐老师为我们介绍了重要内容:SHELL,即运行程序的程序,如echo $$SHELL可查看SHELL的环境变量是csh还是bash。指令pwd可查看当前所在路径,passwd:更改Linux下的密码,仅限root用户有此权限,当然我们是利用虚拟机VMware 程序来运行Linux OS的,懂得了如何设置虚拟机的网卡设置、暂停、恢复、全屏等。 简单的学习后进入Unit 2,命令行的句法让我懂得了用法规则,一系列的命令功能强大:

相关主题
文本预览
相关文档 最新文档