uC - OS-II实验指导书2014

2026/1/27 7:32:28

#define OS_MUTEX_ACCEPT_EN 1 /*是否允许使用OSMutexAccept()*/ #define OS_MUTEX_DEL_EN 1 /*是否允许使用OSMutexDel()*/ #define OS_MUTEX_QUERY_EN 1 /*是否允许使用OSMutexQuery()*/

#define OS_Q_EN 0 /*是否允许使用队列功能*/

#define OS_SEM_EN 1 /*是否允许使用信号量功能*/ #define OS_SEM_ACCEPT_EN 1 /*是否允许使用OSSemAccept()*/ #define OS_SEM_DEL_EN 1 /*是否允许使用 OSSemDel() */ #define OS_SEM_QUERY_EN 1 /*是否允许使用 OSSemQuery()*/

#define OS_TASK_CHANGE_PRIO_EN 1 /*是否允许使用 OSTaskChangePrio()*/ #define OS_TASK_CREATE_EN 1 /*是否允许使用OSTaskCreate()*/ #define OS_TASK_CREATE_EXT_EN 1 /*是否允许使用OSTaskCreateExt()*/ #define OS_TASK_DEL_EN 1 /*是否允许使用OSTaskDel()*/

#define OS_TASK_SUSPEND_EN 1 /*是否允许使用OSTaskSuspend() and OSTaskResume()*/ #define OS_TASK_QUERY_EN 1 /*是否允许使用OSTaskQuery()*/

#define OS_TIME_DLY_HMSM_EN 1 /*是否允许使用OSTimeDlyHMSM()*/ #define OS_TIME_DLY_RESUME_EN 1 /*是否允许使用OSTimeDlyResume()*/ #define OS_TIME_GET_SET_EN 1 /*是否允许使用OSTimeGet() 和 OSTimeSet()*/ #define OS_SCHED_LOCK_EN 1 /*是否允许使用OSSchedLock()和OSSchedUnlock()*/ #define OS_TICKS_PER_SEC 200 /*设置每秒之内的时钟节拍数目*/

2.3 源程序说明

首先,在main()函数中创建一个二值信号量:

mutex=OSSemCreate(1);

然后,在main()函数中创建TaskStart任务。 TaskStart任务

在TaskStart任务中创建并启动所有的应用任务TA0, TA1,TA2。 static void TaskStartCreateTasks (void)

{

INT8U i;

for (i = 0; i

21

TaskData[i] = i;

} /* Each task will pass its own id */

OSTaskCreate(Task0, (void *)&TaskData[0], &TaskStk[0][TASK_STK_SIZE - 1], 5); OSTaskCreate(Task1, (void *)&TaskData[1], &TaskStk[1][TASK_STK_SIZE - 1], 6); OSTaskCreate(Task2, (void *)&TaskData[2], &TaskStk[2][TASK_STK_SIZE - 1], 7);

}

任务TA0的优先级最高,它需要使用信号量mutex: void Task0 (void *pdata) {

INT8U err; INT8U id; INT16U value; id=*(int *)pdata; for (;;) {

printk(\

OSTimeDly(200); /* Delay 200 clock tick printk(\ printk(\

OSSemPend(mutex,0,&err); /* Acquire mutex */ switch(err) { case OS_NO_ERR: printk(\ printk(\ break; default: printk(\ printk(\ } OSTimeDly(200); /* Delay 200 clock tick printk(\ OSSemPost(mutex); /* Release mutex } }

任务TA1具有中等优先级,它不使用信号量: void Task1 (void *pdata) {

INT8U err;

*/ */ */ 22

INT8U id; int i; id=*(int *)pdata; for (;;) { printk(\

OSTimeDly(100); /* Delay 100 clock tick */ printk(\ OSTimeDly(100); } }

任务TA2的优先级最低,和高优先级任务TA0共用信号量mutex:

void Task2 (void *pdata) {

INT8U err; INT8U id; INT16U value; id=*(int *)pdata;

int i;

for (;;) {

printk(\

OSSemPend(mutex,0,&err); /* Acquire mutex */ switch(err) {

case OS_NO_ERR:

{ printk(\

printk(\ printk(\

OSTimeDly(200); /* Delay 100 clock tick break;

}

default : {

printk(\ is failed to get mutex.\\n\

*/ 23

printk(\

OSTimeDly(200); /* Delay 100 clock tick */ break;

}

}

printk(\ printk(\ OSSemPost(mutex); /* Release mutex */ }

}

3 运行及观察应用输出信息

4 本实验中所用到的μC/OS-II相关函数

4.1 OSSemCreate()

该函数建立并初始化一个信号量,信号量的作用如下:

24


uC - OS-II实验指导书2014.doc 将本文的Word文档下载到电脑
搜索更多关于: uC - OS-II实验指导书2014 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219