Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
 Аватар для WetFil
1 / 1 / 3
Регистрация: 19.05.2013
Сообщений: 94

Функция выполняется не во время цикла - а после выхода из него

10.02.2016, 15:00. Показов 2210. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В общем светодиоды должны загорать один за другим во время выполнения цикла, но они загораются все после окончания цикла. Подскажите как сделать так, что бы они загорались один за другим.
C++
1
2
3
4
5
for(a = 0; a < LED_NUMBER_MAX; a++)
{       
    modIndication_SetLedMode(a, on);
    HAL_Delay(1000);
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.02.2016, 15:00
Ответы с готовыми решениями:

Не выполняется условие выхода из цикла
задание вот такое, подобное делал прога не сохранилась обратиться не куда( прога фигачит без остановки, накосячил по неумности) program...

Массив пустой после выхода из цикла?
Помоги пожалуйста не могу понять почему при таком коде внутри цикла массив вроде работает, а вот после выхода из цикла он точно пустой? На...

После выхода из цикла for значение зануляется и не возвращается
Здравствуйте. Я учу с С++ недавно, может быть мой вопрос тупой, но нигде больше не нашёл такого.. Писал прогу для вывода степени 2ки, но...

28
 Аватар для WetFil
1 / 1 / 3
Регистрация: 19.05.2013
Сообщений: 94
10.02.2016, 16:20  [ТС]
Студворк — интернет-сервис помощи студентам
На отладочной плате - контроллер stm32

Добавлено через 25 секунд
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
void ApplyCurrenLedsState(unsigned char blinkPhase) {
    unsigned char i = 0;
    
    for (i = 0; i < LED_NUMBER_MAX; i++) {
        switch (LedPanel[i].checkedState) {
            case on:
                LedOn(LedPanel[i].GPIOx, LedPanel[i].GPIO_Pin);
                break;
 
            case off:
                LedOff(LedPanel[i].GPIOx, LedPanel[i].GPIO_Pin);
                break;
 
            case blink:
                switch (blinkPhase) {
                    case 0:
                        LedOff(LedPanel[i].GPIOx, LedPanel[i].GPIO_Pin);
                        break;
                    case 1:
                        LedOn(LedPanel[i].GPIOx, LedPanel[i].GPIO_Pin);
                        break;
                    /*default:
                        LedOff(LedPanel[i].GPIOx, LedPanel[i].GPIO_Pin);
                        break;*/
                }
                break;
 
         /*   default:
                LedOff(LedPanel[i].GPIOx, LedPanel[i].GPIO_Pin);
                break;*/
        }
    }
}
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
10.02.2016, 16:22
WetFil, теперь вместо своего цикла
C++
1
2
3
4
5
for(a = 0; a < LED_NUMBER_MAX; a++)
{       
    modIndication_SetLedMode(a, on);
    HAL_Delay(1000);
}
попробуй вот так
C++
1
2
3
4
5
for(a = 0; a < LED_NUMBER_MAX; a++)
{       
    LedOn(LedPanel[a].GPIOx, LedPanel[a].GPIO_Pin);
    HAL_Delay(1000);
}
1
 Аватар для WetFil
1 / 1 / 3
Регистрация: 19.05.2013
Сообщений: 94
10.02.2016, 16:29  [ТС]
не пойдёт - эта функция скрыта
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
10.02.2016, 16:35
Лучший ответ Сообщение было отмечено WetFil как решение

Решение

а вот так
C++
1
2
3
4
5
6
for(a = 0; a < LED_NUMBER_MAX; a++)
{       
    modIndication_SetLedMode(a, on);
    ApplyCurrenLedsState(0);
    HAL_Delay(1000);
}
в общем твоя функция modIndication_SetLedMode только меняет значение переменной, нужно еще зажечь светодиоды.
1
 Аватар для WetFil
1 / 1 / 3
Регистрация: 19.05.2013
Сообщений: 94
10.02.2016, 16:38  [ТС]
работает, спасибо, но объясните почему пожалуйста)
0
 Аватар для Kastaneda
5232 / 3206 / 362
Регистрация: 12.12.2009
Сообщений: 8,143
Записей в блоге: 2
10.02.2016, 16:41
Цитата Сообщение от WetFil Посмотреть сообщение
но объясните почему пожалуйста)
я ж объяснил
Цитата Сообщение от Kastaneda Посмотреть сообщение
в общем твоя функция modIndication_SetLedMode только меняет значение переменной, нужно еще зажечь светодиоды.
То, что я показал - это костыль (просто, чтоб убедиться, что я прав). Нужно нормально переписать, либо сделать отдельную реализацию ApplyCurrenLedsState для одного светодиода.
0
260 / 87 / 30
Регистрация: 29.10.2015
Сообщений: 196
10.02.2016, 16:43
А что-то типа jtag-отладчика на этой плате присутствует?

Попробуйте что-то типа такого:
C++
1
2
3
4
5
6
7
8
9
10
while(1)
{
for(a = 0; a < LED_NUMBER_MAX; a++)
{       
    LedOn(LedPanel[a].GPIOx, LedPanel[a].GPIO_Pin);
    HAL_Delay(1000);
    LedOff(LedPanel[a].GPIOx, LedPanel[a].GPIO_Pin);//и вот на эту строку поставьте брекпоинт
    HAL_Delay(1000);
}
}
На указанную строку поставьте брекпоинт, и пошагово повыполняйте цикл до этой строки и посмотрите, будет ли меняться состояние диодов.

Если внутрисхемной отладки нет - то просто хотя бы запустите такой код и посмотите, будет ли хоть какое-то мигане. В идеале - поприкладывать к диодам поочередно щуп осциллографа и посмотреть, меняется ли там сингал вообще. В идеале должен быть импульс с большой скважностью.

Далее, если этот тест не приведет к результату - зациклите программу по-другому:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
while(1)
{
for(a = 0; a < LED_NUMBER_MAX; a++)
{       
    LedOn(LedPanel[a].GPIOx, LedPanel[a].GPIO_Pin);
}
    HAL_Delay(1000);
for(a = 0; a < LED_NUMBER_MAX; a++)
{       
    LedOff(LedPanel[a].GPIOx, LedPanel[a].GPIO_Pin);//и вот на эту строку поставьте брекпоинт
}
    HAL_Delay(1000);
}
В любом случае, постарайтесь увидеть, где происходит изменение состояний диодов, и в зацикленном режиме - соответствуют ли периоды рассчетным значениям.

Добавлено через 1 минуту
Цитата Сообщение от WetFil Посмотреть сообщение
работает, спасибо, но объясните почему пожалуйста)
Упс... уже разобрались сами, пока я тест придумывал...
1
 Аватар для WetFil
1 / 1 / 3
Регистрация: 19.05.2013
Сообщений: 94
10.02.2016, 16:46  [ТС]
C++
1
2
3
4
5
6
7
8
modIndication_SetLedMode(i, on);
   modIndication_Run();
   HAL_Delay(1000);
   modIndication_SetLedMode(i, off);
   if (i == LED_NUMBER_MAX - 1)
    i = 0;
   else
    i++;
а я ещё вот так попробовал) получилось
0
10.02.2016, 17:06

Не по теме:

Отладчик-то работает на этой плате? Много проблем позволяет увидеть..

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.02.2016, 17:06

Не выполняется код после цикла
Всем доброго времени суток. 2 дня назад я решил серьёзно взяться за изучение С. По совету многих знакомых читаю Кернигана и Ритчи. У меня...

Условный оператор цикла и после него. Pascal ABC
1.Найти все целые числа из промежутка от А до В, у которых количество делителей равно К. Если таких чисел нет, то должно быть напечатано...

Cоздать файл OLD.T из элементов типа char с помощью цикла repeat, признак выхода из цикла символ (!)
Построить программу в лазарусе, которая создает файл OLD.T из элементов типа char с помощью цикла repeat, признак выхода из цикла символ...

Через какое время после закрытия броузера выполняется в global.asa function Session_OnEnd() { } ?
Через какое время после закрытия броузера выполняется в global.asa function Session_OnEnd() { }

Тело какого из перечисленных операторов цикла выполняется как минимум один раз, независимо от значения параметра цикла
Оператор цикла, тело которого выполняется как минимум один раз независимо от значения параметра цикла: 1. WHILE 2. REPEAT 3. FOR X=A...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Nekobox - outbounds[0].transport: unknown transport type: raw
damix 01.10.2026
Фикс ошибки Правым кликом по серверу -> отладочная информация -> edit Заменить "net": "raw", на "net": "tcp", Нажать кнопку reload.
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru