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

含代码uC - OS-II实验指导书

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

#define OS_MBOX_DEL_EN 1 /*是否允许使用 OSMboxDel()*/ #define OS_MBOX_POST_EN 1 /*是否允许使用OSMboxPost()*/ #define OS_MBOX_POST_OPT_EN 1 /*是否允许使用OSMboxPostOpt() */ #define OS_MBOX_QUERY_EN 1 /*是否允许使用OSMboxQuery()*/

#define OS_MEM_EN 0 /*是否允许使用内存管理的功能*/ #define OS_MEM_QUERY_EN 1 /*是否允许使用OSMemQuery()*/

#define OS_MUTEX_EN 0 /*是否允许使用互斥信号量的功能*/ #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_Q_ACCEPT_EN 1 /*是否允许使用OSQAccept()*/ #define OS_Q_DEL_EN 1 /*是否允许使用OSQDel()*/ #define OS_Q_FLUSH_EN 1 /*是否允许使用 OSQFlush()*/ #define OS_Q_POST_EN 1 /*是否允许使用 OSQPost()*/ #define OS_Q_POST_FRONT_EN 1 /*是否允许使用OSQPostFront()*/ #define OS_Q_POST_OPT_EN 1 /*是否允许使用OSQPostOpt()*/ #define OS_Q_QUERY_EN 1 /*是否允许使用OSQQuery()*/

#define OS_SEM_EN 0 /*是否允许使用信号量功能*/ #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 0 /*是否允许使用 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 0 /*是否允许使用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()函数,这是我们编写实现应用程序的起点。首先需要在main()函数里创建起始任务TaskStart:

OSTaskCreate(TaskStart, (void *)0, &TaskStartStk[TASK_STK_SIZE - 1], 4);

TaskStart任务

TaskStart任务负责安装操作系统的时钟中断服务例程、初始化操作系统时钟,并创建所有的应用任务:

ucos_x86_idt_set_handler(0x20,(void *)OSTickISR,0x8e00);

/* Install uC/OS-II's clock tick ISR */ ucos_timer_init(); /*Timer 初始化*/

TaskStartCreateTasks(); /* Create all the application tasks */ OSTaskSuspend(OS_PRIO_SELF);

具体负责应用任务创建的TaskStartCreateTasks函数代码如下,它创建了两个应用任务Task0和Task1:

static void TaskStartCreateTasks (void) {

INT8U i;

for (i = 0; i < N_TASKS; i++) { /* Create N_TASKS identical tasks */ TaskData[i] = i; /* Each task will display its own letter */ }

OSTaskCreate(Task0, (void *)&TaskData[i], &TaskStk[i][TASK_STK_SIZE - 1], 5); OSTaskCreate(Task1, (void *)&TaskData[i], &TaskStk[1][TASK_STK_SIZE - 1], 6); }

TaskStart任务完成上述操作后将自己挂起,操作系统将调度当前优先级最高的应用任务Task0运行。 应用任务

应用任务Task0运行后将自己挂起,之后操作系统就会调度处于就绪状态的优先级最高的任务,具体代码如下: void Task0 (void *pdata) {

INT8U i; INT8U err; i=*(int *)pdata;

for (;;) { ……

/*此处为输出信息,显示任务运行的状态 */

err=OSTaskSuspend(5); /* suspend itself */ } }

应用任务Task1运行后将Task0唤醒,使其进入到就绪队列中: void Task1 (void *pdata) { INT8U i; INT8U err; i=*(int *)pdata; for (;;) {

OSTimeDly(150); ……

/*此处为输出信息,显示任务运行的状态 */

OSTimeDly(150);

err=OSTaskResume(5); /* resume task0 */ }

}

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

按照本实验手册第一部分所描述的方法建立应用项目并完成构建,当我们在LambdaTOOL调试器的控制下运行构建好的程序后,将看到在μC/OS-Ⅱ内核的调度管理下,两个应用任务不断切换执行的情形:

T1时刻的截图

T2时刻的截图

T3时刻的截图

T4时刻的截图

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

4.1 OSTaskCreate()

建立一个新任务。任务的建立可以在多任务环境启动之前,也可以在正在运行的任务中建立。中断处理程序中不能建立任务。一个任务可以为无限循环的结构。

函数原型:INT8U OSTaskCreate(void (*task)(void *pd), void *pdata, OS_STK *ptos, INT8U prio);

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