4004|2

71

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

SOS:ucOS中,第2次调用OSTimeDly()死机 [复制链接]

 我按照步骤把 ucos 移植到 ZLG 的 easyARM 开发板上,前面工作进行的挺顺利,但最近被这个问题给卡住了,半个月了,还没有搞定。
请求高手解疑释惑啊:

在一些初始化工作之后,创建了两个任务:
void main(void)
{
    OSInit();
    (void)OSTaskCreate(task_idle, (void *)0, &TaskIdleStk[TASK_STK_SIZE - 1], OS_LOWEST_PRIO - 4);
    (void)OSTaskCreate(task_handset, (void *)0, &TaskHandsetStk[TASK_STK_SIZE - 1], 5);
    OSStart();
}

两个 task 代码如下:
void task_idle(void * pdata)
{
    for (;;)
    {
        LED_flash(1);
        delay_NS(LED_FLASH_KEEP_TIME);
    }
}

void task_handset(void * pdata)
{
    timer_init();
    for (;;)
    {
        LED_flash(2);
        OSTimeDly(OS_TICKS_PER_SEC);
    }
}

其中 task_handset 的优先级比 task_idle 的优先级高,所以我在 task_handset 中启动时钟中断定时器。
时钟中断处理函数是按照 easyARM 开发版的标准模板写的,其中通过如下函数调用 ucos 的 tick 函数:

void IRQ_Timer0(void)
{
    T0IR = 0x01;        // Clear IR flag.
    VICVectAddr = 0x00; // Notify VIC work has done.
    LED_flash(7);
    OSTimeTick();
}

由于笔记本上没有并口,不能用 ZLG 带的 easyJTAG,只能用 LED 指示;

运行现象如下:

1. LED 2 亮一下,说明 task_hanset 启动了,同时 delay;
2. LED1 闪烁,同时 LED 7 闪烁,说明 task_idle 运行正常,时钟中断函数运行正常;
3. 过一会 LED 2 亮一下,之后就死机了。
应该是 task_handset delay 时间到,由于其优先级高,所以抢占执行,LED 2 亮一下是正常的,但是之后第二次调用 OSTimeDly 就死机了,不知道为什么。

跪求高手指点迷津????

最新回复

UCOS有个系统时钟的,你要注意你的第二个任务是否占用了这个时钟  详情 回复 发表于 2008-4-18 14:07
点赞 关注
 

回复
举报

69

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
在OSTimeDly函数的头做断点,然后单步,试试,不过有个系统时钟在也比较麻烦
 
 
 

回复

85

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
UCOS有个系统时钟的,你要注意你的第二个任务是否占用了这个时钟
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播:当AI遇见仿真,会有什么样的电子行业革新之路?
首场直播:Simcenter AI 赋能电子行业研发创新
直播时间:04月15日14:00-14:50

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 12

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表