Перейти к содержанию
    

Прерывание в прерывании

вы шину GPIO не захватили, а по ней сейчас другой поток занят важным делом - писк на зумер выводит.

А зачем её захватывать? Как почту/телефон/телеграф/интернет? (сегодняшняя дата навеяла ;)

Во всех МК на Cortex-M с которыми мне приходилось иметь дело, периферия GPIO имеет средства для атомарной модификации отдельных битов порта (ну или хотя-бы находится в области bit-band). Можете пиликать вашим динамиком сколько угодно. После того как ознакомитесь с мануалом на периферию своего МК.

 

Первое, что приходит в голову так:sm.gif о как, у меня также, только я не знал что это SST называется. Просто каруселька и все

У Вас на вашей карусельке в любимом суперцикле, пока процессор сидит в очередной паузе (для ногодрочества динамиком), никакая полезная работа не выполняется. А в случае с РТОС на время такой паузы, время CPU будет передано другой менее приоритетной задаче, которая в нём сейчас нуждается, либо процессор будет выполнять WFI/WFE экономя миллиамперы. А у вас просто будет всё тупо висеть и впустую жрать миллиамперы.

Вот в этом как раз и есть главное преимущество РТОС с её задачами/потоками от суперцикла. И с современными объёмами ОЗУ в МК, как правило не составляет труда выделить каждой задаче необходимое кол-во стека. Ну если руки конечно не совсем из неподходящего места растут, то памяти это много не займёт.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну не знаю, у меня на Ардуино все проще, а на малинке тем более, на питоне. :fman: А у вас сложно как то, dma какие то, А как это "зачем захватывать". Под gpio драйвер надо, может gpio в Калифорнии висят и управляются какими нибудь post запросами. А вот тут вроде проще https://developer.microsoft.com/en-us/windo...les/helloblinky но я не уверен, что win10 iot влезет в процессор без mmu. О, кстати идея, сейчас залью винду эту на малину, интересно какая частота в цикле мигания получится

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А где тут DMA и что и куда оно грузит?

О, это длинная запутанная история - https://geektimes.ru/post/284248/

 

Ну не знаю, у меня на Ардуино все проще, а на малинке тем более, на питоне. :fman:

Эт как гнаться за семью зайцами.

Нет, хардварная платформа должна быть своя.

Тогда из нее можно выжать максимум: и прерывания в прерываниях, и SST, и RTOS, и всё вместе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ОК, слив опять защитан. Счет 2:0 :)

У меня сей уважаемый господин (под псевдонимом dasm), уже давно находится в списке игнора форума.

Ради него старался и нашел такую опцию. Ничего не потерял B)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ради него старался и нашел такую опцию. Ничего не потерял B)

Хм, удобная функция, спасибо за подсказку! Пригодится ;)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Super Simple Tasker - один из вариантов реализации вытесняющей многозадачности для микроконтроллеров.

 

Может быть я стал слишком старый и "отстал от поезда", поэтому на всякий случай спрошу: НАФИГА ???

Чем не годится готовая RTOS? В частности freeRTOS позволяет использовать вложенные прерывания без подобного "дрочева".... :laughing:

Сейчас каждый джуниор считает своим долгом написать свою RTOS :biggrin:

При этом НИХРЕНА в этом не понимая.

И при этом считает, что его RTOS - это какое-то откровение в мире RTOS.

 

Кто из нас по молодости не писал свою RTOS, и кто из нас в старости не осознал, что маялся дурью и тратил время на всякую не нужную ерунду :biggrin:

 

Я сейчас вспоминаю сколько времени я на это угрохал. Лучше б тёлок молодых порол. Тогда они мне ещё теоретически могли "дать". Не то что сейчас

 

 

 

 

Как минимум, это интересно - попробовать разные подходы к построению ПО.

Вот вот.

О чём я и сказал

Изменено пользователем Студент заборстроительного

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я сейчас вспоминаю сколько времени я на это угрохал. Лучше б тёлок молодых порол.

Аналогичная ситуация! :biggrin:

Но только мне удалось наваять свою простейшую ось относительно быстро, после "наиграться" с ней и в итоге поставил готовую чужую и больше этот вопрос не поднимал.

 

С другой стороны, до сих пор вот мне очень интересно познавать новые фишки в мире эмбедед ПО, в частности, относительно недавно "изучал" .netmicro, недавно чуть "по-тискал" micro java (или как там она зовется) ....

Короче, удалил их к чертовой бабушке - рано еще, времена еще не пришли, нынешние МК пока еще слишком ватные для таких "вещей".

 

Кстати, в данный момент уперся в необходимость применения такой вещи (пишу под плюсами) - паттерн "фабрика объектов", а совсем недавно освоил паттерн "делегатов" .

Удивительно, но теперь они реально мне понадобились, хотя в свое время хихикал над другими: "гы-гы, плюсы, шаблоны, паттерны" ...

 

Но, ребяты, изобретать самодельный колхозный шедулер = городить "велосипед с квадратными колесами" "из говна и палок" - это уже, прям, лютая дикость :01:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для тех, кто не в теме: в ARM Cortex есть такой механизм - BitBanging (вроде правильно написал).

может есть, а может и нет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

может есть, а может и нет.

Суть от этого не меняется - лаконичный код под классической RTOS после переписывания под SST превращается в банальный говнокод (см. посты #31 и #33).

Отсюда мораль: если вы видите перед собой говнокод, то смотрите на тип шедулера. Если стоит SST, "карусельку" или "супер-мега-гипер-луп", то шансы для этого кода все еще есть ...

Если этот говонокод умудрились соорудить даже под классической RTOS, то код - в помойку, автора кода - за кассу в "магнит" :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да уж.. сколько чудных открытий :) человек недавно паттерны открыл и берется судить о говнокоде. Ничего, склетон освоите, посетителя - про свой прошлый код также писать будете. А только все это фигня, сейчас функциональное программирование в моде. И снова все говнокодом покажется. Большая ошибка судить людей по паре постов, думая что они ничего не знают, а я такой плюсанутый и ртоснутый на всю голову. С возрастом пойдет

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

склетон освоите

Паттерна "склетон" не существует, но вангую, что речь шла про синглтон.

Опиской это не назовешь, поэтому очевидно вы даже не пользовались им ни разу ...

Короче, счет 3:0

 

К слову: по-началу, по неопытности я использовал синглтон слишком активно где надо и не надо ... но это было давным-давно и больше так не делаю ))

 

"С возрастом пройдет"

Суперлуп (или "карусельки") проходят у подавляющего большинства настоящих программеров (не ардуинщиков или куберов) еще в "ясельном" возрасте.

Но, судя по всему, еще попадаются редкие уникальные исключения....

 

Расслабьтесь, никто не собирается менять ваш образ мышления: "поздно пить боржоми ..." :)

 

Большая ошибка судить людей по паре постов, думая что они ничего не знают

Однако, ваших "пары постов" вполне для этого хватило - что не пост, то "пук в лужу" :laughing:

 

А только все это фигня, сейчас функциональное программирование в моде.

Да, что вы говорите?!

Ну, засуньте в обычный МК (не распберри) хотя бы что-то напоминающее эту "моду". Покажите пример...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

С другой стороны, до сих пор вот мне очень интересно познавать новые фишки в мире эмбедед ПО, в частности, относительно недавно "изучал" .netmicro, недавно чуть "по-тискал" micro java (или как там она зовется) ....

Короче, удалил их к чертовой бабушке - рано еще, времена еще не пришли, нынешние МК пока еще слишком ватные для таких "вещей".

 

Кстати, в данный момент уперся в необходимость применения такой вещи (пишу под плюсами) - паттерн "фабрика объектов", а совсем недавно освоил паттерн "делегатов" .

Удивительно, но теперь они реально мне понадобились, хотя в свое время хихикал над другими: "гы-гы, плюсы, шаблоны, паттерны" ...

Держите нас в курсе, несдержанный вы наш. И ни в коем случае по теме ничего не говорите, потеряете реноме в каждой бочке затычка

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

в каждой бочке затычка

Ну, да, а влезать в чужую беседу, особенно если сам в ней "не в зуб ногой" - это по-Вашему норм :01:

 

И ни в коем случае по теме ничего не говорите

А у вас-то есть что добавить по теме - SST ("каруселька" и т. п.)? Или тоже можно "открывать счет"? :biggrin:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Возвращаясь к оригинальной теме по поводу прерывания из прерывания.

У меня попроще задача и я не думал, что в ARM ее не так просто решить в лоб.

 

Грубо говоря допустим нужен примитивный Preemptive Scheduler, который бы запускал две функции Step_10ms() и Step_1s() с определенными интервалами 10мс и 1с соответственно. Step_10ms имеет высший приоритет, чем Step_1s(). Функции полностью независимые, железа и общей памяти не используют. Step_10ms() исполняется миллисекунды за 3, Step_1s() - за 100мс. То есть Step_10ms() должна прерывать исполнение Step_1s(), когда нужно.

Обе функции защищены от overrun - при запуске выставляют флаг, так что если функция вдруг вызовется опять во время своего исполнения - она это проконтролирует и система вылетит в ошибку.

 

Я, недолго думая, дописал в SysTick_handler (обработчик SysTick, который вызывается раз в 1мс) указанную конструкцию (псевдокод без намека на правильный синтаксис, приоритеты не расставлены)

void SysTick_handler(void) 
{
static uint16_t Timer_10ms = 9;
static uint16_t Timer_1s = 999;

if (Timer_10ms) Timer_10ms--;
   else
  {
   Timer_10ms = 9u;
   Step_10ms(); //Вызываем 10мс функцию
  }

if (Timer_1s) Timer_1s--;
   else
  {
   Timer_1s = 999u;
   Step_1s(); //Вызываем 1с функцию
  }
}

 

Каково же было мое удивление, когда оказалось, что ARM не поддерживает reentrant прерывания и выполнение Step_1s() полностью блокирует прерывание и Step_10ms() при этом не исполняется. Нашел в инете, что народ играется ассемблером и пытается восстанавливать стек и прочие вещи, чтобы процессор опять мог заходить в это же прерывание, но хотелось бы узнать - есть ли простое решение, без RTOS, так как кроме этой функции RTOS будет не нужна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...