嵌入式系统及应用模板.docx
- 文档编号:6159232
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:81
- 大小:237.41KB
嵌入式系统及应用模板.docx
《嵌入式系统及应用模板.docx》由会员分享,可在线阅读,更多相关《嵌入式系统及应用模板.docx(81页珍藏版)》请在冰豆网上搜索。
嵌入式系统及应用模板
江苏师范大学
计算机科学与技术学院
实验报告
课程:
嵌入式系统及应用
学号:
姓名:
班级:
教师:
计算机科学与技术学院制
实验一:
实验名称:
BC工具的使用方法
实验目的:
学习和掌握BC工具的使用方法
实验(程序调试)过程:
进行下述实验前设置环境变量PATH,变量值添加:
例题2-1一个简单的问候程序
1.程序代码
#include
voidmain()
{
printf(“Hello,World!
\n”);
}
2.编辑程序
使用Windows提供的文本文件,待程序编写完毕无误后用8109.c名称将文件存放到事先创建的一个目录中,即11268109中。
3.把程序编译成目标程序
进入命令环境并进入程序所在的目录,然后使用如下的命令对源文件8109.c进行编译:
bcc-c-ml-Ic:
\bc31\include-Lc:
\bc31\lib8109.c
4.把目标文件连接成可执行文件
命令如下:
tlinkc:
\bc31\lib\c0l.objtest.obj,test,test,c:
\bc31\lib\cl.lib
5.运行
8109
例题2-2一个具有三个源文件应用程序的编译及连接示例
1.pa程序代码
//pa.h
#ifndefPA_H
#definePA_H
voidA_print();
#endif
//pa.c
#include
#include"pa.h"
voidA_print()
{
printf("AAAAAAAA\n");
}
2.pb程序代码
//pb.h
#ifndefPB_H
#definePB_H
voidB_print();
#endif
//pb.c
#include
#include"pb.h"
voidB_print()
{
printf("BBBBBBBB\n");
}
3.8109.c程序代码
//8109.c
#include"pa.h"
#include"pb.h"
voidmain()
{
for(;;)
{
A_print();
B_print();
}
}
4.编译
编译pa.c以形成pa.obj文件,命令为:
>bcc-c-ml-Ic:
\bc31\include-I.\-Lc:
\bc31\libpa.c
编译pb.c以形成pa.obj文件,命令为:
>bcc-c-ml-Ic:
\bc31\include-I.\-Lc:
\bc31\libpb.c
编译8109.c以形成8109.obj文件,命令为:
>bcc-c-ml-Ic:
\bc31\include-I.\-Lc:
\bc31\lib8109.c
5.连接成可执行文件8109.exe
生成8109.exe的命令为
>tlinkc:
\bc31\lib\c0l.objpa.objpb.obj8109.obj,8109,8109,c:
\bc31\lib\cl.lib
6.运行
实验过程中遇到的问题与解决方法:
1.问题:
源代码中出现中文字符,程序出错。
解决方法:
把源代码中的中文字符改为英文字符。
2.输入命令时把英文字母L写成数字1。
3.没有配置环境变量,命令不能执行。
分析程序运行结果:
Bcc命令编译生成obj文件,tlink命令将obj文件链接生成可执行文件。
用bcc分别编译pa.c,pb.c,8109.c生成obj文件,编写tlink文件进行连接,生成可执行文件。
运行结果
实验二:
实验名称:
*.MAK的编写方法
实验目的:
掌握*.MAK文件的编写方法
实验(程序调试)过程:
例题2-3标号作用的示例
1.makefile代码
target1:
md11
target2:
md22
target3:
rd11
rd22
2.运行命令
make
maketarget2
maketarget3
例题2-4:
为例题2-2设计一个具有4个程序段的makefile,并在该文件中实现源文件的编译以及目标文件的连接,从而生成最终可执行文件。
1.makefile代码如下:
8109.EXE:
TLINK@tlink.txt
PA.OBJ:
Bcc-c-ml-Ic:
\bc31\include-Lc:
\bc31\libPA.c
PB.OBJ:
Bcc-c-ml-Ic:
\bc31\include-Lc:
\bc31\libPB.c
8060.OBJ:
Bcc-c-ml-Ic:
\bc31\include-Lc:
\bc31\lib8109.c
2.makefile的执行:
>makepa.obj
>makepb.obj
>make8109.obj
>make
例题2-5为例题2-2程序编写一个makefile文件,并利用依赖把用以完成工程文件编译及连接工作的各个程序段之间关联起来,从而使用户仅使用一个make命令,便可完成编译及连接任务。
1.makefile文件
8109.EXE:
PA.OBJPB.OBJ8109.OBJ
TLINK@tlink.txt
PA.OBJ:
Bcc-c-ml-Ic:
\bc31\include-Lc:
\bc31\libPA.c
PB.OBJ:
Bcc-c-ml-Ic:
\bc31\include-Lc:
\bc31\libPB.c
8109.OBJ:
Bcc-c-ml-Ic:
\bc31\include-Lc:
\bc31\lib8109.c
2.makefile的执行过程
>make
例题2-6使用批处理文件、makefile和连接文件来处理例题2-2源程序的编译和连接。
1.批处理文件
由于在前面已经有了makefile和连接文件,所以这里只写批处理文件:
ECHOOFF
ECHO************************************************
ECHO*批处理文件
ECHO************************************************
ECHO*
ECHOON
c:
\bc31\bin\make-f8109.mak
2.批处理文件的启动:
双击该文件即可
例题2-7:
本例使用了两个来源不同的第三方源程序,一个存放在目录PORT\PT,另一个存放在目录PC。
用户自己的源文件TEST.c和连接文件TEST.LNK存放在目录SOURCE,批处理文件和makefile文件被存放在目录TEST,同时该目录还要负责存放将来创建出来的最终可执行文件TEST.EXE。
本例题无第三方源程序,故无实验结果!
实验过程中遇到的问题与解决方法:
1.问题:
在做例题2-6时,双击批处理文件,运行失败。
解决方法:
没有把makefile文件名字改为8060.mak,修改之后就可以正常运行了。
分析程序运行结果:
2-3
创建目录11,创建目录22,删除目录11,、22.
2-4
(1)
2-4
(2)
2-4(3)
2-4(4)
2-5
(1)
2-5
(2)
2-6
实验三:
实验名称:
调试第三章3-6~3-10例题
实验目的:
掌握第三章3-6~3-10例题的调试方法
实验(程序调试)过程:
例题3-6设计一个只有一个任务MyTasK的应用程序,当程序运行后,任务MyTasK的工作就是每秒在显示器上显示一个字符“M”。
该应用程序的代码如下:
#include"includes.h"
#defineTASK_STK_SIZE512//任务堆栈长度
OS_STKTaskStartStk[TASK_STK_SIZE];//定义任务堆栈区
INT16Skey;//用于退出uCOS_II的键
INT8Ux=0,y=0;//字符显示位置
voidMyTask(void*data);//声明一个任务
/************************主函数*********************************************/
voidmain(void)
{
char*s="M";//定义要显示的字符
OSInit();//初始化uCOS_II
PC_DOSSaveReturn();//保存Dos环境
PC_VectSet(uCOS,OSCtxSw);//安装uCOS_II中断
OSTaskCreate(MyTask,//创建任务MyTask
s,//给任务传递参数
&TaskStartStk[TASK_STK_SIZE-1],//设置任务堆栈栈顶指针
0);//使任务MyTask的优先级别为0
OSStart();//启动uCOS_II的多任务管理
}
voidMyTask(void*pdata)
{
#ifOS_CRITICAL_METHOD==3
OS_CPU_SRcpu_sr;
#endif
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);//安装uCOS_II时钟中断向量
PC_SetTickRate(OS_TICKS_PER_SEC);//设置uCOS_II时钟频率
OS_EXIT_CRITICAL();
OSStatInit();//初始化uCOS_II的统计任务
for(;;)
{
if(x>10)
{
x=0;
y+=2;
}
PC_DispChar(x,y,//在x,y位置显示s中的字符
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_WHITE);
x+=1;
//如果按下Esc键则退出uCOS_II
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{
PC_DOSReturn();
}
}
OSTimeDlyHMSM(0,0,1,0);//等待
}
}
例题3-7在3-6应用程序的任务MyTasK中再创建一个任务YouTasK,当程序运行后,任务MyTasK的工作在显示器上显示一个字符“M”;而任务YouTasK则是在显示器上显示字符
“Y”。
应用程序的源代码如下:
/******************************Test*******************************/
#include"includes.h"
#defineTASK_STK_SIZE512//任务堆栈长度
OS_STKMyTaskStk[TASK_STK_SIZE];//定义任务堆栈区
OS_STKYouTaskStk[TASK_STK_SIZE];//定义任务堆栈区
INT16Skey;//用于退出uCOS_II的键
INT8Ux=0,y=0;//字符显示位置
voidMyTask(void*data);//声明任务
voidYouTask(void*data);//声明任务
/************************主函数*********************************/
voidmain(void)
{
char*s_M="M";//定义要显示的字符
OSInit();//初始化uCOS_II
PC_DOSSaveReturn();//保存Dos环境
PC_VectSet(uCOS,OSCtxSw);//安装uCOS_II中断
OSTaskCreate(
MyTask,//创建任务MyTask
s_M,//给任务传递参数
&MyTaskStk[TASK_STK_SIZE-1],//设置任务堆栈栈顶指针
0//任务的优先级别为0
);
OSStart();//启动多任务管理
}
/*******************任务MyTask**********************************/
voidMyTask(void*pdata)
{
char*s_Y="Y";//定义要显示的字符
#ifOS_CRITICAL_METHOD==3
OS_CPU_SRcpu_sr;
#endif
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);//安装时钟中断向量
PC_SetTickRate(OS_TICKS_PER_SEC);//设置时钟频率
OS_EXIT_CRITICAL();
OSStatInit();//初始化统计任务
OSTaskCreate(
YouTask,//创建任务MyTask
s_Y,//给任务传递参数
&YouTaskStk[TASK_STK_SIZE-1],//设置任务堆栈栈顶指针
2//MyTask的优先级别为2
);
for(;;)
{
if(x>50)
{
x=0;
y+=2;
}
PC_DispChar(x,y,//字符的显示位置
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_WHITE);
x+=1;
//如果按下Esc键则退出uCOS_II
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{
PC_DOSReturn();//恢复Dos环境
}
}
OSTimeDlyHMSM(0,0,3,0);//等待3秒
}
}
/************************任务YouTask******************************/
voidYouTask(void*pdata)
{
#ifOS_CRITICAL_METHOD==3
OS_CPU_SRcpu_sr;
#endif
pdata=pdata;
for(;;)
{
if(x>50)
{
x=0;
y+=2;
}
PC_DispChar(
x,y,//字符的显示位置
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_WHITE
);
x+=1;
OSTimeDlyHMSM(0,0,1,0);//等待1秒
}
}
/************************End************************************/
例题3-8修改例题3-7应用程序的任务YouTasK。
要求任务YouTasK运行20次后,挂起任MyTasK务;当任务YouTasK运行40次后,恢复任务MyTasK。
应用程序的源代码如下:
#include"includes.h"
#defineTASK_STK_SIZE512//任务堆栈长度
OS_STKMyTaskStk[TASK_STK_SIZE];//定义任务堆栈区
OS_STKYouTaskStk[TASK_STK_SIZE];//定义任务堆栈区
INT16Skey;//用于退出uCOS_II的键
INT8Ux=0,y=0;//字符显示位置
INT8Utime=0;
voidMyTask(void*data);//声明任务
voidYouTask(void*data);//声明任务
/************************主函数*********************************************/
voidmain(void)
{
char*s_M="M";//定义要显示的字符
OSInit();//初始化uCOS_II
PC_DOSSaveReturn();//保存Dos环境
PC_VectSet(uCOS,OSCtxSw);//安装uCOS_II中断
OSTaskCreate(MyTask,//创建任务MyTask
s_M,//给任务传递参数
&MyTaskStk[TASK_STK_SIZE-1],//设置任务堆栈栈顶指针
0);//使任务MyTask的优先级别为0
OSStart();//启动uCOS_II的多任务管理
}
/***********************任务MyTask*******************************************/
voidMyTask(void*pdata)
{
char*s_Y="Y";//定义要显示的字符
#ifOS_CRITICAL_METHOD==3
OS_CPU_SRcpu_sr;
#endif
pdata=pdata;
OS_ENTER_CRITICAL();
PC_VectSet(0x08,OSTickISR);//安装uCOS_II时钟中断向量
PC_SetTickRate(OS_TICKS_PER_SEC);//设置uCOS_II时钟频率
OS_EXIT_CRITICAL();
OSStatInit();//初始化uCOS_II的统计任务
OSTaskCreate(YouTask,//创建任务MyTask
s_Y,//给任务传递参数
&YouTaskStk[TASK_STK_SIZE-1],//设置任务堆栈栈顶指针
2);//使任务MyTask的优先级别为0
for(;;)
{
if(x>50)
{
x=0;
y+=2;
}
PC_DispChar(x,y,//显示字符的位置
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_WHITE);
x+=1;
//如果按下Esc键则退出uCOS_II
if(PC_GetKey(&key)==TRUE)
{
if(key==0x1B)
{
PC_DOSReturn();
}
}
OSTimeDlyHMSM(0,0,3,0);//等待
}
}
/************************任务YouTask*****************************************/
voidYouTask(void*pdata)
{
#ifOS_CRITICAL_METHOD==3
OS_CPU_SRcpu_sr;
#endif
pdata=pdata;
for(;;)
{
if(time==20)
{
OSTaskSuspend(0);
}
if(time==40)
{
OSTaskResume(0);
}
time+=1;
if(x>50)
{
x=0;
y+=2;
}
PC_DispChar(x,y,//显示字符的位置
*(char*)pdata,
DISP_BGND_BLACK+DISP_FGND_WHITE);
x+=1;
OSTimeDlyHMSM(0,0,1,0);//等待
}
}
/************************End*************************************************/
例题3-9改造例题3-7的任务MyTasK,当任务MyTasK运行10次时用函数OSSchedLock()对调度器进行加锁,而当任务MyTasK运行到第80次时再用函数OSSchedUnlock()对调度器进行解锁,并运行该程序。
应用程序的代码如下:
#include"includes.h"
#defineTASK_STK_SIZE512//任务堆栈长度
OS_STKMyTaskStk[TASK_STK_SIZE];//定义任务堆栈区
OS_STKYouTaskStk[TASK_STK_SIZE];//定义任务堆栈区
INT16Skey;//用于退出uCOS_II的键
INT8Ux=0,y=0;//字符显示位置
INT8Utimes=0;//运行次数
voidMyTask(void*data);//声明任务
voidYouTask(void*data);//声明任务
/************************主函数*********************************************/
voidmain(void)
{
char*s_M="M";//定义要显示的字符
OSInit();//初始化uCOS_II
PC_DOSSaveReturn();//保存Dos环境
PC_VectSet(uCOS,OSCtxSw);//安装uCOS_II中断
OSTaskCreate(MyTask,//创建任务MyTask
s_M,//给任务传递参数
&MyTaskStk[TASK_STK_SIZE-1],//设置任务堆栈栈顶指针
0);//使任务MyTask的优先级别为0
OSStart();//启动uCOS_II的多任务管理
}
/***********************任务MyTask*******************************************/
voidMyTask(void*pda
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 应用 模板
![提示](https://static.bdocx.com/images/bang_tan.gif)