实习报告嵌入式Word格式文档下载.docx
《实习报告嵌入式Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实习报告嵌入式Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
![实习报告嵌入式Word格式文档下载.docx](https://file1.bdocx.com/fileroot1/2023-2/1/aa8d48a8-3dbb-4f51-8ae6-e9b5b6dac941/aa8d48a8-3dbb-4f51-8ae6-e9b5b6dac9411.gif)
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<
stdio.h>
typedefuniontag_MYUNION
{charch[4];
intvalue;
}MYUNION;
intmain()
{MYUNIONmyunion;
myunion.value=0x12345678;
if(myunion.ch[0]==0x12)
printf("
bigendian\n"
);
elsemyunion.ch[0]==0x78;
littleendian\n"
return0;
}
作业二(多线程)
#include<
sys/types.h>
unistd.h>
{
pid_tpid;
char*message;
intn;
forkprogramstarting\n"
pid=fork();
switch(pid)
case-1:
perror("
forkfailed"
exit
(1);
case0:
message="
child:
"
;
n=100;
break;
default:
sleep
(1);
parent:
for(n=1;
n<
100;
n+=2)
{
%s"
message);
%d,%d\n"
n,n+1);
exit(0);
作业三(大小字母输出及ASC码)
作业四(字母排序)
string.h>
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"
fwrite(buf,strlen(buf),1,fp);
fclose(fp);
r"
fread(readbuf,strlen(buf),1,fp);
fp1=fopen("
zhengxu.txt"
fwrite(readbuf,strlen(buf),1,fp1);
fclose(fp1);
{fseek(fp,(-i-1),SEEK_END);
fread(b,1,1,fp);
readbuf1[i]=*b;
fp2=fopen("
daoxu.txt"
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<
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;
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);
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*1),(C_RIGHT),(LCD_BLANK*2+V_BLACK*2),0x07e0);
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*2),(C_RIGHT),(LCD_BLANK*2+V_BLACK*3),0xf800);
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*3),(C_RIGHT),(LCD_BLANK*2+V_BLACK*4),0xffe0);
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*4),(C_RIGHT),(LCD_BLANK*2+V_BLACK*5),0xf81f);
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*5),(C_RIGHT),(LCD_BLANK*2+V_BLACK*6),0x07ff);
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"
5)|(0x00));
//clearscreen
Uart_Printf("
\nDisplayBlack!
Pressanykeytocontinue!
);
Uart_Getch();
//waituartinput
Lcd_ClearScr((0x1f<
11)|(0x3f<
5)|(0x1f));
DisplayWhite!
DisplayBlue!
DisplayGreen!
DisplayRed!
/*Lcd_ClearScr((0x00<
LCDclearscreenisfinished!
pressanykeytocontinue!
*/
Lcd_ClearScr(0xffff);
//fillallscreenwithsomecolor
Glib_FilledRectangle((LCD_BLANK*2),(LCD_BLANK*2+V_BLACK*3),(C_RIGHT),(LCD_BLANK*2+V_BLACK*4),0