嵌入式课程设计.docx
文本预览下载声明
成绩
成绩
南京工程学院
自动化学院
嵌入式系统课程设计报告
课 题:操作系统任务间信号量通信程序设计
专 业: 自动化(数控技术)
班 级: 数控卓越131 学 号:
学生姓名:
任课教师:
年 月 日
一、课程设计要求
硬件:x86架构PC机
软件:X8架构的PC机和Borland C编译器和链接器,μC/OS-II操作系统文件
要求:1). 撰写详细的程序功能说明;
2). 列出程序中调用的系统函数,并对函数功能加以说明;
3). 完成程序流程图,并对各个功能模块加以详细的阐述;
4). 提供程序的源代码文件,并详细阐述程序的调试过程;
5). 提供可执行文件,并演示执行结果;
6). 对课程设计进行总结,撰写课程设计报告
二、程设计题目分析
当事件控制块成员OSEventType的值被设置为OS_EVENT_TYPE_SEM时,这个控制块描述的就是一个信号量。在使用信号量之前,应用程序必须调用函数 OSSemCreate()来创建一个信号量。函数 OSSemCreate()的原型如下:
OS_EVENT *OSSemCreate(
INT16U cnt //信号量计数器初值
)
任务调用函数OSSemPend()请求信号量。函数OSSemPend()的原型如下:
void OSSemPend(OS_EVENT * pevent, //信号量的指针
INT16U timeout, //等待时限
INT8U *err //错误信息
) ;
任务获得信号量,并在访问共享资源后,必须释放信号量。释放信号量也叫做发送信号量,调用函数OSSemPost(),原型如下:
INT8U OSSemPost(
OS_EVENT *pevent //信号量的指针
);
因此在程序中调用了相关函数:
在MyTask任务中请求信号量
在HerTask任务中发送信号量,并建立一个循环让HerTask每运行三次发送一个信号量。
关于MyTask调用的函数是这样的:
以上就是信号量的部分,为了使程序实现更多的内容,便加入了消息邮箱的设计。
定义事件控制块指针:
创建消息邮箱;
Times作为变量记录MyTask运行次数
在YouTask请求消息邮箱
三、课程程序设计:
所设计的程序,该程序有MyTask、YouTask和HerTask三个任务,在任务MyTask中用一个变量Times记录任务MyTask的运行次数,并用消息邮箱发给YouTask并由YouTask显示,同时MyTask是有HerTask发信号量控制运行。信号量为1这MyTask运行,为0则不运行。
程序如下:
/************************Test*************************************/
#include includes.h
#define TASK_STK_SIZE 512 //任务堆栈长度
OS_STK StartTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
OS_STK MyTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
OS_STK YouTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
OS_STK HerTaskStk[TASK_STK_SIZE]; //定义任务堆栈区
INT16S key;
char *s1=MyTask;
char *s2=HerTask; //用于退出的键
char *s;
char *ss;
INT8U err;
INT8U y=0; //字符显示位置
INT8U YouTaskRun=0;
INT8U HerTaskRun=0;
OS_EVENT *Fun_Semp;
INT32U Times=0;
OS_EVENT *Str_Box;
void Fun(INT8U x,INT8U y);
void StartTask(void *data); //声明起始任务
void MyTask(void *data);
显示全部