📄 ex2.c
字号:
/******************************************************************************/
/* */
/* EX2.C: 例子程序 */
/* */
/* 仿照RtxTiny2 中的EX2 */
/* */
/******************************************************************************/
#include <includes.h> /* UCOS_II 的主头文件 */
void job0(void *yydata); /* 声明4个任务 */
void job1(void *yydata);
void job2(void *yydata);
void job3(void *yydata);
OS_STK TaskStk[4][MaxStkSize]; /* 任务堆栈 */
OS_EVENT *Sem; /* 声明一个信号量 */
long counter0; /* 任务0 的计数器 */
long counter1; /* 任务1 的计数器 */
long counter2; /* 任务2 的计数器 */
long counter3; /* 任务3 的计数器 */
void main(void)
{
OSInit();
InitTimer0();
Sem = OSSemCreate(0); /* 建立一个信号量 */
OSTaskCreate(job0, (void *)0, (void *)&TaskStk[0][0],6);
OSStart();
}
/******************************************************************************/
/* 任务0 'job0': */
/******************************************************************************/
void job0 ( void *yydata ) {
yydata = yydata; /* 避免编译器警告 */
OSTaskCreate(job1, (void *)0, (void *)&TaskStk[1][0], 7);
OSTaskCreate(job2, (void *)0, (void *)&TaskStk[2][0], 9);
OSTaskCreate(job3, (void *)0, (void *)&TaskStk[3][0], 8);
while (1) { /* 死循环 */
counter0++; /* counter0 加一 */
OSTimeDly(2); /* 等待2个ticks */
}
}
/******************************************************************************/
/* 任务1 'job1': */
/******************************************************************************/
void job1 ( void *yydata ) {
yydata = yydata; /* 避免编译器警告 */
while (1) { /* 死循环 */
counter1++; /* counter1 加一 */
OSTimeDly(4); /* 等待4个ticks */
}
}
/******************************************************************************/
/* 任务2 'job2': */
/******************************************************************************/
void job2 ( void *yydata ) {
yydata = yydata; /* 避免编译器警告 */
while (1) { /* 死循环 */
counter2++; /* counter2 加一 */
if ((counter2 & 0xFFFF) == 0) { /* counter2 溢出 */
OSSemPost(Sem); /* 发信号给任务3 */
}
}
}
/******************************************************************************/
/* 任务3 'job3': */
/******************************************************************************/
void job3 ( void *yydata ) {
INT8U err;
yydata = yydata; /* 避免编译器警告 */
while (1) { /* 死循环 */
OSSemPend(Sem, 0, &err); /* 等待信号 */
counter3++; /* 处理counter2 溢出 */
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -