05-08-2021, 08:50 PM
(05-08-2021, 08:07 PM)enaB Wrote: Moze da se koristi return u void funkcijama
return;
Ma moze naravno i tako, poenta je bila za izlazenje iz switch/case/if/for uslova, tu ne moze return, nego moze jedino break a ako ti je to ugnjezdeno tamo u vise nivoa onda pocinje da bude naporno jer ne postoji na primer "break 3" kao u nekim jezicima da prekine 3 nivoa ili koliko vec treba pa bude problem, stavis lepo GOTO i skaci gde oces ako znas tacno gde treba.
Evo konkretan primer tamo sa druge teme, bas mi je cucnuo GOTO vise nego bilo koja druga logika
//--------------------------------------------------------
//------------------------ RELAYS ------------------------
//--------------------------------------------------------
void Handle_Relays() {
if (vol_change_flag) {
if (SW_timers[7] == 1) { //prvi prolaz postavljamo sve koje trebaju
if (bitmask1 != 0) GPIOA->BSRR = RY1_on; //PA3 -1dB
if (bitmask2 != 0) GPIOA->BSRR = RY2_on; //PA4 -2dB
if (bitmask3 != 0) GPIOA->BSRR = RY3_on; //PA5 -4dB
if (bitmask4 != 0) GPIOA->BSRR = RY4_on; //PA6 -8dB
if (bitmask5 != 0) GPIOA->BSRR = RY5_on; //PA7 -16dB
if (bitmask6 != 0) GPIOB->BSRR = RY6_on; //PB0 -32dB
if (MyData[DELAY]==0) goto odradi_ostalo; //nema delay odradi i ostalo
} else if (SW_timers[7] >= (MyData[DELAY]+1)) {//kada istekne gasimo koje trebaju
odradi_ostalo:
SW_timers[7] = 0;
vol_change_flag = 0;
if (bitmask1 == 0) GPIOA->BSRR = RY1_off; //PA3 -1dB
if (bitmask2 == 0) GPIOA->BSRR = RY2_off; //PA4 -2dB
if (bitmask3 == 0) GPIOA->BSRR = RY3_off; //PA5 -4dB
if (bitmask4 == 0) GPIOA->BSRR = RY4_off; //PA6 -8dB
if (bitmask5 == 0) GPIOA->BSRR = RY5_off; //PA7 -16dB
if (bitmask6 == 0) GPIOB->BSRR = RY6_off; //PB0 -32dB
}
}
}
// Konfiguracija (72000) za SysTick da radi kao 1kHz (1ms) timer
// Iskoriscen SysTick HW tajmer za jos X SW tajmera + Handle_relays()
void SysTick_Handler (void) {
if (SW_timers_enable[0] == 1) SW_timers[0] ++;
SW_timers[1] ++;
SW_timers[2] ++;
SW_timers[3] ++;
SW_timers[4] ++;
SW_timers[5] ++;
SW_timers[6] ++;
SW_timers[7] ++;
Handle_Relays(); //Function call every 1ms
}