打印
[uCOS/RTOS]

如何实现在ucos_ii中的延时(不进入任务调度)~~~

[复制链接]
4347|11
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuchang890811|  楼主 | 2015-8-4 14:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
问题描述:如下是小弟写的一个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_STK_SIZE-1],
                                        LED2_TASK_PRIO,
                                        LED2_TASK_PRIO,
                                        (OS_STK *)&LED2_Task_Stk[0],
                                        LED2_TASK_STK_SIZE,
                                        (void *)0,
                                        OS_TASK_OPT_STK_CHK|OS_TASK_OPT_STK_CLR);
}

相关帖子

沙发
涵潇舒雅| | 2015-8-5 13:10 | 只看该作者
感觉你这任务写的有问题!!!里面不应该是个死循环吗?

使用特权

评论回复
来自iphone 5s
板凳
zhusizhan| | 2015-8-5 14:09 | 只看该作者
在嘀嗒中断中嵌入一个函数,控制指示灯

使用特权

评论回复
地板
liuchang890811|  楼主 | 2015-8-5 16:25 | 只看该作者
zhusizhan 发表于 2015-8-5 14:09
在嘀嗒中断中嵌入一个函数,控制指示灯

大神:你能说的详细点吗?或者有相关代码可以参考~~~
恳请大神指教~

使用特权

评论回复
5
liuchang890811|  楼主 | 2015-8-5 17:15 | 只看该作者
涵潇舒雅 发表于 2015-8-5 13:10
感觉你这任务写的有问题!!!里面不应该是个死循环吗?

请问大神:是不是任务都必须写成死循环吗?为什么啊

使用特权

评论回复
6
涵潇舒雅| | 2015-8-6 11:44 | 只看该作者
liuchang890811 发表于 2015-8-5 17:15
请问大神:是不是任务都必须写成死循环吗?为什么啊

你如果不写成死循环,哪么任务不就只能运行一次吗?

使用特权

评论回复
7
涵潇舒雅| | 2015-8-6 11:48 | 只看该作者
涵潇舒雅 发表于 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,这样一直循环下去,才能实现闪烁

使用特权

评论回复
评论
金木木 2020-3-5 16:42 回复TA
哦……是不是下次获得cpu权限就从第一个delay开始执行 
金木木 2020-3-5 16:41 回复TA
那会不会每次都只运行到第一个delay就交出cpu权限了呢 
8
涵潇舒雅| | 2015-8-6 11:51 | 只看该作者
涵潇舒雅 发表于 2015-8-6 11:48
当运行到 delay的时候,任务交出CPU的使用权,这样其他任务就可以获取CPU的权限,delay结束之后,再申请C ...

硬件初始化,干嘛放到任务里面,在启动系统之前,你应该完成所有的初始化

使用特权

评论回复
9
liuchang890811|  楼主 | 2015-8-6 13:38 | 只看该作者
涵潇舒雅 发表于 2015-8-6 11:51
硬件初始化,干嘛放到任务里面,在启动系统之前,你应该完成所有的初始化 ...

感谢大神指导~

使用特权

评论回复
10
涵潇舒雅| | 2015-8-6 13:49 | 只看该作者

可能我回答的并不对,你最好找个历程,研究一下~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

34

主题

87

帖子

0

粉丝