diff --git a/MainModesArbiter.c b/MainModesArbiter.c index b82aaae..0ef03ac 100644 --- a/MainModesArbiter.c +++ b/MainModesArbiter.c @@ -48,13 +48,14 @@ static _Noreturn void Mma_Thread(tMma *env) { } for (;;) { - +/* LoggerInfoStatic(&env->slog.logger, LOG_TASK_ARB, "Zorro...") printf("Test Test Test Test Test Test Test Test Test Test XA XA ...\n"); GpioPinToggle(&env->gpios->led.LED1); SystemDelayMs(500); +*/ /* if (RGM_SRS_WAKEUP_MASK == (RGM->SRS & RGM_SRS_WAKEUP_MASK)) { @@ -77,37 +78,50 @@ static _Noreturn void Mma_Thread(tMma *env) { LoggerFormatInfo(&env->slog.logger, LOG_TASK_ARB, "Temp2 = %d", temp2) } */ - -/* - + bool isBusy = true; if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { - - if (env->linTaskActuator0.linCommandActuator[0].COM == LIN_ACT_CFR_NONE) { + isBusy = false; + } + osMutexRelease(env->linTaskActuator0.access); + } - switch (step) { - case 0: { + if (isBusy == false) { + + switch (step) { + case 0: { + if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { env->linTaskActuator0.linCommandActuator[0].COM = LIN_ACT_CFR_MOD; env->linTaskActuator0.linCommandActuator[0].BUS_ADR = 0x20; env->linTaskActuator0.linCommandActuator[0].MODE = LIN_MODE_STOP; ++step; - break; + osMutexRelease(env->linTaskActuator0.access); } - case 1: { + break; + } + case 1: { + if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { env->linTaskActuator0.linCommandActuator[0].COM = LIN_ACT_CFR_INI; env->linTaskActuator0.linCommandActuator[0].BUS_ADR = 0x20; env->linTaskActuator0.linCommandActuator[0].POS = 6000; ++step; - break; + osMutexRelease(env->linTaskActuator0.access); } - case 2: { + break; + } + case 2: { + if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { env->linTaskActuator0.linCommandActuator[0].COM = LIN_ACT_CFR_MOD; env->linTaskActuator0.linCommandActuator[0].BUS_ADR = 0x20; env->linTaskActuator0.linCommandActuator[0].MODE = LIN_MODE_NORMAL; ++step; - break; + osMutexRelease(env->linTaskActuator0.access); } - case 3: { + break; + } + case 3: { + if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { + env->linTaskActuator0.linCommandActuator[0].COM = LIN_ACT_CFR_SET; env->linTaskActuator0.linCommandActuator[0].BUS_ADR = 0x20; env->linTaskActuator0.linCommandActuator[0].POS = 0; @@ -116,28 +130,40 @@ static _Noreturn void Mma_Thread(tMma *env) { env->linTaskActuator0.linCommandActuator[0].Autos_SET = 1; env->linTaskActuator0.linCommandActuator[0].Speed_SET = 3; env->linTaskActuator0.linCommandActuator[0].Coils_Stop_SET = 0; - ++step; - break; - } - case 4: { - SystemDelayMs(3000); - ++step; - //if (env->linTaskActuator0.linStateActuator[7].CPOS_ALL == 0) { - // ++step; - //} - break; - } + resetStall(&env->linTaskActuator0); + + ++step; + osMutexRelease(env->linTaskActuator0.access); + } + break; + } + + case 4: { + SystemDelayMs(10000); + asm("nop"); + ++step; + //if (env->linTaskActuator0.linStateActuator[7].CPOS_ALL == 0) { + // ++step; + //} + break; + } + + case 5: { + if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { - case 5: { env->linTaskActuator0.linCommandActuator[0].COM = LIN_ACT_CFR_INI; env->linTaskActuator0.linCommandActuator[0].BUS_ADR = 0x20; env->linTaskActuator0.linCommandActuator[0].POS = 0; ++step; - break; + osMutexRelease(env->linTaskActuator0.access); } + break; + } + + case 6: { + if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { - case 6: { env->linTaskActuator0.linCommandActuator[0].COM = LIN_ACT_CFR_SET; env->linTaskActuator0.linCommandActuator[0].BUS_ADR = 0x20; env->linTaskActuator0.linCommandActuator[0].POS = 6000; @@ -146,18 +172,29 @@ static _Noreturn void Mma_Thread(tMma *env) { env->linTaskActuator0.linCommandActuator[0].Autos_SET = 1; env->linTaskActuator0.linCommandActuator[0].Speed_SET = 3; env->linTaskActuator0.linCommandActuator[0].Coils_Stop_SET = 0; + + resetStall(&env->linTaskActuator0); + ++step; - break; + osMutexRelease(env->linTaskActuator0.access); } + break; + } - case 7: { - if (env->linTaskActuator0.linStateActuator[7].CPOS_ALL >= 6000) { - ++step; - } - break; - } + case 7: { + SystemDelayMs(10000); + asm("nop"); + ++step; + + //if (env->linTaskActuator0.linStateActuator[7].CPOS_ALL >= 6000) { + // ++step; + //} + break; + } + + case 8: { + if (osMutexAcquire(env->linTaskActuator0.access, 5000) == osOK) { - case 8: { env->linTaskActuator0.linCommandActuator[0].COM = LIN_ACT_CFR_SET; env->linTaskActuator0.linCommandActuator[0].BUS_ADR = 0x20; env->linTaskActuator0.linCommandActuator[0].POS = 8000; @@ -166,27 +203,31 @@ static _Noreturn void Mma_Thread(tMma *env) { env->linTaskActuator0.linCommandActuator[0].Autos_SET = 1; env->linTaskActuator0.linCommandActuator[0].Speed_SET = 3; env->linTaskActuator0.linCommandActuator[0].Coils_Stop_SET = 0; + + resetStall(&env->linTaskActuator0); + ++step; - break; - } - - case 9: { - if (env->linTaskActuator0.linStateActuator[7].CPOS_ALL >= 8000) { - ++step; - } - break; - } - - default: { + osMutexRelease(env->linTaskActuator0.access); } + break; } + case 9: { + if (env->linTaskActuator0.linStateActuator[7].CPOS_ALL >= 8000) { + ++step; + } + break; + } + default: { + } } - osMutexRelease(env->linTaskActuator0.access); + } -*/ + + + /* uint16_t len = env->canPorts->Can0_IO.receive(env->canPorts->Can0_IO.env, 0, (uint8_t *)&frame_data, 1, 1000); @@ -205,6 +246,7 @@ static _Noreturn void Mma_Thread(tMma *env) { } */ + SystemDelayMs(100); } } diff --git a/MainModesArbiter_InitStage.c b/MainModesArbiter_InitStage.c index c79fa83..2ab0ad5 100644 --- a/MainModesArbiter_InitStage.c +++ b/MainModesArbiter_InitStage.c @@ -80,7 +80,7 @@ static void Mma_InitSubSystems(tMma *env) { */ tLinData *linData = Lin0_Init(GetLin0CallbackHandler); - Lin_0_Init(&env->linTaskActuator0, linData, &env->linPorts->lin0_Io); + Lin_0_Init(&env->linTaskActuator0, linData, &env->linPorts->lin0_Io, &env->slog.logger); Lin0_StartThread(&env->linTaskActuator0); Adc_0_Init(&env->adcTask0, &env->adcs->adc_0_IO);