• «
  • 1
  • 2
  • »
  • Pages: 1/2     Go
主题 : 为什么用ucos-II操作系统无法OSTimeDly 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 4140
精华: 0
发帖: 38
金钱: 250 两
威望: 146 点
贡献值: 0 点
综合积分: 76 分
注册时间: 2009-02-28
最后登录: 2013-01-02
楼主  发表于: 2009-05-18 21:43

 为什么用ucos-II操作系统无法OSTimeDly

管理提醒: 本帖被 qq2440 从 Linux技术交流专区 移动到本区(2009-12-27)
为什么用ucos-II操作系统无法OSTimeDly,我的程序是用ucos建立两个任务,一个做初始化优先级高,另一个做Led闪烁,led闪烁程序用OSTimeDly(1)做延时,可以闪烁一次,之后就停止了(死机)。这是为什么?请高手指点。附件里有我的程序。
附件: ucos.rar (186 K) 下载次数:60
级别: 新手上路
UID: 4140
精华: 0
发帖: 38
金钱: 250 两
威望: 146 点
贡献值: 0 点
综合积分: 76 分
注册时间: 2009-02-28
最后登录: 2013-01-02
1楼  发表于: 2009-05-18 22:30

 发错了,再发一次

发错了,再发一次。高手来帮帮忙!!
附件: ucos.rar (332 K) 下载次数:77
级别: 侠客
UID: 4843
精华: 0
发帖: 102
金钱: 810 两
威望: 554 点
贡献值: 0 点
综合积分: 204 分
注册时间: 2009-03-31
最后登录: 2012-11-14
2楼  发表于: 2009-05-19 09:28
所有的任务都要在while(1)循环内;
级别: 新手上路
UID: 16242
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2010-03-15
最后登录: 2010-03-29
3楼  发表于: 2010-03-27 15:21
我的也是这个问题,看怎么解决哦
blp
级别: 新手上路
UID: 13285
精华: 0
发帖: 33
金钱: 165 两
威望: 33 点
贡献值: 0 点
综合积分: 66 分
注册时间: 2010-01-21
最后登录: 2011-12-26
4楼  发表于: 2010-04-14 12:46
遇到同样的问题,建立了2个任务,只运行一次就没反应了,调试了下,发现问题出在OSTimeDly函数这里,不过还没找到原因....
级别: 新手上路
UID: 3261
精华: 0
发帖: 19
金钱: 95 两
威望: 19 点
贡献值: 0 点
综合积分: 38 分
注册时间: 2009-01-02
最后登录: 2013-06-24
5楼  发表于: 2010-06-21 19:29
OSTimeDly(1)你可以看得到他闪的吗?肯定是由灭到亮,这就是你说的亮一次。
还有就是关于调试的问题,我发现,如果涉及到操作系统的切换上下文的操作,软件调试可能会跟不上那个PC的。如果想确认的话,应该在下一个任务那里加个断点,用全速运行,而不是用单步调试,这个方法,就可以验证是不是跑到别的任务里了。
还有的就是有可能关于HardFault,可能就是软件方面的原因。硬件不会出现,软件调试仅供参考。
级别: 新手上路
UID: 20420
精华: 0
发帖: 6
金钱: 30 两
威望: 6 点
贡献值: 0 点
综合积分: 12 分
注册时间: 2010-05-01
最后登录: 2012-12-09
6楼  发表于: 2010-07-23 22:37
我也遇到了这个问题,发现是因为cpsr中的i,f位屏蔽了中断,所以没有定时中断,任务不能切换,导致一直运行taskidle,但是开启了中断程序就飞了,还没找到原因。
级别: 新手上路
UID: 32259
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2010-11-12
最后登录: 2011-05-01
7楼  发表于: 2010-11-12 18:36

 回 6楼(shemily) 的帖子

我的也是这个问题,希望高手出现
级别: 新手上路
UID: 32259
精华: 0
发帖: 9
金钱: 45 两
威望: 9 点
贡献值: 0 点
综合积分: 18 分
注册时间: 2010-11-12
最后登录: 2011-05-01
8楼  发表于: 2010-11-30 18:27
void Main(void)                            
{
    Target_Init();
……

void Target_Init(void)
{……
    Isr_Init();
    Port_Init();
    VIRQ_Relate_Task_Init();
    Timer1INT_Init();
}
/*
*************************************************************************************************************
- 函数名称 : VIRQ_Relate_task_Init(void)
- 函数说明 : 和任务调度相关的向量中断的初始化程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void VIRQ_Relate_Task_Init(void)
{
    pISR_TIMER1 = (INT32U)UCOS_IRQHandler;                              // 在OS_CPU_A.S中定义,在OS_CPU.H中声明
}
/*
*************************************************************************************************************
- 函数名称 : void Timer1INT_Init(void)
- 函数说明 : 定时器中断初始化程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/    
void Timer1INT_Init(void)                                     //定时器接口使能
{
     if ((rINTPND & BIT_TIMER1))
    {
        rSRCPND |= BIT_TIMER1;
    }
    rINTMSK  &= ~(BIT_TIMER1);  //开中断;    
}
/*
*************************************************************************************************************
- 函数名称 : void Timer1_Tick_ISR(void)
- 函数说明 : 系统时钟节拍中断服务子程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void Timer1_Tick_ISR(void)
{
    
    OSTimeTick();
    ClearPending(BIT_TIMER1);
                                                                             //清除节拍中断
}
/*
*************************************************************************************************************
- 函数名称 : C_IRQHandler(void)
- 函数说明 : 切进UCOS中的处理IRQ的被调程序
- 输入参数 : 无
- 输出参数 : 无
*************************************************************************************************************
*/
void  C_IRQHandler(void)
{
    INT32U reg;
    
    reg = rINTPND;
    
    switch (reg)
    {            
        case BIT_TIMER1:
        Timer1_Tick_ISR();                // 脉跳时钟节拍中断服务子程序
    break;
        default :
       break;
    }
}
总的来说,在板子初始化的时候,要为ucos的OSTimeDly,OSTimeHSMS等延时函数,关联到硬件设备的定时器上,上面是代码是:用TIMER1实现UCOS的延时,或者说时钟节拍。对TIMER1的中断向量的初始化,中断服务程序的指定。中断服务程序Timer1_Tick_ISR()里一定要调用OSTimeTick(),这样就把UCOS的时钟节拍与硬件关联起来了。
级别: 新手上路
UID: 33979
精华: 0
发帖: 4
金钱: 20 两
威望: 4 点
贡献值: 0 点
综合积分: 8 分
注册时间: 2010-12-08
最后登录: 2010-12-15
9楼  发表于: 2010-12-08 23:30
我的系统也差不多是这个问题,系统时间在走,但是任务总是切换不了,创建的三个任务都是只运行一遍,然后就自动跳到idle任务了,折磨一天了……
  • «
  • 1
  • 2
  • »
  • Pages: 1/2     Go