目的
学习和理解实时操作系统
声明
习题答案是笔者基于相关书籍和网上内容自己理解的,有不对或疑问的地方大家一起沟通
十七.编写一个有2个任务的应用程序,每一个任务每次运行显示一个字符当调度器进行了5次调度之后,这些显示的字符会在显示器上构成一个字符串"Hello, uC/OS-II!"。
方法:字符串"Hello, uC/OS-II"有15个字符(不包括结束字符\0),根据条件调度器进行了5次调度,两个任务最多打印5个字符;剩余10个字符有两种处理方法,第一种,在main函数入口先打印10个字符,第二种,通过任务调度时的钩子函数App_TaskSwHook配合可以实现目标
预期:
在OS_Sched函数中设置断点,并计数,当出现5次的时候,打印窗口显示字符串
?实验结果如下:
?关键代码:
int8_t gchSpecialString[] = "Hello,uC/OS-II!";
int32_t gnCnt = 0;
static void PrintSpecialString(void)
{
if (gnCnt < sizeof(gchSpecialString))
{
printf("%c", gchSpecialString[gnCnt++]);
}
else
{
//printf("p");
}
}
void App_TaskSwHookExt (void)
{
PrintSpecialString();
PrintSpecialString();
}
void task0_func(void *p_arg)
{
for(;;)
{
PrintSpecialString();
//FlipPin(FLIP_PIN0,50);
OSTimeDlyHMSM(0,0,0,50);
}
}
void task1_func(void *p_arg)
{
for(;;)
{
PrintSpecialString();
//FlipPin(FLIP_PIN1,3);
OSTimeDlyHMSM(0,0,0,5);
}
}
|