当前位置:首页 > 实时操作系统实验报告
OSSemPend(Fun_Semp,0,&err);
PC_DispStr(0,++y,s1,DISP_BGND_BLACK+DISP_FGND_WHITE); */ } }
void Task2 (void *pdata) {
pdata = pdata;
OSTimeDly(OS_TICKS_PER_SEC*5); for (;;) {
PC_DispStr(0,++y,s2,DISP_BGND_BLACK+DISP_FGND_WHITE); OSSemPost(Fun_Semp); */ } }
OSTimeDly(OS_TICKS_PER_SEC); /* Delay for 100 mS
OSTimeDly(OS_TICKS_PER_SEC*2); /* Delay for 100 mS
实验截图:
图
实验感想:
通过本次实验,我深刻理解了信号量的作用,特别是互斥操作和同步操作; 掌握了利用信号量操作函数实现简单的生产者/消费者问题;
掌握下列信号量操作函数及其使用方法:OSSemCreate、OSSemPend、OSSemPost ;
这次实验的信号量的声明、函数的声明以及定义过程中我发现我对以往学习的C语言知识基础并不牢固,简单的声明和定义都会引发一系列的错误,在今后的学习中药注意完善、巩固所学的知识。
实验四 消息编程实验
实验目的:
? 掌握消息编程方法,主要函数包括:
? OSQCreate 创建消息队列 ? OSQPend 接收消息
? OSQPostFront,OSQPost 发送消息
实验要求与思路:
建议一个能存放6条消息的消息队列,在此基础上创建Task1和Task3,向该消息队列发送消息,而创建任务Task2,从消息队列中获取消息。考虑消息队列满和空的情况。(设Task1使用OSQPost,Task3使用OSQPostFront)
实验程序:
#include \#define TASK_STK_SIZE 512 #define N_MESSAGES 10 #define TASK_START_PRIO 2 #define TASK_1_PRIO #define TASK_2_PRIO #define TASK_3_PRIO INT8U err; INT8U y=0; INT32U Times=0; OS_EVENT * Str_Q; OS_STK OS_STK OS_STK OS_STK
TaskStartStk[TASK_STK_SIZE]; Task1Stk[TASK_STK_SIZE]; Task2Stk[TASK_STK_SIZE]; Task3Stk[TASK_STK_SIZE];
4 5 6
void * MsgGrp[N_MESSAGES];
void TaskStart(void *pdata); void Task1(void *pdata); void Task2(void *pdata); void Task3(void *pdata); void TaskStartDispInit (void); void main(void) { }
OSInit();
PC_DOSSaveReturn(); PC_VectSet(uCOS,OSCtxSw);
Str_Q=OSQCreate(&MsgGrp[0],N_MESSAGES);
OSTaskCreate(TaskStart,0,&TaskStartStk[TASK_STK_SIZE-1],TASK_START_PRIO); OSStart();
void TaskStart(void *pdata) { }
void TaskStartDispInit (void) {
/*
1111111111222222222233333333334444444444555555555566666666667777777777 */ /*
01234567890123456789012345678901234567890123456789012345678901234567890123456789 */ \\ PC_DispStr(
0,
2,
\\ PC_DispStr( PC_DispStr( PC_DispStr(
0, 0, 0,
4, 5, 6,
\\\
INT16S key=0; INT8U err; pdata=pdata;
TaskStartDispInit(); OS_ENTER_CRITICAL(); PC_VectSet(0x08,OSTickISR);
PC_SetTickRate(OS_TICKS_PER_SEC); OS_EXIT_CRITICAL(); OSStatInit();
err=OSTaskCreate(Task1,0,&Task1Stk[TASK_STK_SIZE-1],TASK_1_PRIO); err=OSTaskCreate(Task2,0,&Task2Stk[TASK_STK_SIZE-1],TASK_2_PRIO); err=OSTaskCreate(Task3,0,&Task3Stk[TASK_STK_SIZE-1],TASK_3_PRIO); for(;;){ }
if(PC_GetKey(&key)){ }
OSCtxSwCtr=0;
OSTimeDly(OS_TICKS_PER_SEC);
if(key==0x1B){ }
PC_DOSReturn();
PC_DispStr( 0, 0, \ uC/OS-II, The Real-Time Kernel
PC_DispStr( 0, 1, \ Jean J. Labrosse
\
PC_DispStr( 0, 3, \ EXAMPLE #2
\
\
\
共分享92篇相关文档