27.03.2019, 10:59
|
|
Частый гость
Регистрация: 04.11.2009
Сообщений: 26
Сказал спасибо: 3
Сказали Спасибо 4 раз(а) в 2 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от olegprom19
|
можно использовать while
или использовать "статусы" программы
т.е. по мере изменения статусов программа будет заходить и выполнять нужные блоки и "идти дальше"
|
Единого подхода существовать не может.
Наиболее часто, лично я, использую метод " конечных автоматов".
Програмно это выглядит как switch (‹текущее состояние›) и по case можем перейти на другое состояние, либо выполнять какие то действия, пока не понадобится перейти в другое состояние.
Понятно что этот switch находится внутри while либо внутри потока, например, FreeRtos.
|
|
|
|
27.03.2019, 12:17
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 8,012
Сказал спасибо: 2,770
Сказали Спасибо 2,715 раз(а) в 2,007 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от olegprom19
|
можно использовать while
или использовать "статусы" программы
|
Как мне кажется - это совершенно разные механизмы.
while - тупо ждать (выполнять что-то) до достижения какой-то величины определенного значения
"статусы" - если я правильно понимаю контекст, это аналог конечного автомата в логике, когда происходят переходы между заранее определенными (выделенными, обозначенными) состояниями объекта.
|
|
|
|
27.03.2019, 22:35
|
|
Заблокирован
Регистрация: 07.09.2014
Адрес: В Кремле!
Сообщений: 4,486
Сказал спасибо: 396
Сказали Спасибо 2,220 раз(а) в 1,319 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
А еще есть прерывания ведь... Причем, полезная работа может выполняться как непосредственно как в прерывании, так и отложенно, по программному флагу, выставленному в прерывании.
Периодические действия могут выполняться по флагам программных таймеров. Например, опрос клавиатуры, работа динамической индикации, отсчет секунд. Вот как это может выглядеть на примере:
Код:
|
int main(void)
{
HardwareInit();
SysTick_Config(SystemCoreClock/1000)); // аппаратный таймер на 1 мс
SOFTTIMER_START(KBD, CIRCLE, 40); // программный таймер клав-ры, 40 мс
SOFTTIMER_START(INDIC, CIRCLE, 2); // программный таймер дин.индик, 2 мс
SOFTTIMER_START(SEC, CIRCLE, 1000); // программный таймер секунд, 1000 мс
while(1)
{
/* сканирование клавиатуры */
if(SOFTTIMER_FLAG(KBD))
{
SOTFTIMER_CLEARFLAG(KBD);
KeyScanning();
}
/* переключение разряда дин.индикации */
if(SOFTTIMER_FLAG(INDIC))
{
SOTFTIMER_CLEARFLAG(INDIC);
DynInication();
}
/* инкремент секунд */
if(SOFTTIMER_FLAG(SEC))
{
SOTFTIMER_CLEARFLAG(SEC);
SecondIncrement();
}
}
} |
В приведенном примере программные таймеры работают на прерывании аппаратного таймера, там они отсчитывают интервал времени, и по истечении интервала выставляют собственный флаг. Эти флаги и проверяются в цикле while(1) поочередно. Если флаг выставлен, то выполняется действие.
Недостаток этого метода в том, что если какое-то действие по флагу выполняется продолжительное время, то все остальные процессы будут ждать. В некоторой мере проблему можно решить вынесением критически важных по времени реакции процессов непосредственно в отдельные прерывания.
Наиболее компромиссно проблема решается в вытесняющей RTOS с детерминированным (заданным) временем отклика. Работа RTOS основана на системном (принудительном) переключении между задачами через равные кванты (интервалы) времени. Все задачи в RTOS представляют собой бесконечные циклы без выхода из них. А переключение между задачами берет на себя ядро RTOS по сигналам системного таймера. Текущее состояние задачи на момент переключения сохраняется, а следующая задача выполняется ровно с того шага, на котором в предыдущий раз остановилась.
RTOS предоставляет для программиста простой способ организации программы, но взамен нагружает МК накладными расходами на обеспечение работы RTOS, отбирая часть вычислительных ресурсов и память МК. RTOS далеко не всегда нужна, и многие-многие задачи могут быть решены без неё.
|
|
|
|
28.03.2019, 12:48
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Ртось куда попало только абдуринщики пихают!
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
28.03.2019, 14:57
|
|
Вид на жительство
Регистрация: 03.10.2011
Сообщений: 485
Сказал спасибо: 35
Сказали Спасибо 234 раз(а) в 138 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Мужики, я особо за новинками STM32 не слежу, но вот интересно: не появились ли в 8-10-ногих корпусах STM'ки на cortex-M0 центов по 10-20 за штучку?
|
Скоро появятся - stm32g0. https://www.st.com/en/microcontrolle...stm32g0x1.html
Про цену не интересовался.
|
|
|
|
30.04.2019, 09:38
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Пишу USB HID (клавиатура + мышь). Возникла проблема с отправкой HID-дескриптора длиной больше 64 байт. Может у кого-нибудь есть такое составное устройство ("заводское"), хотелось бы увидеть логи после "GET DESCRIPTOR Request HID Report" — как оно отдается.
Ну и еще одна проблема возникла: если я пишу короткий репорт (только мышь), а потом пытаюсь хосту передать данные, своего пакета я не вижу (как и вообще общения с EP1), но вижу уйму CLEAR FEATURE на EP0, которые начинают по десятку в секунду валиться! Где я мог накосячить?
UPD, все заработало, но вот CLEAR FEATURE на EP0 так и прет параллельно с запросами прерываний.
UDP1: здесь прочитал, что CLEAR_FEATURE с wValue == ENDPOINT_HALT (0) посылается в том случае, если EP послала STALL. А в прерывании EP1 после успешной передачи я делал SET_STALL_TX зачем-то. Поменял на SET_VALID_TX - заработало.
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 30.04.2019 в 14:55.
|
|
|
|
15.05.2019, 12:52
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Мужики, кто-нибудь делал длинные (сантиметра 2-3) линии от чипа до кварца?
Разрабатываю "девборду", чтобы без пайки STM32F0x2 и STM32F103 можно было проверять на работоспособность и прошивать (благо, у них ноги pin2pin).
Купил на али за 11 баксов переходник-"кроватку" с LQFP48 на DIP, но вот появился вопрос: заведется ли STM32F103 от кварца на таком большом расстоянии от чипа, да еще и через все эти контакты?
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
15.05.2019, 13:09
|
|
Почётный гражданин KAZUS.RU
Регистрация: 24.03.2007
Сообщений: 1,359
Сказал спасибо: 85
Сказали Спасибо 616 раз(а) в 372 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от eddy
|
Мужики, кто-нибудь делал длинные (сантиметра 2-3) линии от чипа до кварца?
Разрабатываю "девборду", чтобы без пайки STM32F0x2 и STM32F103 можно было проверять на работоспособность и прошивать (благо, у них ноги pin2pin).
|
Cделал что-то типа программатора-тестера - ZIF Socket LQFP64 и два кварца, переключаемых перемычками, на 8 и 12 МГц (по 2 перемычки на кварц), плюс минимальная обвязка.
От сокета до перемычек к кварцам дорожки 25 мм 33 мм, и от перемычек до кварца еще по чуть чуть.
Все работает беспроблемно.
|
|
|
|
15.05.2019, 15:46
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.02.2005
Адрес: Минск, Беларусь
Сообщений: 8,012
Сказал спасибо: 2,770
Сказали Спасибо 2,715 раз(а) в 2,007 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
eddy, я, правда, такие длинные дороги на платах не делал, но землю к конденсаторам кварцевым аккуратно всегда развожу. Чтоб по той земле посторонних токов не гуляло.
Будете делать под свою "кроватку" разводку - обратите внимание на этот момент.
|
|
|
|
16.05.2019, 09:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,629
Сказал спасибо: 115
Сказали Спасибо 814 раз(а) в 591 сообщении(ях)
|
Re: Изучаем STM32 Cortex M3
Сообщение от pambaru
|
От сокета до перемычек к кварцам дорожки 25 мм 33 мм, и от перемычек до кварца еще по чуть чуть.
Все работает беспроблемно.
|
Тогда хорошо. Ничего, на следующей неделе и до F103, надеюсь, руки дойдут - проверю. Здесь, как оказалось, не все так хорошо: дороги до разъема от МК длиной сантиметров до 5-6!!! Сама "кроватка" неплохие такие загогулины имеет, потом разводка по верхней плате, затем перемычка на нижнюю с ногами, а там уже сокет в моей...
Сообщение от Yuri222
|
Будете делать под свою "кроватку" разводку - обратите внимание на этот момент.
|
Я их обычно прямо на земляной полигон сажаю. Сейчас, правда, этот полигон с основным полигоном будет перемычкой соединяться — не получилось на одной стороне развести, чтобы нормальный полигон был, а две стороны ради полутора десятка деталек делать — как-то слишком муторно...
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:19.
|
|