实习报告嵌入式.docx
《实习报告嵌入式.docx》由会员分享,可在线阅读,更多相关《实习报告嵌入式.docx(15页珍藏版)》请在冰豆网上搜索。
实习报告嵌入式
成绩
学生实习报告
实习名称
院部名称
专业
班级
学生姓名
学号
实习地点
指导教师
实习起止时间:
2011年7月4日至2011年7月29日
实习报告
前言
中软国际有限公司(中软国际)是根植中国、服务全球的IT服务提供商,致力于为遍及全球的客户提供全面的服务,打造中国智造综合平台。
中软国际总部位于北京,在美国、日本、香港以及中国大陆25个主要城市设有35家分子公司或办事处,员工突破10000人。
年营业额逾10亿元人民币(2007财年)。
2007年和2008年中软国际对欧美软件外包业务位列全国第一(IDC统计数据)。
集团业务涵盖以咨询为驱动的解决方案、以专业化为准则的ITO和BPO外包服务和以人才供链为导向的培训服务,包括咨询服务、软件开发、系统集成、软件测试、软件本地化、企业应用平台建设与维护、IT服务外包以及业务流程外包。
凭借集团的全球分布,中软国际能够充分运用全球资源和自身领先的技术实力帮助客户应对不断快速变化的商业挑战。
凭借中软国际在中国市场所拥有的独特领导地位和全球提交能力,除能为客户提供“传统”外包服务及信息解决方案外,还能以其国内、海外市场的互动能力帮助客户在中国或海外开拓新的业务机会。
一、实习目的
1、掌握嵌入式微处理器的结构与原理
2、熟悉并掌握嵌入式Linux操作系统的操作
3、熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。
二、实习时间
2010年07月04号~07月29号,具体安排如下表:
第一周
1、嵌入式技术发展现在及未来。
2、实习任务布置。
3、实习嵌入式硬件平台环境熟悉。
4、C语言基础强化。
第二周
1、Linux程序设计。
2、多进程和多线程模式下的程序设计。
3、系统资源控制程序设计。
第三周
1、ARM的体系结构与汇编语言。
2、ARM的GNU交叉编译工具和ADS应用与调试。
3、LCD驱动原理的讲解。
4、PWM驱动原理的讲解。
第四周
1、嵌入式Linux下驱动开发。
2、TFTLCD驱动开发。
动手实验:
驱动程序的编写与调试。
三、实习地点
江苏省无锡市无锡新区新安镇震泽路5号江苏软件外包产业园处子座B座
四、实习单位和部门
实习单位:
无锡中软国际信息技术培训有限公司
实习部门:
无锡中软国际信息技术培训有限公司
五、实习内容
来到中软国际,主要实习方向为嵌入式开发,细化为LCD驱动开发。
所谓嵌入式系统是一台特殊用途的计算机,该计算机由它控制的设备完全封装。
驱动这些系统的软件称为嵌入式软件。
通用个人计算机可以执行多个任务,接受新的任务,并可由用户编程;而嵌入式系统有特定的需求,只能执行有限数量的预定义任务,嵌入式系统的优势在于,它们可以进行优化来进一步改善性能,并可以减小规模和成本。
由于存在这些优势,嵌入式系统的使用越来越普及,因而使日常生活的各个方面(包括通讯、娱乐和工业控制系统)得到充分的改善。
为了成功的进行嵌入式开发,我们做了如下准备:
C语言的强化,linux系统下的操作。
linux常用命令:
cd【目录】:
切换到指定的目录,可以是相对路径或者是绝对路径。
绝对路径是以“/”开头,从目录的最顶层开始列出目录路径。
相对路径不用“/”开头,只列出当前工作目录以下的目录路径。
ls【选项】【文件目录列表】:
显示指定工作目录中所包含的内容的指令是ls,要说明的是ls命令列出文件的名字,而不是文件的内容。
mkdir【选项】路径:
“路径”可以是一系列,此时若路径中的目录不存在,则系统自动创建那些不存在的目录。
Pwd:
显示的是当前工作目录的绝对路径。
cp【选项】源文件目标文件或目标目录
mv【选项】文件列表目录
rm【选项】文件列表:
可从文件系统中删除文件及整个目录。
cat【选项】文件列表:
用来将几个文件的内容相连接,并显示到终端上。
Clear:
清除屏幕上的信息。
kill进程号:
删除执行中的进程。
tar[选项]文件或者目录:
文件打包解包。
ifconfig网络接口【选项】【地址】:
配置网络接口的地址、网络掩码等。
gcc[选项]要编译的文件[选项][目标文件]:
编译可执行文件。
(2)在VMware中安装Linux,New—>VirtualMachine…->选择“custom”下一步->下一步,出现的界面中选择安装路径,必须注意待安装盘有足够的空间。
因为后面安装的RedHat系统是桌面版本,它对内存还是有一定的要求,在机器内存较大的情况下,尽可能给RedHat多分配一些内存,此处分配的内存是256MB。
下面可以选择默认选择,最后单击”Close”,此时虚拟机已经建立起来了。
接下来光盘配置使用我们下载的RedHat是iso文件,单击OK按钮。
下面就可以启动安装RedHat系统了。
首先进行语言的选择,选择中文,并单击前进按钮。
接下来选择时区,此处选择上海时区,单击前进按钮。
在进行用户帐户和主机命名设置时,我用“zxy”作为登录名且同时作为这台计算机的名称。
安装向导的最后一步将用户安装过程中所做过的配置信息再次反馈给用户,确认信息。
最后点击“安装”即可。
准备工作做好之后,开始进行嵌入式开发,以下是开发过程中所做的练习。
作业一(大小端)
#include
typedefuniontag_MYUNION
{charch[4];
intvalue;
}MYUNION;
intmain()
{MYUNIONmyunion;
myunion.value=0x12345678;
if(myunion.ch[0]==0x12)
printf("bigendian\n");
elsemyunion.ch[0]==0x78;
printf("littleendian\n");
return0;}
作业二(多线程)
#include
#include
#include
intmain()
{
pid_tpid;
char*message;
intn;
printf("forkprogramstarting\n");
pid=fork();
switch(pid)
{
case-1:
perror("forkfailed");
exit
(1);
case0:
message="child:
";
n=100;
break;
default:
sleep
(1);
message="parent:
";
n=100;
break;
}
for(n=1;n<100;n+=2)
{
printf("%s",message);
printf("%d,%d\n",n,n+1);
sleep
(1);
}
exit(0);
}
作业三(大小字母输出及ASC码)
#include
#include
#include
intmain()
{
pid_tpid;
char*message;
intn;
printf("forkprogramstarting\n");
pid=fork();
switch(pid)
{
case-1:
perror("forkfailed");
exit
(1);
case0:
message="child:
";
n=100;
break;
default:
sleep
(1);
message="parent:
";
n=100;
break;
}
for(n=1;n<100;n+=2)
{
printf("%s",message);
printf("%d,%d\n",n,n+1);
sleep
(1);
}
exit(0);
}
作业四(字母排序)
#include
#include
intmain()
{
intj=65;
inti;
chara[27];
char*b;
charreadbuf[27]={0};
charreadbuf1[27]={0};
for(i=0;i<26;i++)
{a[i]=j;
j++;
}
a[i]='\0';
FILE*fp;
FILE*fp1;
FILE*fp2;
fp=fopen("zmpx.txt","w");
char*buf=a;
if(fp==NULL)
{printf("fileopenfailed.\n");
return0;
}
fwrite(buf,strlen(buf),1,fp);
fclose(fp);
fp=fopen("zmpx.txt","r");
if(fp==NULL)
{
printf("fileopenfailed.\n");
return0;
}
fread(readbuf,strlen(buf),1,fp);
fp1=fopen("zhengxu.txt","w");
fwrite(readbuf,strlen(buf),1,fp1);
fclose(fp1);
fp=fopen("zmpx.txt","r");
if(fp==NULL)
{
printf("fileopenfailed.\n");
return0;
}
fread(readbuf,strlen(buf),1,fp);
for(i=0;i<26;i++)
{fseek(fp,(-i-1),SEEK_END);
fread(b,1,1,fp);
readbuf1[i]=*b;}
fp2=fopen("daoxu.txt","w");
fwrite(readbuf1,strlen(buf),1,fp2);
fclose(fp2);
}
当然,嵌入式开发仅仅学习C语言是远远不够的。
于是在我们已有的单片机基础之上,又深入学习了汇编语言。
从而,嵌入式开发的准备工作,我们已基本完成。
在接下来的两周里,我们开始接触TQ2440开发板。
刚接触开发板,我们自己对照使用手册开始接线。
然后安装USB驱动,虚拟光驱,还有像SourceInsight3.5;CodeWarriorforARM;SecureCRTDeveloperSuite;TFTPServer以及DNW这些软件。
首先我们做的有:
1.SecureCRT的设置。
2.设置DNW软件。
3.安装USB下载驱动安装完毕USB下载驱动后,打开DNW软件,就可以在DNW软件的顶上看到USB连接OK的字样同时可以在“设备管理器”看到刚刚安装的USB驱动此时就可以使用USB下载u-boot、操作系统和文件系统了。
4.安装GIVEIO驱动,
Step1:
首先打开PC的“控制面板”界面,双击“添加硬件”图标,进入到添加硬件的界面。
Step2:
然后点击“下一步”继续。
系统会自动搜索硬件的。
Step3:
过一会会完成搜索,进入到下面第二图的界面,选择“是,我已经连接了此硬件”。
Step4:
然后点击“下一步”继续出现“安装向导”,这里选择“安装我手动从列表选择的硬件(高级)”选项。
Step5:
然后点击“下一步”继续。
在硬件列表中找到“端口(COM和LPT)”选项,然后点击“下一步”继续。
Step6:
点击“从磁盘安装”选项后继续。
Step7:
从“磁盘安装”界面中选择“浏览”选项。
Step8:
然后定位到刚才的GIVEIO目录下面,找到“GIVEIO.inf”文件,点击“打开”继续。
Step9:
然后回到“从磁盘安装”界面,点击“确定”继续回到驱动设备安装的界面,选择“giveio”设备后,点击“下一步”继续出现“向导准备安装您的硬件”界面中:
。
Step10:
点击“下一步”继续然后出现驱动未经过微软认证的界面,点击“仍然继续”选项继续
Step11:
点击“完成”选项后就完成驱动安装了。
Step12:
在“设备管理器”中您可以看到新安装的驱动。
5.TFTP代理软件设置
至此,软件安装,设置基本完成。
接下来就是烧写驱动代码和图片代码。
由于代码过于庞大,仅截图一段,仅供参考。
/**************************************************************
在LCD屏幕上指定坐标点画一个指定大小的图片
**************************************************************/
voidPaint_Bmp(intx0,inty0,inth,intl,unsignedcharbmp[])
{
intx,y;
U32c;
intp=0;
for(y=y0;y{
for(x=x0;x{
c=bmp[p+1]|(bmp[p]<<8);
if(((x0+x)LCD_BUFFER[y0+y][x0+x]=c;
p=p+2;
}
}
}
/**************************************************************
**************************************************************/
voidLcd_TFT_Init(void)
{
Lcd_Init();
Lcd_PowerEnable(0,1);
Lcd_EnvidOnOff
(1);//turnonvedio
Lcd_ClearScr((0x00<<11)|(0x00<<5)|(0x00));
#defineLCD_BLANK12
#defineC_UP(LCD_XSIZE_TFT-LCD_BLANK*2)
#defineC_RIGHT(LCD_XSIZE_TFT-LCD_BLANK*2)
#defineV_BLACK((LCD_YSIZE_TFT-LCD_BLANK*4)/6)
Glib_FilledRectangle(LCD_BLANK,LCD_BLANK,(LCD_XSIZE_TFT-LCD_BLANK),(LCD_YSIZE_TFT-LCD_BLANK),0x0000);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*0),(C_RIGHT),(LCD_BLANK*2+V_BLACK*1),0x001f);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*1),(C_RIGHT),(LCD_BLANK*2+V_BLACK*2),0x07e0);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*2),(C_RIGHT),(LCD_BLANK*2+V_BLACK*3),0xf800);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*3),(C_RIGHT),(LCD_BLANK*2+V_BLACK*4),0xffe0);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*4),(C_RIGHT),(LCD_BLANK*2+V_BLACK*5),0xf81f);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*5),(C_RIGHT),(LCD_BLANK*2+V_BLACK*6),0x07ff);//fillaRectanglewithsomecolor
Glib_Line(LCD_BLANK,LCD_BLANK,(LCD_XSIZE_TFT-LCD_BLANK),(LCD_YSIZE_TFT-LCD_BLANK),0x0000);
Glib_Line(LCD_BLANK,(LCD_YSIZE_TFT-LCD_BLANK),(LCD_XSIZE_TFT-LCD_BLANK),LCD_BLANK,0x0000);
Glib_Line((LCD_XSIZE_TFT/2),(LCD_BLANK*2+V_BLACK*0),(LCD_XSIZE_TFT/2),(LCD_BLANK*2+V_BLACK*6),0x0000);
}
voidLcd_TFT_Test(void)
{
Uart_Printf("\nTestTFTLCD!
\n");
Lcd_ClearScr((0x00<<11)|(0x00<<5)|(0x00));//clearscreen
Uart_Printf("\nDisplayBlack!
Pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
Lcd_ClearScr((0x1f<<11)|(0x3f<<5)|(0x1f));//clearscreen
Uart_Printf("DisplayWhite!
Pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
Lcd_ClearScr((0x00<<11)|(0x00<<5)|(0x1f));//clearscreen
Uart_Printf("DisplayBlue!
Pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
Lcd_ClearScr((0x00<<11)|(0x3f<<5)|(0x00));//clearscreen
Uart_Printf("DisplayGreen!
Pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
Lcd_ClearScr((0x1f<<11)|(0x00<<5)|(0x00));//clearscreen
Uart_Printf("DisplayRed!
Pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
/*Lcd_ClearScr((0x00<<11)|(0x3f<<5)|(0x1f));//clearscreen
Uart_Printf("LCDclearscreenisfinished!
pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
Lcd_ClearScr((0x1f<<11)|(0x00<<5)|(0x1f));//clearscreen
Uart_Printf("LCDclearscreenisfinished!
pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
Lcd_ClearScr((0x1f<<11)|(0x3f<<5)|(0x00));//clearscreen
Uart_Printf("LCDclearscreenisfinished!
pressanykeytocontinue!
\n");
Uart_Getch();//waituartinput
*/
Lcd_ClearScr(0xffff);//fillallscreenwithsomecolor
#defineLCD_BLANK12
#defineC_UP(LCD_XSIZE_TFT-LCD_BLANK*2)
#defineC_RIGHT(LCD_XSIZE_TFT-LCD_BLANK*2)
#defineV_BLACK((LCD_YSIZE_TFT-LCD_BLANK*4)/6)
Glib_FilledRectangle(LCD_BLANK,LCD_BLANK,(LCD_XSIZE_TFT-LCD_BLANK),(LCD_YSIZE_TFT-LCD_BLANK),0x0000);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*0),(C_RIGHT),(LCD_BLANK*2+V_BLACK*1),0x001f);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*1),(C_RIGHT),(LCD_BLANK*2+V_BLACK*2),0x07e0);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*2),(C_RIGHT),(LCD_BLANK*2+V_BLACK*3),0xf800);//fillaRectanglewithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*3),(C_RIGHT),(LCD_BLANK*2+V_BLACK*4),0