在中断服务函数返回之后,执行当下优先级最高的任务,在任务当中进行延时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); /*快闪结束后,得到开启回桨那一时刻的时间戳,等待另一半桨叶限位成功*/
}