完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
在执行任务时,任务是个死循环,那么系统是什么时候去执行另一个任务的?如何实现的?
我看到任务中并没有去执行软中断函数啊 PS:我看的是《嵌入式实时操作系统UCOSII原理及应用》这本书里的例程 void MyTask (void *pdata) { char* s_Y="Y"; //定义要显示的字符 #if OS_CRItiCAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif pdata = pdata; OS_ENTER_CRITICAL(); PC_VectSet(0x08, OSTickISR); //安装uCOS_II时钟中断向量 PC_SetTickRate(OS_TICKS_PER_SEC); //设置uCOS_II时钟频率 OS_EXIT_CRITICAL(); OSStatInit(); //初始化uCOS_II的统计任务 OSTaskCreate(YouTask, //创建任务MyTask s_Y, //给任务传递参数 &YouTaskStk[TASK_STK_SIZE - 1], //设置任务堆栈栈顶指针 2); //使任务MyTask的优先级别为0 for (;;) { if (x>50) { x=0; y+=2; } PC_DispChar(x, y, //显示字符的位置 *(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; //如果按下Esc键则退出uCOS_II if (PC_GetKey(&key) == TRUE) { if (key == 0x1B) { PC_DOSReturn(); } } OSTimeDlyHMSM(0, 0, 3, 0); //等待 } } /************************任务YouTask*****************************************/ void YouTask (void *pdata) { #if OS_CRITICAL_METHOD == 3 OS_CPU_SR cpu_sr; #endif pdata = pdata; for (;;) { if(time==20) { OSTaskSuspend(0); } if(time==40) { OSTaskResume(0); } time+=1; if (x>50) { x=0; y+=2; } PC_DispChar(x, y, //显示字符的位置 *(char*)pdata, DISP_BGND_BLACK+DISP_FGND_WHITE ); x += 1; OSTimeDlyHMSM(0, 0, 1, 0); //等待 } } |
|
相关推荐
1个回答
|
|
mytask在进入延时的时候,会被挂起,释放cpu资源,这时最高优先级就绪任务youtask开始执行
|
|
|
|
只有小组成员才能发言,加入小组>>
UCOSII中断中添加OSSemPost(Sem);程序无法运行
4979 浏览 1 评论
在BC5.0上编译uC/OS-II出现"eeror writing object file",怎样处理???
3193 浏览 1 评论
560浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 04:38 , Processed in 0.612344 second(s), Total 79, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号