ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
996115 Топик полностью
Bill (17.04.2020 19:37, просмотров: 548) ответил fk0 на Не еби мозги, покажи код полностью, все функции где используется Mode и декларации переменных, типов, констант. Стопудова у тебя где-то цикл, в котором компилятор, считает, Mode меняться не может, и делает оптимизацию. А меняешь где-то из прерывания и т.п.
Задолбали! Вот вся функция 
/*    *** Main function ***        */

__task void main(void)
    {
    char    c;

    MCUinit();    // Initialize ports
    LEDinit();    // Initialize LED driver
    ADCinit();    // Initialize ADC
    InitButtons();
    Ch2_low        = eCh2_low;    // Restore settings from EEPROM
    Ch2_high    = eCh2_high;        //
    Ch1_low        = eCh1_low;        //
    Ch1_high    = eCh1_high;        //
    Adjst1         = eAdjst1;        //
    Adjst2         = eAdjst2;        //
    InitTimers();            // Timers initialization
    SetRelay1(0);            // Turn relays off
    SetRelay2(0);                //
    Mode |= CH1_DSPLY;    // Display channel 1
    __enable_interrupt();
#ifdef CO2_C2    // 2 channels
#endif
    for (;;)        // Do forever
        {
        IWDG_KR = 0xAA;            // Reset watchdog
        c = GetButtons();        // Check the buttons
        if (c & ENTER_BTN)        // Do setups
            Setup();            //
#ifdef CO2_C2    // 2 channels
        if (c &  PROG_BTN)        // Change display mode
            Mode ^= CH1_DSPLY;        //
#endif
//        if (c & SETUP_BTN)        // Change the heater mode
//            SetMode();            //
        if (IntFlags & TIM2_BIT)        //
            {                //
            IntFlags &= ~TIM2_BIT;        //
            CO2_ppm1    = GetCO2_ppm(1);
#ifdef CO2_C2    // 2 channels
            CO2_ppm2    = GetCO2_ppm(2);
//            while (!(IntFlags & TIM2_BIT));
//            IntFlags &= ~TIM2_BIT;        //
#endif
            DisplayCO2((Mode & CH1_DSPLY)? 1 : 2);    // Display CO2 value
/*
            if (Mode & CH1_DSPLY)
                DisplayCO2(1);        // Display CO2 channel 1 value
            else
                DisplayCO2(2);        // Display CO2 channel 2 value
*/
            if (Ch1_low <= Ch1_high)
                Purge1();
            else
                Pump1();
#ifdef CO2_C2    // 2 channels
            if (Ch2_low <= Ch2_high)
                Purge2();
            else
                Pump2();
#endif
            }                //
        }                    //
    }