j=(i+1) % 5;
for (;;) {
TASK_Thinking_To_Hungry(i); /* 首 先 哲 学 家 处 于 thinking 状 态 , 然 后 执 行
TASK_Thinking_To_Hungry()函数进入 hungry 状态*/
printk("\n");
/*申请信号量,在获得两个信号量后执行 TASK_Eat()函数进入 eating 状态*/
OSSemPend(fork[i], 0, &err);
OSSemPend(fork[j], 0, &err); /* Acquire semaphores to eat */
TASK_Eat(i);
printk("\n");
/*释放信号量*/
OSSemPost(fork[j]);
OSSemPost(fork[i]); /* Release semaphore */
OSTimeDly(200); /* Delay 200 clock tick */
}
2.2 操作系统配置
修改 uC_OS-II/OS_CFG.h:
#define OS_MAX_EVENTS 10 /*最多可以有 10 个事件*/
#define OS_MAX_FLAGS 5 /*最多可以有 5 个事件标志*/
#define OS_MAX_MEM_PART 5 /*最多可以划分 5 个内存块*/
#define OS_MAX_QS 2 /*最多可以使用 2 个队列*/
#define OS_MAX_TASKS 8 /*最多可以创建 8 个任务*/
#define OS_LOWEST_PRIO 14 /*任务优先级不可以大于 14*/
#define OS_TASK_IDLE_STK_SIZE 1024 /*空闲任务堆栈大小*/
#define OS_TASK_STAT_EN 1 /*是否允许使用统计任务*/
#define OS_TASK_STAT_STK_SIZE 1024 /*统计任务堆栈大小*/
#define OS_FLAG_EN 1 /*是否允许使用事件标志功能*/
#define OS_FLAG_WAIT_CLR_EN 1 /*是否允许等待清除事件标志*/
#define OS_FLAG_ACCEPT_EN 1 /*是否允许使用 OSFlagAccept()*/
#define OS_FLAG_DEL_EN 1 /*是否允许使用 OSFlagDel()*/
#define OS_FLAG_QUERY_EN 1 /*是否允许使用 OSFlagQuery()*/
#define OS_MBOX_EN 0 /*是否允许使用邮箱功能*/
评论0