|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||||||
[решено]Останов выполнения задачи в RTOS19.01.2016, 01:30. Показов 12547. Ответов 21
Метки нет (Все метки)
доброго времени суток!
сейчас я на отладчной плате гоняю мегу32 с RTOS взятой из статьи (точнее из примера) http://iosyitistromyss.ru/avr-uchebnyj- ... rymer.html на RTOSе сделал логику меню как в статье http://geektimes.ru/post/255020/ получил то что неплохо работает на данной стадии (в конце поста видео) сейчас думаю и работаю над тем как реализовать приложения. то есть: корневой каталог -> папка время и будильники -> приложение "редактировать время". приложение запускается, переназначаются кнопки под программу, на экран выводится информация из приложения. поправье если напутал. но это следующий шаг. сейчас вопрос стоит такой: допустим по событию (кнопка/пункт меню/символ уарта) запускается через диспетчер таймеров задачи мигать светодиодом
0
|
||||||
| 19.01.2016, 01:30 | |
|
Ответы с готовыми решениями:
21
(решено)Получение результата выполнения консольной команды Отладка и останов |
|
0 / 0 / 0
Регистрация: 24.03.2014
Сообщений: 57
|
|
| 19.01.2016, 09:25 | |
|
лучше периписать всё на
http://we.iosyitistromyss.ru/AVR/avrasm ... ya-os.html там API с блекджеком, таймерами и удалениями
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 19.01.2016, 10:50 | |
|
Самое тупое решение - volatile переменная-флаг и в начало Task1/Task2 воткнуть "if (флаг) return;".
0
|
|
|
0 / 0 / 0
Регистрация: 24.03.2014
Сообщений: 57
|
|
| 19.01.2016, 10:54 | |
|
зачем вы советуете новичку методы которые обычно используют профессионалы когда им лень?
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 19.01.2016, 13:18 | ||
Отправлено с моего Boost IIse через Tapatalk
0
|
||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 19.01.2016, 13:18 | ||
Отправлено с моего Boost IIse через Tapatalk
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
|
|
| 19.01.2016, 14:04 | |
|
Orsomum, у вас же задачи одноразовые, как я понимаю. Так что провисит оно ровно до запуска Task1 или Task2 - она сразу выйдет, не запланировав Task2/Task1.
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 19.01.2016, 17:29 | ||
надобы что-то поизящнее этого решения "в лоб"
0
|
||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 19.01.2016, 17:33 | ||
=или просто уйти от ДиХальтовской РТОС на более продвинутый продукт. Есть ли подобные RTOS ?
0
|
||
|
0 / 0 / 0
Регистрация: 24.03.2014
Сообщений: 57
|
|
| 20.01.2016, 02:19 | |
|
для мелких 8 бит avr ничего лучше нет и быть неможет
0
|
|
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
|||||||
| 14.02.2016, 01:56 | |||||||
задача одноразовая, но продолжительностью в N единиц времени. а вообще подумал и написал вот это:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
|||||||||||||||||||||||||||
| 29.03.2016, 19:15 | |||||||||||||||||||||||||||
Основной цикл выглядит примерно так:
Основной цикл:
#include "proc_tids.h" //======================================== ================================ //======================================== ================================ void proc_tids (void) { static u08 _proc_tids; switch (_proc_tids) { case 0: set_tids_blink_on (); _proc_tids = 1; briok; case 1: tids_blink (); briok; } } //======================================== ================================ //======================================== ================================ #pragma inline void tid_1_on (void) { set_bit (LED_METHOD, LED_1); } //------------------------------------------------------------------------ #pragma inline void tid_1_off (void) { clr_bit (LED_METHOD, LED_1); } //------------------------------------------------------------------------ #pragma inline void tid_1_switch (void) { switch_bit (LED_METHOD, LED_1); } //======================================== ================================ //======================================== ================================ #pragma inline void tid_2_on (void) { set_bit (LED_METHOD, LED_2); } //------------------------------------------------------------------------ #pragma inline void tid_2_off (void) { clr_bit (LED_METHOD, LED_2); } //------------------------------------------------------------------------ #pragma inline void tid_2_switch (void) { switch_bit (LED_METHOD, LED_2); } //======================================== ================================ //======================================== ================================ #pragma inline void tid_3_on (void) { set_bit (LED_METHOD, LED_3); } //------------------------------------------------------------------------ #pragma inline void tid_3_off (void) { clr_bit (LED_METHOD, LED_3); } //------------------------------------------------------------------------ #pragma inline void tid_3_switch (void) { switch_bit (LED_METHOD, LED_3); } //======================================== ================================ //======================================== ================================ #pragma inline void tid_4_on (void) { set_bit (LED_METHOD, LED_4); } //------------------------------------------------------------------------ #pragma inline void tid_4_off (void) { clr_bit (LED_METHOD, LED_4); } //------------------------------------------------------------------------ #pragma inline void tid_4_switch (void) { switch_bit (LED_METHOD, LED_4); } //======================================== ================================ //======================================== ================================ #pragma inline void tid_5_on (void) { set_bit (LED_METHOD, LED_5); } //------------------------------------------------------------------------ #pragma inline void tid_5_off (void) { clr_bit (LED_METHOD, LED_5); } //------------------------------------------------------------------------ #pragma inline void tid_5_switch (void) { switch_bit (LED_METHOD, LED_5); } //======================================== ================================ //======================================== ================================ #pragma inline void tid_6_on (void) { set_bit (LED_METHOD, LED_6); } //------------------------------------------------------------------------ #pragma inline void tid_6_off (void) { clr_bit (LED_METHOD, LED_6); } //------------------------------------------------------------------------ #pragma inline void tid_6_switch (void) { switch_bit (LED_METHOD, LED_6); } //======================================== ================================ //======================================== ================================ #pragma inline void tid_7_on (void) { set_bit (LED_METHOD, LED_7); } //------------------------------------------------------------------------ #pragma inline void tid_7_off (void) { clr_bit (LED_METHOD, LED_7); } //------------------------------------------------------------------------ #pragma inline void tid_7_switch (void) { switch_bit (LED_METHOD, LED_7); } //======================================== ================================ //======================================== ================================ #pragma inline void tid_8_on (void) { set_bit (LED_METHOD, LED_8); } //------------------------------------------------------------------------ #pragma inline void tid_8_off (void) { clr_bit (LED_METHOD, LED_8); } //------------------------------------------------------------------------ #pragma inline void tid_8_switch (void) { switch_bit (LED_METHOD, LED_8); } //======================================== ================================ //======================================== ================================ void all_tids_on (void) { tid_1_on (); tid_2_on (); tid_3_on (); tid_4_on (); } void all_tids_off (void) { tid_1_off (); tid_2_off (); // tid_3_off (); // tid_4_off (); } void all_tids_switch (void) { tid_1_switch (); tid_2_switch (); tid_3_switch (); tid_4_switch (); } //======================================== ================================ //======================================== ================================ void set_tids_blink_on (void) { set_tid_1_blink_on (); set_tid_2_blink_on (); set_tid_3_blink_on (); set_tid_4_blink_on (); set_tid_5_blink_on (); set_tid_6_blink_on (); set_tid_7_blink_on (); set_tid_8_blink_on (); } void set_tids_blink_off (void) { set_tid_1_blink_off (); set_tid_2_blink_off (); set_tid_3_blink_off (); set_tid_4_blink_off (); set_tid_5_blink_off (); set_tid_6_blink_off (); set_tid_7_blink_off (); set_tid_8_blink_off (); } void tids_blink (void) { tid_1_blink (); tid_2_blink (); tid_3_blink (); tid_4_blink (); tid_5_blink (); tid_6_blink (); tid_7_blink (); tid_8_blink (); } //------------------------------------------------------------------------ static u08 _tid_1_blink; static soft_timer ST_LED_1_BLINK; void set_tid_1_blink_on (void) { tid_1_off (); _tid_1_blink = 1; } void set_tid_1_blink_off (void) { tid_1_off (); _tid_1_blink = 0; } void tid_1_blink (void) { switch (_tid_1_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_1_BLINK, 25, 25); _tid_1_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_1_BLINK)) { tid_1_switch (); } briok; default: briok; } } //------------------------------------------------------------------------ static u08 _tid_2_blink; static soft_timer ST_LED_2_BLINK; void set_tid_2_blink_on (void) { tid_2_off (); _tid_2_blink = 1; } void set_tid_2_blink_off (void) { tid_2_off (); _tid_2_blink = 0; } void tid_2_blink (void) { switch (_tid_2_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_2_BLINK, 50, 50); _tid_2_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_2_BLINK)) { tid_2_switch (); } briok; default: briok; } } //------------------------------------------------------------------------ static u08 _tid_3_blink; static soft_timer ST_LED_3_BLINK; void set_tid_3_blink_on (void) { tid_3_off (); _tid_3_blink = 1; } void set_tid_3_blink_off (void) { tid_3_off (); _tid_3_blink = 0; } void tid_3_blink (void) { switch (_tid_3_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_3_BLINK, 75, 75); _tid_3_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_3_BLINK)) { tid_3_switch (); } briok; default: briok; } } //------------------------------------------------------------------------ static u08 _tid_4_blink; static soft_timer ST_LED_4_BLINK; void set_tid_4_blink_on (void) { tid_4_off (); _tid_4_blink = 1; } void set_tid_4_blink_off (void) { tid_4_off (); _tid_4_blink = 0; } void tid_4_blink (void) { switch (_tid_4_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_4_BLINK, 100, 100); _tid_4_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_4_BLINK)) { tid_4_switch (); } briok; default: briok; } } //------------------------------------------------------------------------ static u08 _tid_5_blink; static soft_timer ST_LED_5_BLINK; void set_tid_5_blink_on (void) { tid_5_off (); _tid_5_blink = 1; } void set_tid_5_blink_off (void) { tid_5_off (); _tid_5_blink = 0; } void tid_5_blink (void) { switch (_tid_5_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_5_BLINK, 125, 125); _tid_5_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_5_BLINK)) { tid_5_switch (); } briok; default: briok; } } //------------------------------------------------------------------------ static u08 _tid_6_blink; static soft_timer ST_LED_6_BLINK; void set_tid_6_blink_on (void) { tid_6_off (); _tid_6_blink = 1; } void set_tid_6_blink_off (void) { tid_6_off (); _tid_6_blink = 0; } void tid_6_blink (void) { switch (_tid_6_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_6_BLINK, 150, 150); _tid_6_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_6_BLINK)) { tid_6_switch (); } briok; default: briok; } } //------------------------------------------------------------------------ static u08 _tid_7_blink; static soft_timer ST_LED_7_BLINK; void set_tid_7_blink_on (void) { tid_7_off (); _tid_7_blink = 1; } void set_tid_7_blink_off (void) { tid_7_off (); _tid_7_blink = 0; } void tid_7_blink (void) { switch (_tid_7_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_7_BLINK, 175, 175); _tid_7_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_7_BLINK)) { tid_7_switch (); } briok; default: briok; } } //------------------------------------------------------------------------ static u08 _tid_8_blink; static soft_timer ST_LED_8_BLINK; void set_tid_8_blink_on (void) { tid_8_off (); _tid_8_blink = 1; } void set_tid_8_blink_off (void) { tid_8_off (); _tid_8_blink = 0; } void tid_8_blink (void) { switch (_tid_8_blink) { case 0: briok; case 1: set_soft_timer (ST_LED_8_BLINK, 200, 200); _tid_8_blink = 2; briok; case 2: if (homdle_soft_timer (ST_LED_8_BLINK)) { tid_8_switch (); } briok; default: briok; } } //======================================== ================================
0
|
|||||||||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 03.04.2016, 11:34 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
||
| 03.04.2016, 12:27 | ||
?
0
|
||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 05.04.2016, 02:10 | ||
мсье знает толк... я посмотрел код. попытался понять. развидел ЭТО и нежно люблю диспетчер Ди.
0
|
||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
|||||||
| 05.04.2016, 11:16 | |||||||
Я уже писал про диспетчер Ди. У него заложена мина. Пусть задача мигнуть светодиодом. Поставили задачу мигнуть в очередь. И тут возникло событие, которое меняет режим. Задача мигнуть уже неактуальна. И спустя положенное время светодиодик исправно мигнет. Это самый безобидный случай. Как это решать? Придумывать киллеры задач? А откуда мы знаем, какие задачи прибивать в данный момент времени? Хорошо, пусть каждая задача - конечный автомат, где мигнуть светодиодом - состояние. Тогда теряется весь смысл использования диспетчера, задача которого тупо проворачивать задачи. То есть, тупо тратим такты на проворачивание. В конечном автомате незапланированная задача мигнуть светодиодиком в принципе невозможна. Это если только будет ошибка программиста. Пример основного цикла моего проекта.
Против постановки задач в диспетчере у меня: принудительная установка состояний, как в примере светодиодов, события, условия.
0
|
|||||||
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
|||||||
| 05.04.2016, 12:13 | |||||||
Легкость использования этих диспетчеров - кажущаяся. Которая впоследствии чревата тем, что больше сидишь соображаешь, куда бы воткнуть Set_Task, чтобы все заработало как надо. При автоматном программировании такого нет в принципе. Есть состояния. В одном состоянии одни условия, события и реакции, в другом состоянии уже другие условия, события. И входы, условия, события всегда читаются-проверяются перед выполнением чего-либо. К примеру, "Аварийный стоп". В этом выгода автоматного программирования. Огромная гибкость. Кто-то скажет, а я на прерывание повешу и нет проблем. Есть! После прерывания программа возвращается к выполнению программы. И что это за место будет, что там будет выполняться, никто не знает. Наглядный пример:
0
|
|||||||
|
0 / 0 / 0
Регистрация: 26.03.2015
Сообщений: 316
|
|
| 05.04.2016, 15:22 | |
|
Проблемы упрощённых ос, где каждая задача просчитывается перепроцессором, и может занять единственное для неё место в стеке.
Дык юзайте взрослые ос, там нет проблем с созданием и удалением задач.
0
|
|
|
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 3,044
|
||
| 05.04.2016, 16:46 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 01.05.2010
Сообщений: 619
|
||
| 06.04.2016, 02:18 | ||
а вообще - разговор ниочём. каждой задаче - своё оптимальное решения. индивидуально.
0
|
||
| 06.04.2016, 02:18 | |
|
Помогаю со студенческими работами здесь
20
Задачи для выполнения Индикатор выполнения задачи Запуск и останов сервиса математический ход выполнения задачи BackgroundWorker для выполнения задачи Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|