Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ARM, Cortex, STM32
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.78/72: Рейтинг темы: голосов - 72, средняя оценка - 4.78
x0rOS

STM32 Алгоритм

20.03.2013, 18:48. Показов 14353. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет.
Суть: имеется бесконечный цикл в котором непрерывно выполняется Задача1.
По прерыванию(от нажатия кнопки) в бесконечном цикле должна выполняться Задача2.
При следующем нажатии - снова запуск Задачи1 и т.д.
В основном цикле не должно быть проверок - какой режим включен. (т.е. менять флажки в прерывании не подходит)

Пока остановился на двух вариантах решения:
1. Каждый раз переписывать тело цикла. Очевидно, не самое рациональное решение и насколько я понимаю, трудно осуществимо в микроконтроллерах.
2. Создать две функции с циклами для Задачи1 и Задачи2. И по прерыванию завершать одну функцию и вызывать другую.
Но проблема в том, как именно это осуществить. Точнее, не понятно как завершать предыдущую функцию из прерывания. А если не завершать то в стеке будет копиться мусор и ничем хорошим это не закончится.

-----
Контроллер STM32, Си.

Спасибо!
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.03.2013, 18:48
Ответы с готовыми решениями:

Чем связать STM32 + STM32 в одном корпусе?
Есть 2 платы: (1) - STM32 (Вывод на LCD + запись SD) и (2) - STM32F4 (обработка сигналов + коммуникация с датчиками). Чем связать данные...

Общение с барометром MS5540 на STM32 (Arduino to STM32)
Получил от китайца сей аппарат, пошел тут же гуглить что нибудь готовое, но не тут то было. Информации по нем очень мало, даже на Arduino...

stm32 + FSMC + stm32
Доброе времени суток. Возможно ли к Ftosh памяти подцепить два Stm32F4. Один МК будет записывать данные на флеш, второй забирать и...

26
Kimyus
20.03.2013, 23:34
Студворк — интернет-сервис помощи студентам
Зацикленность задач это уже другая вводная, тут как то уже к ртос всё ближе.

Вообщем, направление моей мысли вы поняли, может какие-нибудь вариации на эту тему и пригодятся. К вечеру уже плохо соображается
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 140
20.03.2013, 23:43
Цитата Сообщение от x0rOS
>Т.е. в прерывании инициализируем указатель стека и прыгаем в диспетчер задач.
Зачем в диспетчер? Я могу сразу в стек адрес нужной задачи кинуть. Но снова же. Стек предыдущей незавершенной функции будет мусорить. Или нет?
Фактически мой вариант - это программный сброс МК, т.е. как если бы он делал jmp 0.
Указатель стека мы установим на начало, т.е. что было до того в стеке - по барабану.
Даже если в памяти останется мусор, то нам он до фонаря, потому что он затрется нужной информацией.
Кажется не очень хорошо объяснил.
Хотя вариант этот достаточно шизанутый и я бы не стал так делать никогда, но, возможно, в данном случае он будет вполне уместен, но это Вам видней.

