ucos-ii 不能进行任务切换

#include<includes.h>#defineTASK_STK_SIZE128OS_STKAppStk_one[TASK_STK_SIZE];OS_STKAppS... #include<includes.h>
#define TASK_STK_SIZE 128
OS_STK AppStk_one[TASK_STK_SIZE];
OS_STK AppStk_two[TASK_STK_SIZE];
OS_STK AppStk_three[TASK_STK_SIZE];
static void App_one(void *p_arg);
static void App_two(void *p_arg);
static void App_three(void *p_arg);
void main(int argc,char *argv[])
{
PC_DispClrScr(DISP_FGND_WHITE + DISP_BGND_BLACK); /* Clear the screen */

OSInit(); /* Initialize uC/OS-II */

PC_DOSSaveReturn(); /* Save environment to return to DOS */
PC_VectSet(uCOS, OSCtxSw); /* Install uC/OS-II's context switch vector */
OSTaskCreate(App_one,NULL,(OS_STK *)&AppStk_one[TASK_STK_SIZE-1],(INT8U) 10);
OSTaskCreate(App_two,NULL,(OS_STK *)&AppStk_two[TASK_STK_SIZE-1],(INT8U) 20);
OSTaskCreate(App_three,NULL,(OS_STK *)&AppStk_three[TASK_STK_SIZE-1],(INT8U) 30);
OSStart();
}
void App_one(void *p_arg)
{

p_arg=p_arg;
while(TRUE)
{
printf("this is App_one,prio=10,Delay 6 second and start again\n\n");
OSTimeDlyHMSM(0,0,0,3000);

}
}

void App_two(void *p_arg)
{

p_arg=p_arg;
while(TRUE)
{
printf("this is App_two,prio=20,Delay 4 second and start again\n\n");
OSTimeDlyHMSM(0,0,0,3000);

}
}
void App_three(void *p_arg)
{

p_arg=p_arg;
while(TRUE)
{
printf("this is App_three,prio=30,Delay 2 second and start again\n\n");
OSTimeDlyHMSM(0,0,2,0);

}
}
展开
 我来答
dzdnwjy
2012-04-14
知道答主
回答量:13
采纳率:0%
帮助的人:12.1万
展开全部
存在4个问题,修改就可以了
(1)主要是在OSStart();前面缺少下列语句,系统老的时钟中断无任务切换功能:
OS_ENTER_CRITICAL();
PC_VectSet(0x08, OSTickISR); /* Install uC/OS-II's clock tick ISR */
PC_SetTickRate(OS_TICKS_PER_SEC); /* Reprogram tick rate */
OS_EXIT_CRITICAL();
(2)printf()是DOS服务,不可重入,必须改成可重入的函数,如PC_DispStr()函数,或者写为
OS_ENTER_CRITICAL();
printf("this is App_one,prio=10,Delay 6 second and start again\n\n");
OS_EXIT_CRITICAL();
等就可以了。原来的系统自带的那几个test程序,就都没有使用printf()函数。
(3)另外OSTimeDlyHMSM(0,0,0,3000)是不允许的,要写为OSTimeDlyHMSM(0,0,3,0);
否则认为OSTimeDlyHMSM()参数无效而忽略,任务App_one不延时而长期循环,不切换。
(4)因为prio=10,20,30,所以OS_CFG.H中要至少定义
#define OS_LOWEST_PRIO 32
否则某些低优先级任务被认为无效,不参与切换。
ch314156
2012-04-10 · TA获得超过4378个赞
知道小有建树答主
回答量:2036
采纳率:100%
帮助的人:1069万
展开全部
你调试一下 是不能任务级任务切换 还是 中断级任务切换
追问
嗯,我把ucos-ii移植到了pc上,原来的系统自带的那几个test程序都可以正常运行,就是自己想修改一个,以备后续系统调度改进后的测试用,可是不能进行正常的切换吧,而且当OSTimeDlyHMSM(0,0,0,3000);的值设置的很小时,循环都只进行一次就停下了,呵呵。。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式