Keil - мой цикл while не работает

while-loop arm keil

651 просмотра

1 ответ

Я использую микроконтроллер STM32F на Keil. У меня проблема whileили forпетли. Общий код - мой неисправный раздел. Мой цикл for или while не работает. Я остался "шаг = 2" и "счетчик = 0". Я попробовал освободить и отладить режим. Режим отладки Я видел этот экран просмотра результатов; step = 1 (WaitData = 1) после увеличения systemtick после этого systemtick = 5000 после этого step = 2 (systemtick = 0 waitdata = 0), но стек кода в цикле for.

#include "stm32f4xx_hal.h"
#include <stdio.h>
#include <stdlib.h>

int step = 0;
int waitdata = 0;
int systemtick1 = 0;
int counter = 0;
void HAL_SYSTICK_Callback(void)
{
    if (WaitData == 1)
    {
        systemtick1++;
        if (systemtick1 == 5000)
        {
            step = 2;
            systemtick1 = 0;
            WaitData = 0;
        }
    }
}

int main(void)
{
    HAL_Init();
    SystemClock_Config();
    MX_GPIO_Init();
    HAL_Delay(2000);
    step = 1;
    WaitData = 1;

    for (; WaitData==1 ; ) // Or while (WaitData == 1);
    {
        asc++;
    }

    step = 3;
    while (1)
    {
    }
}
Автор: O.Blue Источник Размещён: 08.11.2019 11:11

Ответы (1)


2 плюса

Переменные, которые вы изменяете в прерывании, должны быть установлены как volatile, потому что вы не знаете, как компилятор его оптимизирует.

Доступ к переменным в основном осуществляется последовательным, предсказуемым способом. Но прерывание не предсказуемо; поэтому вам нужно использовать, volatileчтобы иметь возможность изменять переменную вне обычного «программного» потока.

Автор: Michal D Размещён: 03.11.2016 07:51
Вопросы из категории :
32x32