Lipyoung 2019-11-22 19:20
浏览 393

为什么ucos当中的延时和阻塞都不执行?

在中断服务函数返回之后,执行当下优先级最高的任务,在任务当中进行延时30s,按此说会阻塞自己转而去执行下一个任务。但是我的延时函数并没有执行,反而直接跳过去执行了下一行代码,这期间我检查了像调度锁、中断嵌套和err 都是0,并没有什么异常但是就是没有执行而且没调度。

void AppTaskSelf_Checking(void *p_arg)
{
    OS_ERR      err_Self_Checking;
    CPU_INT32U  cpu_clk_freq;
    CPU_TS      ts_Start,ts_Stop,ts_ZongChang;
    int cont;
    CPU_SR_ALLOC();
    (void)p_arg;

  cpu_clk_freq = BSP_CPU_ClkFreq();
    printf("\r\n电机自检任务开始·····");
    Plus_flag = 1;  
  Motro_BackOFF(Turn_OFF);      /*给默认转动的方向确定一个参考系            */
    Motor_Forward(Turn_ON);

    while(1)
    {
        if(HuiJiang == 1)                                /*当电机触发上限位or下限位的时候HuiJiang标志为置1 代表可进行回桨限位*/
        {
            OS_CRITICAL_ENTER();
            printf("\r\n进入回桨准备时刻···");
            HuiJiang = 0;                                  /*回桨标志位清0,表示此任务只执行一次*/
            HuiJiangComplete = 1;                          /*回桨完成标志为置1,当另一个限位触发的时候在中断服务函数当中可判定执行命令*/
            RedState = Reverse_limit;                      /*此过程为电机在回桨之前红灯快闪20s*/
            OS_CRITICAL_EXIT();
//          OSTaskSuspend((OS_TCB*)&APPTaskMotorForwardTCB,&err_Self_Checking);
            OSTimeDly(30000,OS_OPT_TIME_DLY,&err_Self_Checking);  /*延时挂起自己20s,此时只有红灯一个任务可执行*/
            LED_RED = 1;
            printf("\r\n回桨已经准备好,得到当下时刻的时间戳···");
            ts_Start = OS_TS_GET();                            
            Motro_BackOFF(Turn_ON);                        /*快闪结束后,得到开启回桨那一时刻的时间戳,等待另一半桨叶限位成功*/

        }
  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥20 腾讯企业邮箱邮件可以恢复么
    • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
    • ¥15 错误 LNK2001 无法解析的外部符号
    • ¥50 安装pyaudiokits失败
    • ¥15 计组这些题应该咋做呀
    • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
    • ¥15 让node服务器有自动加载文件的功能
    • ¥15 jmeter脚本回放有的是对的有的是错的
    • ¥15 r语言蛋白组学相关问题
    • ¥15 Python时间序列如何拟合疏系数模型