野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2573|回复: 3

[liteOS] LiteOS的任务必须是死循环吗?

[复制链接]
发表于 2021-9-26 16:09:22 | 显示全部楼层 |阅读模式
野火的LiteOS提到 任务都是死循环,不能返回[4.2.3小节]。但是在LiteOS文档网页上的例程却不是死循环,如下程序。请问区别在哪?

UINT32 Example_TaskHi(VOID)
{
    UINT32 ret;

    printf("Enter TaskHi Handler.\r\n");

    /* 延时2个Tick,延时后该任务会挂起,执行剩余任务中最高优先级的任务(g_taskLoId任务) */
    ret = LOS_TaskDelay(2);
    if (ret != LOS_OK) {
        printf("Delay Task Failed.\r\n");
        return LOS_NOK;
    }

    /* 2个Tick时间到了后,该任务恢复,继续执行 */
    printf("TaskHi LOS_TaskDelay Done.\r\n");

    /* 挂起自身任务 */
    ret = LOS_TaskSuspend(g_taskHiId);
    if (ret != LOS_OK) {
        printf("Suspend TaskHi Failed.\r\n");
        return LOS_NOK;
    }
    printf("TaskHi LOS_TaskResume Success.\r\n");

    return ret;
}


回复

使用道具 举报

 楼主| 发表于 2021-9-26 16:11:59 | 显示全部楼层
还有一个采集传感器的例程,Task函数也不是死循环,但是看结果是一直在采集的。
https://support.huaweicloud.com/ ... pic_0257176492.html
STATIC VOID MiscTask(VOID const *arg)
{
    (VOID)(arg);
    // I2C init
    I2cMaster_Init();
    SensorManagerInit();
    LOS_TaskDelay(1000);
    GyroSensorRegister();
    InitGyro();
    OpenGyro();
    LOS_TaskDelay(20000);
    CloseGyro();
    OpenGyro();
    LOS_TaskDelay(100000);
    CloseGyro();
}
回复 支持 反对

使用道具 举报

发表于 2021-9-27 09:02:00 | 显示全部楼层
是的,os里的任务都是死循环
回复 支持 反对

使用道具 举报

发表于 2021-12-9 09:59:23 | 显示全部楼层
如果不是死循环的话,执行完最后一条语句,此时又没有任务调度和中断发生,  执行完最后一条语句后该让CPU执行哪里呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-5-3 09:08 , Processed in 0.048135 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表