如何实现在ucos_ii中的延时(不进入任务调度)~~~
问题描述:如下是小弟写的一个ucos_ii的一个Task,小弟想在这个Task中实现LED灯的闪烁问题求解:如果使用OSTimeDlyHMSM()函数,会造成任务的重新调用OSSched(),于是小弟想使用OSSchedLock();和OSSchedUnlock();来加嵌套锁,可是仍然看不见LED闪烁
请问大神:该如何解???还有其它方式可以实现延时吗(不进入任务调度)???
static void LED1_Task(void *p_arg)
{
INT8U i=0;
p_arg=p_arg;
LED1_Init();
OSSchedLock();
for(i=0;i<10;i++)
{
GPIO_ResetBits(GPIOB,GPIO_Pin_0);
OSTimeDlyHMSM(0,0,1,0);
GPIO_SetBits(GPIOB,GPIO_Pin_0);
OSTimeDlyHMSM(0,0,1,0);
}
OSSchedUnlock();
OSTaskCreateExt(LED2_Task,
(void *)0,
(OS_STK *)&LED2_Task_Stk,
LED2_TASK_PRIO,
LED2_TASK_PRIO,
(OS_STK *)&LED2_Task_Stk,
LED2_TASK_STK_SIZE,
(void *)0,
OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
}
感觉你这任务写的有问题!!!里面不应该是个死循环吗? 在嘀嗒中断中嵌入一个函数,控制指示灯 zhusizhan 发表于 2015-8-5 14:09
在嘀嗒中断中嵌入一个函数,控制指示灯
大神:你能说的详细点吗?或者有相关代码可以参考~~~
恳请大神指教~ 涵潇舒雅 发表于 2015-8-5 13:10
感觉你这任务写的有问题!!!里面不应该是个死循环吗?
请问大神:是不是任务都必须写成死循环吗?为什么啊
liuchang890811 发表于 2015-8-5 17:15
请问大神:是不是任务都必须写成死循环吗?为什么啊
你如果不写成死循环,哪么任务不就只能运行一次吗? 涵潇舒雅 发表于 2015-8-6 11:44
你如果不写成死循环,哪么任务不就只能运行一次吗?
void led1_task(void *pdata)
{
while(1)
{
LED0=0;
delay_ms(80);
LED0=1;
delay_ms(920);
};
}
}当运行到 delay的时候,任务交出CPU的使用权,这样其他任务就可以获取CPU的权限,delay结束之后,再申请CPU,这样一直循环下去,才能实现闪烁 涵潇舒雅 发表于 2015-8-6 11:48
当运行到 delay的时候,任务交出CPU的使用权,这样其他任务就可以获取CPU的权限,delay结束之后,再申请C ...
硬件初始化,干嘛放到任务里面,在启动系统之前,你应该完成所有的初始化 涵潇舒雅 发表于 2015-8-6 11:51
硬件初始化,干嘛放到任务里面,在启动系统之前,你应该完成所有的初始化 ...
感谢大神指导~ liuchang890811 发表于 2015-8-6 13:38
感谢大神指导~
可能我回答的并不对,你最好找个历程,研究一下~
页:
[1]