第一范文网 - 专业文章范例文档资料分享平台

uC - OS-II实验指导书2014

来源:用户分享 时间:2025/6/5 14:43:14 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

#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 的文档
uC - OS-II实验指导书2014.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c7v1os3skfc01k8200sna_6.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top