Кстати еще идея.
Формируем в верхушке стека dw с указателем, который Вы будете менять в прерывании, после этого на этот адрес интим укаатель стека и делаем ret.
0
x0rOS
20.03.2013, 23:48
kysoft, понял. Отличная идея. Только глобальные переменные умрут( А мне глобальный указатель нужен на буфер ктороый я обрабатываю в свой задаче. Этот указатель у меня отрабатывается когда я уже в прерывании по таймеру.
Посмотрим, что можно придумать, но идея хорошая.

>Кстати еще идея.
>Формируем в верхушке стека dw с указателем, который Вы будете менять в прерывании, после этого на этот адрес интим укаатель стека и делаем ret.
Гениально. Выйдем сразу за циклом и конкретно завершим функцию.
А теперь вопрос, как это сделать в Сях?=)
----
PS пока остановился на автомате, когда очень подгорит займусь оптимизацией.
Интеллектуальный онанизм иногда тоже полезен=)
0 / 0 / 0
Регистрация: 13.01.2013
Сообщений: 140
21.03.2013, 00:00
Цитата Сообщение от x0rOS
kysoft, понял. Отличная идея. Только глобальные переменные умрут( А мне глобальный указатель нужен на буфер ктороый я обрабатываю в свой задаче. Этот указатель у меня отрабатывается когда я уже в прерывании по таймеру.
Посмотрим, что можно придумать, но идея хорошая.
Сдается мне что я всё это в расчете на ассемблер думаю, а у Вас, кажется С. Ну да вот еще мысли, может натолкнет на что.
Переменные умрут, если они в стеке, а если в фиксированной области памяти, то куда они денутся. Хотя, кажется я понял, о каких переменных речь. Тогда еще идея, в прерывании сохранять нужные регистры в определенную область памяти, а нужные переменные держать в регистрах. Для каждой задачи отвести свою область памяти, в которой и держать сохраненные регистры.
В данной задаче большой плюс в том, что МК не обременен ОС или еще какой другой "нагрузкой", потому крутить стеком можно как угодно. Только всё это достаточно жестко программировать и область применения достаточно узкая, но..
А еще можно попробовать совместить ассемблер с С, задачи на С, а эта монстрятина на ассемблере.
0
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
21.03.2013, 21:28
Цитата Сообщение от kysoft
Сдается мне что я всё это в расчете на ассемблер думаю, а у Вас, кажется С. Ну да вот еще мысли, может натолкнет на что.
Переменные умрут, если они в стеке, а если в фиксированной области памяти, то куда они денутся. Хотя, кажется я понял, о каких переменных речь. Тогда еще идея, в прерывании сохранять нужные регистры в определенную область памяти, а нужные переменные держать в регистрах. Для каждой задачи отвести свою область памяти, в которой и держать сохраненные регистры.
В данной задаче большой плюс в том, что МК не обременен ОС или еще какой другой "нагрузкой", потому крутить стеком можно как угодно. Только всё это достаточно жестко программировать и область применения достаточно узкая, но..
А еще можно попробовать совместить ассемблер с С, задачи на С, а эта монстрятина на ассемблере.
Немного встряну в разговор, прочитал знакомые мысли, я об этом на http://asmcode.ru писал. Алгоритм запуска задач из бесконечного цикла функции main, а в прерываниях формируются задачи (только формируются, т.е. записывается тип задачи и несколько параметров), которая запустится в цикле задач - это называется многозадачность. Для этого нужно делать стек для каждой задачи со страницей, где будет инфа о задаче задачи при её создании, и страницу с глобальными переменными где будут все настройки, главный стек, а называется это объекты.
0
x0rOS
22.03.2013, 04:32
Дайте пожалуйста прямую ссылку.
0 / 0 / 0
Регистрация: 07.03.2013
Сообщений: 176
23.03.2013, 12:09
Про многозадачность в разделе многозадачность, а про объекты в разделе объекты. Писал для ОС, для задач обработки в реальном времени нужно в самих прерываниях команды делать, так быстрее будет и вернее, например управление моторчиками.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2013, 12:09

STM32 - STM32 I2C
*****ПРОБЛЕМА ИСПРАВЛЕНА****ОТВЕТ НИЖЕ , НЕ ВЧИТЫВАЙТЕСЬ В КОД ПРОГРАММЫ,УТОНЕТЕ)), НУ ЕСЛИ ТОЛЬКО ИНТЕРЕС ЕСТЬ. Всем добрый вечер....

Алгоритм ГОСТ ( простой) для STM32
//таблица замены static const char Table={ {0x04,0x0a,0x09,0x02,0x0d,0x08,0x00,0x0e,0x06,0x0B,0x01,0x0c,0x07,0x0f,0x05,0x03},...

Нужен алгоритм поиска пути в этом лабиринте (будь то волновой алгоритм или алгоритм правой/левой руки )
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; void lab () { int s1 = 0; int s2 =...

Волновой алгоритм поиска (Алгоритм A* / Алгоритм А стар)
Хочу разработать алгоритм для решения головоломки с подвижными дисками (перестановочная головоломка). Определение. Перестано́вочные...

Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный алгоритм
Линейный алгоритм, Алгоритм с ветвлениями, Циклический алгоритм Линейный алгоритм 1. Объясни, что будет напечатано программой Program...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
GitHub Copilot в JetBrains: модель по умолчанию, Fix и контроль MCP
and_y87 12.10.2026
10 октября 2026 года GitHub обновил Copilot для JetBrains: добавил настройки стартовой модели, исправления из диагностики и управление автозапуском MCP. Поддержка IDE 2025. 1 прекращена — требуется. . .
День 5 из 28: Codex подсказывает следующий запрос
and_y87 12.10.2026
9 октября 2026 года OpenAI запустила бету Composer predictions — подсказок следующего сообщения в текущем диалоге Codex. Это помощь с формулировкой запроса, а не автоматическое продолжение задачи. . . .
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru