实习报告_嵌入式

学 生 实 习 报 告

实 习 名 称           

         

         

班       级   

学 生 姓 名                 

学       号             

实 习 地 点       

指 导 教 师                  

实习起止时间:20##年 7月 4日至20##年 7月29日

 
 

实习报告

前言

中软国际有限公司(中软国际)是根植中国、服务全球的IT服务提供商,致力于为遍及全球的客户提供全面的服务,打造中国智造综合平台。中软国际总部位于北京,在美国、日本、香港以及中国大陆25个主要城市设有35家分子公司或办事处,员工突破10000人。年营业额逾10亿元人民币(2007财年)。20##年和20##年中软国际对欧美软件外包业务位列全国第一(IDC统计数据)。

集团业务涵盖以咨询为驱动的解决方案、以专业化为准则的ITO和BPO外包服务和以人才供链为导向的培训服务,包括咨询服务、软件开发、系统集成、软件测试、软件本地化、企业应用平台建设与维护、IT服务外包以及业务流程外包。

凭借集团的全球分布,中软国际能够充分运用全球资源和自身领先的技术实力帮助客户应对不断快速变化的商业挑战。凭借中软国际在中国市场所拥有的独特领导地位和全球提交能力,除能为客户提供“传统”外包服务及信息解决方案外,还能以其国内、海外市场的互动能力帮助客户在中国或海外开拓新的业务机会。

一、 实习目的

1、掌握嵌入式微处理器的结构与原理

2、熟悉并掌握嵌入式Linux操作系统的操作

3、熟悉嵌入式软件开发流程并至少做一个嵌入式软件项目。

二、 实习时间

20##年07月04号~07月29号,具体安排如下表:

三、实习地点

     江苏省无锡市无锡新区新安镇震泽路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—>Virtual Machine…->选择“custom”下一步->下一步,出现的界面中选择安装路径,必须注意待安装盘有足够的空间。因为后面安装的RedHat系统是桌面版本,它对内存还是有一定的要求,在机器内存较大的情况下,尽可能给RedHat多分配一些内存,此处分配的内存是256MB。下面可以选择默认选择,最后单击”Close”,此时虚拟机已经建立起来了。

接下来光盘配置使用我们下载的RedHat是iso文件,单击OK按钮。下面就可以启动安装RedHat系统了。首先进行语言的选择,选择中文,并单击前进按钮。接下来选择时区,此处选择上海时区,单击前进按钮。在进行用户帐户和主机命名设置时,我用“zxy”作为登录名且同时作为这台计算机的名称。安装向导的最后一步将用户安装过程中所做过的配置信息再次反馈给用户,确认信息。最后点击“安装”即可。

准备工作做好之后,开始进行嵌入式开发,以下是开发过程中所做的练习。

作业一(大小端)

#include

typedef union tag_MYUNION

{char ch[4];

int value;

}MYUNION;

int main()

{MYUNION myunion;

myunion.value=0x12345678;

if(myunion.ch[0]==0x12)

printf("big endian\n");

else myunion.ch[0]==0x78;

printf("little endian\n");

return 0;}

作业二(多线程)

#include

#include

#include

int main()

{

pid_t pid;

char *message;

int n;

printf("fork program starting\n");

pid = fork();

switch(pid)

{

case -1:

perror("fork failed");

exit(1);

case 0:

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

int main()

{

pid_t pid;

char *message;

int n;

printf("fork program starting\n");

pid = fork();

switch(pid)

{

case -1:

perror("fork failed");

exit(1);

case 0:

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

int main()

{

int j=65;

int i;

char a[27];

char *b;

char readbuf[27]={0};

char readbuf1[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("file open failed.\n");

return 0;

}

fwrite(buf,strlen(buf),1,fp);

fclose(fp);

fp=fopen("zmpx.txt","r");

if(fp==NULL)

{

printf("file open failed.\n");

return 0;

}

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("file open failed.\n");

return 0;

}

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驱动,虚拟光驱,还有像Source Insight 3.5;CodeWarrior for ARM;SecureCRT Developer Suite;TFTP Server以及DNW这些软件。

首先我们做的有:

1.SecureCRT的设置。

2.设置DNW软件。

3.安装USB下载驱动安装完毕USB下载驱动后,打开DNW软件,就可以在DNW软件的顶上看到USB连接OK的字样同时可以在“设备管理器”看到刚刚安装的USB驱动此时就可以使用USB下载u-boot、操作系统和文件系统了。

4.安装GIVEIO驱动,

Step 1:首先打开PC的“控制面板”界面,双击“添加硬件”图标,进入到添加硬件的界面。

Step 2:然后点击“下一步”继续。系统会自动搜索硬件的。

Step 3:过一会会完成搜索,进入到下面第二图的界面,选择“是,我已 经连接了此硬件”。

Step 4:然后点击“下一步”继续出现“安装向导”,这里选择“安装我手动从列表选择的硬件(高级)”选项。

Step 5:然后点击“下一步”继续。在硬件列表中找到“端口(COM和LPT)”选项,然后点击“下一步”继续。

Step 6:点击“从磁盘安装”选项后继续。

Step 7:从“磁盘安装”界面中选择“浏览”选项。

Step 8:然后定位到刚才的GIVEIO目录下面,找到“GIVEIO.inf”文件,点击“打开”继续。

Step 9:然后回到“从磁盘安装”界面,点击“确定”继续回到驱动设备安装的界面,选择“giveio”设备后,点击“下一步”继续出现“向导准备安装您的硬件”界面中:。

Step 10:点击“下一步”继续然后出现驱动未经过微软认证的界面,点击“仍然继续”选项继续

Step 11:点击“完成”选项后就完成驱动安装了。

Step 12:在“设备管理器”中您可以看到新安装的驱动。

5.TFTP代理软件设置

至此,软件安装,设置基本完成。

接下来就是烧写驱动代码和图片代码。由于代码过于庞大,仅截图一段,仅供参考。

/**************************************************************

在LCD屏幕上指定坐标点画一个指定大小的图片

**************************************************************/

void Paint_Bmp(int x0,int y0,int h,int l,unsigned char bmp[])

{

int x,y;

U32 c;

int p = 0;

for( y = y0 ; y < l ; y++ )

{

for( x = x0 ; x < h ; x++ )

{

c = bmp[p+1] | (bmp[p]<<8) ;

if ( ( (x0+x) < SCR_XSIZE_TFT) && ( (y0+y) < SCR_YSIZE_TFT) )

LCD_BUFFER[y0+y][x0+x] = c ;

p = p + 2 ;

}

}

}

/**************************************************************

**************************************************************/

void Lcd_TFT_Init(void)

{

Lcd_Init();

Lcd_PowerEnable(0, 1);

Lcd_EnvidOnOff(1);       //turn on vedio

Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00) ); 

#define LCD_BLANK    12

#define C_UP      ( LCD_XSIZE_TFT - LCD_BLANK*2 )

#define C_RIGHT      ( LCD_XSIZE_TFT - LCD_BLANK*2 )

#define V_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);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*0), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*1),0x001f);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*2),0x07e0);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*3),0xf800);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*3), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*4),0xffe0);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*5),0xf81f);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*6),0x07ff);      //fill a Rectangle with some color

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 ) ;

}

void Lcd_TFT_Test( void )

{

Uart_Printf("\nTest TFT LCD!\n");

Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x00)  )  ;     //clear screen

Uart_Printf( "\nDisplay Black! Press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

Lcd_ClearScr( (0x1f<<11) | (0x3f<<5) | (0x1f)  )  ;     //clear screen

Uart_Printf( "Display White! Press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x1f)  )  ;     //clear screen

Uart_Printf( "Display Blue! Press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

Lcd_ClearScr( (0x00<<11) | (0x3f<<5) | (0x00)  )  ;     //clear screen

Uart_Printf( "Display Green! Press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

Lcd_ClearScr( (0x1f<<11) | (0x00<<5) | (0x00)  )  ;     //clear screen

Uart_Printf( "Display Red! Press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

/*  Lcd_ClearScr( (0x00<<11) | (0x3f<<5) | (0x1f)  )  ;     //clear screen

Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

Lcd_ClearScr( (0x1f<<11) | (0x00<<5) | (0x1f)  )  ;     //clear screen

Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

Lcd_ClearScr( (0x1f<<11) | (0x3f<<5) | (0x00)  )  ;     //clear screen

Uart_Printf( "LCD clear screen is finished! press any key to continue!\n" );

Uart_Getch() ;    //wait uart input

*/

Lcd_ClearScr(0xffff);    //fill all screen with some color

#define LCD_BLANK    12

#define C_UP      ( LCD_XSIZE_TFT - LCD_BLANK*2 )

#define C_RIGHT      ( LCD_XSIZE_TFT - LCD_BLANK*2 )

#define V_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);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*0), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*1),0x001f);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*1), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*2),0x07e0);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*2), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*3),0xf800);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*3), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*4),0xffe0);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*4), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*5),0xf81f);      //fill a Rectangle with some color

Glib_FilledRectangle( (LCD_BLANK*2), (LCD_BLANK*2 + V_BLACK*5), (C_RIGHT), (LCD_BLANK*2 + V_BLACK*6),0x07ff);      //fill a Rectangle with some color

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 ) ;

#if(LCD_Type == LCDW43)

Uart_Printf( "Press any key to continue!\n" );

Uart_Getch() ;    //Any Key To Next

Paint_Bmp(0, 0, 480, 272, TQ_LOGO_480272);

#elif(LCD_Type == VGA)

Uart_Printf( "Press any key to continue!\n" );

Uart_Getch() ;    //Any Key To Next

Paint_Bmp(0, 0, 640, 480, TQ_LOGO_640480);

#endif

Uart_Printf("LCD Test Complete!\n");

Uart_Printf("Press any key to quit!\n");

Uart_Getch();

}

//*************************************************************

插入组号“3”的代码。

Lcd_ClearScr( (0x00<<11) | (0x00<<5) | (0x1f) );

Glib_FilledRectangle(170,46,310,66,0xf800);

Glib_FilledRectangle(290,46,310,146,0xf800); 

Glib_FilledRectangle(170,126,310,146,0xf800);

Glib_FilledRectangle(290,146,310,226,0xf800);

Glib_FilledRectangle(170,206,310,226,0xf800);

由于插入图片的代码过于庞大在此就补贴出了。

插入图片的具体方法是:1.将已有图片用PS等软件转换成像素为480*272大小的BMP文件。

2.用BMP图片转换软件将BMP图文件转换成.c文件。

3.讲图文件代码插入图片显示代码段中。

4.保存,编译,测试,运行成功。

至此项目开发内容基本完成,接下来是完成项目的文档,包括:

①项目计划

②概要设计说明

③需求规格说明

④详细设计说明

⑤测试问题跟踪

在项目验收过后,一个月的实习内容,圆满结束。

六、实习总结

为期一个月的实习就要结束了,我在这一个月的实习中学到了很多在课堂上根本就学不到的知识,真是受益非浅。

 有一名话叫做:不经过风雨,怎么见彩虹?我想改一下:不真正进入社会,怎能了解社会呢?

 中软国际位于江苏省无锡市国家软件园,该公司是国内大型综合性软件与信息服务企业,具有极高的市场感召力和客户忠诚度,以领先的技术、丰富的经验、精湛的服务在中国 IT 行业享有极高的声誉。这样的公司给我们学校电子信息类的学生提供了难得的实习条件,在那里,公司的各种管理方法、流程和管理者之间的上下层关系可以说是我们现实社会中一个缩影的充分体现,她为我们在校的学生踏进社会提供了一个抢先一步踏进社会体验生活的可贵机会。

 刚开始在中软国际里实习第一个体会到的就是一个字——“累”,但后来慢慢的习惯下来,因为刚从校园里走出来,没有经历过很大风吹雨打,可以说一直以来在保护伞下走过,这次学校组织的实习生活可以给我真正体会到现实生活中的酸、甜、苦、辣;但是我很高兴,因为在实习中到困难时,并没有后退,而是勇敢地面对现实,向困难中挑战。实习磨炼了我的意志,使我现在的意志比实习前坚强多,我真正体会到“苦尽甘来”的味道。

在实习过程中还学会了很多东西:

    首先,第一个是懂得了什么叫做团队精神,一个班组要团结,不然的话就有可能导致事情的失败。

    其次,我学会了沟通,学会处理好身边的人际关系,学会在苦中作乐的技巧,我的工作是比较枯燥的,每天都反复的做哪份工作,如果没有同身边的同事沟通,处理好身边的人际关系,一个人是很孤独,同时在一个工位上工作时间长了,前后工位之间将免不了有磨擦出现,处理不好,将影响我们的工作质量。这就让我懂得了人际关系的重要性,一个好的人缘将会给我们的工作带来了无限的方便和欢乐。

    其三在工作中学会了研究。在工作中,方法中的正确和方便性非常重要,直接影响到代码实现的正确与否,在自己的岗位上做熟了,对自己所做的工作也仔细研究起来,细心分析其方法,代码的缺点,自己优化出一个更加便捷简单的代码来提高自己,真正充分体现出大学生的不同之处,体现了大学生的风采。

    其四,这次中软国际之旅给同学增进了不少友谊,加深了同学之间的感情。在这陌生的地方实习,意识到同学之间的帮助非常重要,大家紧密的团结在一起、生活、工作有遇到什么问题都互相的关顾,加深了同学之间的友谊。 通过这次实习,让我成熟了很多。

回想自己在这期间的工作学习情况,不尽如意。对此我思考过,学习经验自然是一个因素,然而更重要的是心态的转变没有做到位。现在发现了这个不足之处,应该还算是及时吧,因为我明白了何谓工作。在接下来的日子里,我会朝这个方向努力,我相信自己能够把那些不该再存在的“特点”抹掉。

对于我来说,这是我第一次走进公司,也是我第一次真正体验一份工作和感受企业文化。感谢学校,给了我这次体验人生的机会。感谢中软国际,让我在这次实习中学到了很多东西。向尊敬的老师、敬爱的校领导致敬!

相关推荐