
UCOS 操作系统 问题 10
intmain(void){CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);LED_Init();__enable_inter...
int main(void)
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
LED_Init();
__enable_interrupt();
OSInit();
OSTaskCreate(TestTask1,(void *)0,&TestTaskStk1[99],0);
OSStart();
}
void TestTask1(void *pdata)
{
char flag=0;
pdata=pdata;
Tim1_Init(); //初始化定时器 10ms一次中断
SetLedON();
while(1)
{
OSTimeDly(100); //程序在此休眠,进入别的任务,等到调用OSTimeISR中的OSTickTime进行检测是否有优先级更高的任务
if(flag==0)
{
SetLedOFF();
flag=1;
}
else
{
SetLedON();
flag=0;
}
}
}
1:如上代码,为什么在任务中要有一个OSTimeDly(100); 没有这个延时不行吗?
没有延时是不是就不会运行低优先级的任务了?为什么?
2:如果再创建一个任务,是不是写个像void TestTask1(void *pdata) 这样的函数就OK 了,要注意哪些地方代码变化?
求高手指教。 展开
{
CLK_HSIPrescalerConfig(CLK_PRESCALER_HSIDIV1);
LED_Init();
__enable_interrupt();
OSInit();
OSTaskCreate(TestTask1,(void *)0,&TestTaskStk1[99],0);
OSStart();
}
void TestTask1(void *pdata)
{
char flag=0;
pdata=pdata;
Tim1_Init(); //初始化定时器 10ms一次中断
SetLedON();
while(1)
{
OSTimeDly(100); //程序在此休眠,进入别的任务,等到调用OSTimeISR中的OSTickTime进行检测是否有优先级更高的任务
if(flag==0)
{
SetLedOFF();
flag=1;
}
else
{
SetLedON();
flag=0;
}
}
}
1:如上代码,为什么在任务中要有一个OSTimeDly(100); 没有这个延时不行吗?
没有延时是不是就不会运行低优先级的任务了?为什么?
2:如果再创建一个任务,是不是写个像void TestTask1(void *pdata) 这样的函数就OK 了,要注意哪些地方代码变化?
求高手指教。 展开
展开全部
1.ucos建议每个任务都在适当的地方加入延时函数,以避免死在一个任务中系统瘫痪;但不是必须的,如果一个任务通过pend其他任务或isr发送的事件,事件没有被post前会自动挂起,调度其他就绪任务中最高优先级任务执行。
2.新建立一个任务,至少要给他分配一个堆栈,定义任务函数体(类似TestTask1()),并调用OSTaskCreate()创建任务。
2.新建立一个任务,至少要给他分配一个堆栈,定义任务函数体(类似TestTask1()),并调用OSTaskCreate()创建任务。

2023-12-06 广告
UIkit是一套轻量级、模块化且易于使用的开源UI组件库,由YOOtheme团队开发。它提供了丰富的界面元素,包括按钮、表单、表格、对话框、滑块、下拉菜单、选项卡等等,适用于各种类型的网站和应用程序。UIkit还支持响应式设计,可以根据不同...
点击进入详情页
本回答由网易云信提供
2012-12-07
展开全部
1、没有延时也行,但是led变化就看不出来了,低优先级的还会运行的
2、可以这样创建任务,但是要现在main里创建,如:
上面的OSTaskCreate(TestTask1,(void *)0,&TestTaskStk1[99],0);
而且堆栈要先声明。不过一般不用优先级为0的任务
OSTaskCreate(TestTask1, (void *)0, (void *)&TaskStk1[99],6); /*建立任务1 */
OSTaskCreate(TestTask2, (void *)0, (void *)&TaskStk2[99],7); /*建立任务2 */
2、可以这样创建任务,但是要现在main里创建,如:
上面的OSTaskCreate(TestTask1,(void *)0,&TestTaskStk1[99],0);
而且堆栈要先声明。不过一般不用优先级为0的任务
OSTaskCreate(TestTask1, (void *)0, (void *)&TaskStk1[99],6); /*建立任务1 */
OSTaskCreate(TestTask2, (void *)0, (void *)&TaskStk2[99],7); /*建立任务2 */
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询