https://radiokot.ru/forum/viewtopic.php?f=17&t=174887
Программирование STM8
- Сообщения: 357
- Зарегистрирован: Вс янв 11, 2015 20:33:32
Кому интересно, вот здесь :
https://radiokot.ru/forum/viewtopic.php?f=17&t=174887
https://radiokot.ru/forum/viewtopic.php?f=17&t=174887
- Реклама
- Сообщения: 2562
- Зарегистрирован: Вт май 01, 2018 19:44:47
Вот так ещё неплохо.
На STM8
Код: Выделить всё
struct B
{
int x;
B(int y=0){ x=y; }
operator int() { return x++;}
};
volatile int a;
int main()
{
for(B b;;a=b);
}Код: Выделить всё
//volatile int a;
`a`:
DS8 2
//int main()
//{
// for(B b;;a=b);
CLRW X
??main_0:
LDW L:`a`, X
INCW X
JRA L:??main_0
//}
- Сообщения: 357
- Зарегистрирован: Вс янв 11, 2015 20:33:32
Только "въезжаю", в язык Си. Есть вопрос.

Касательно функции getchar(), в строке №7, программа, подойдя к выполнению этой функции, останавливается. Т.е. ждет, пока не будет введен с клавиатуры какой либо символ ? Точно так же, и в строке №12, в теле цикла, программа приостанавливается. Я все правильно понимаю ?
Касательно функции getchar(), в строке №7, программа, подойдя к выполнению этой функции, останавливается. Т.е. ждет, пока не будет введен с клавиатуры какой либо символ ? Точно так же, и в строке №12, в теле цикла, программа приостанавливается. Я все правильно понимаю ?
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
sergey.UA, в мане же все нормально написано! Неужто тяжко в консоли набрать просто man getchar?
Только к чему здесь stdio, если тема посвящена микроконтроллерам? Использовать stdio в микроконтроллерах — признак неквалифицированности разработчика.
А если набрать man unlocked_stdio, можно увидеть неблокирующие аналоги.Функция fgetc() считывает очередной символ из потока stream и возвращает unsigned char преобразованный в int, или EOF при достижении конца файла или при возникновении ошибки.
Функция getc() похожа на fgetc(), но она может быть реализована как макрос, который определяет состояние stream более одного раза.
Функция getchar() эквивалентна getc(stdin).
...
Неблокирующие аналоги смотрите в unlocked_stdio(3).
Только к чему здесь stdio, если тема посвящена микроконтроллерам? Использовать stdio в микроконтроллерах — признак неквалифицированности разработчика.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 357
- Зарегистрирован: Вс янв 11, 2015 20:33:32
То что вопрос не по теме, я в курсе.
И, вопрос был не о том КАК РАБОТАЕТ ФУНКЦИЯ getchar()?
А о том что, ПРИОСТАНАВЛИВАЕТСЯ ЛИ, И ОЖИДАЕТ ВВОДА ПРОГРАММА, В ТАКИХ ТО СТРОКАХ?
Сама функция у меня работает, и в консоли все прекрасно выводится.
И то что с Си не сталкивался ВООБЩЕ, я же ЧЕТКО указал.
Если не сложно, подскажите по поводу ЗАДАВАЕМОГО ВОПРОСА.
Спасибо.
И, вопрос был не о том КАК РАБОТАЕТ ФУНКЦИЯ getchar()?
А о том что, ПРИОСТАНАВЛИВАЕТСЯ ЛИ, И ОЖИДАЕТ ВВОДА ПРОГРАММА, В ТАКИХ ТО СТРОКАХ?
Сама функция у меня работает, и в консоли все прекрасно выводится.
И то что с Си не сталкивался ВООБЩЕ, я же ЧЕТКО указал.
Если не сложно, подскажите по поводу ЗАДАВАЕМОГО ВОПРОСА.
Спасибо.
- Реклама
- Сообщения: 2905
- Зарегистрирован: Ср ноя 29, 2017 06:58:50
Eddy_Em, набрал man ничё не вышло. Что я делаю не так?
sergey.UA, есть ветка вопросов по с/с++ она теоретически больше подходит, так как здесь конкретно stm8. Вас интересует поведение этой функции именно в STM8?
sergey.UA, есть ветка вопросов по с/с++ она теоретически больше подходит, так как здесь конкретно stm8. Вас интересует поведение этой функции именно в STM8?
- Сообщения: 357
- Зарегистрирован: Вс янв 11, 2015 20:33:32
BlackKilkennyCat, понял, перейду в более подходящую ветку. От меня просьба, заглядывайте туда иногда.))
Вы правы, касательно STM8. Допустим есть такая функция, ( предположительно ) которая ожидает появления высокого уровня на конкретном пине микроконтроллера. То по аналогии с функцией getchar() в языке Си для Visual Studio, микроконтроллер будет уходить в " вечный цикл ", до появления этого самого высокого уровня? Надеюсь понятно попытался объяснить что я хочу узнать.
Вы правы, касательно STM8. Допустим есть такая функция, ( предположительно ) которая ожидает появления высокого уровня на конкретном пине микроконтроллера. То по аналогии с функцией getchar() в языке Си для Visual Studio, микроконтроллер будет уходить в " вечный цикл ", до появления этого самого высокого уровня? Надеюсь понятно попытался объяснить что я хочу узнать.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3960406#p3960406"]Eddy_Em, набрал man ничё не вышло. Что я делаю не так?[/uquote]
Может, пробуешь на игровой приставке эту команду набрать?
[uquote="sergey.UA",url="/forum/viewtopic.php?p=3960436#p3960436"]микроконтроллер будет уходить в " вечный цикл ", до появления этого самого высокого уровня? Надеюсь понятно попытался объяснить что я хочу узнать.[/uquote]
Есть такое понятие, как поллинг. Не нужно постоянно сидеть и ждать события: можно его периодически проверять. Аналогично с вводом: достаточно использовать select или poll, чтобы не торчать постоянно в ожидании, пока появятся данные. Например.
А на МК есть еще прерывания и DMA, что сильно расширяет возможности.
Может, пробуешь на игровой приставке эту команду набрать?
[uquote="sergey.UA",url="/forum/viewtopic.php?p=3960436#p3960436"]микроконтроллер будет уходить в " вечный цикл ", до появления этого самого высокого уровня? Надеюсь понятно попытался объяснить что я хочу узнать.[/uquote]
Есть такое понятие, как поллинг. Не нужно постоянно сидеть и ждать события: можно его периодически проверять. Аналогично с вводом: достаточно использовать select или poll, чтобы не торчать постоянно в ожидании, пока появятся данные. Например.
А на МК есть еще прерывания и DMA, что сильно расширяет возможности.
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 2905
- Зарегистрирован: Ср ноя 29, 2017 06:58:50
sergey.UA, всё зависит от алгоритма и аппаратных возможностей. Если алгоритм требует ничего не делать до получения 1 на пине - можно сделать цикл while с условием выхода из него - появление 1. Как уже выше сказали, существует метод опроса (polling), когда можно эпизодически опрашивать пин, не появилась ли там 1. Этот метод прост, но имеет две проблемы: можно пропустить короткий синал; невозможно установить точное время его появления. Существуют метод обработки прерываний, при условии, что именно этот контроллер умеет это делать на этом пине. В этом случае появление 1 вызовет событие, обработкой которого займётся специальная функция.
В обоих методах можно продолжать что-то делать, а можно и ожидать в цикле, или вообще усыпить микроконтроллер, активируя лишь изредка или по внешнему прерыванию.
DMA, о котором зачем-то сказано выше, рассматривать в данном случае не стоит.
В обоих методах можно продолжать что-то делать, а можно и ожидать в цикле, или вообще усыпить микроконтроллер, активируя лишь изредка или по внешнему прерыванию.
DMA, о котором зачем-то сказано выше, рассматривать в данном случае не стоит.
- Сообщения: 357
- Зарегистрирован: Вс янв 11, 2015 20:33:32
По поводу работы программы в микроконтроллере, касательно STM8, я так и думал.
Проворачивал нечто подобное, разными способами с камнями PIC16Fxxx.
А по поводу работы функции getchar() и приостановки выполнения программы в Visual Studio, спрошу уже в более подходящей ветке.
Спасибо коллеги что реагируете.
Проворачивал нечто подобное, разными способами с камнями PIC16Fxxx.
А по поводу работы функции getchar() и приостановки выполнения программы в Visual Studio, спрошу уже в более подходящей ветке.
Спасибо коллеги что реагируете.
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3960473#p3960473"]DMA, о котором зачем-то сказано выше, рассматривать в данном случае не стоит.[/uquote]
Как же не стоит? Без DMA не реализовать какой-нибудь дурацкий протокол вроде 1-wire или того же управления светодиодами...
Да и просто, если нужно замерить длительность нескольких коротких импульсов, очень удобно использовать DMA, которое будет автоматом по событию capture складывать нужные данные в массив.
Но, понятно, что это не относится к STM8S. Как, в принципе, и stdio…
Как же не стоит? Без DMA не реализовать какой-нибудь дурацкий протокол вроде 1-wire или того же управления светодиодами...
Да и просто, если нужно замерить длительность нескольких коротких импульсов, очень удобно использовать DMA, которое будет автоматом по событию capture складывать нужные данные в массив.
Но, понятно, что это не относится к STM8S. Как, в принципе, и stdio…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="sergey.UA",url="/forum/viewtopic.php?p=3960333#p3960333"]Касательно функции getchar(), в строке №7, программа, подойдя к выполнению этой функции, останавливается. Т.е. ждет, пока не будет введен с клавиатуры какой либо символ ? Точно так же, и в строке №12, в теле цикла, программа приостанавливается. Я все правильно понимаю ?[/uquote]
EOF - признак конца файла (для файловых потоков). Тот пример просто читает поток символов с одного файлового потока и записывает в другой (копирует), пока не дойдёт до конца файла.
Всё.
EOF - признак конца файла (для файловых потоков). Тот пример просто читает поток символов с одного файлового потока и записывает в другой (копирует), пока не дойдёт до конца файла.
Всё.
- Сообщения: 357
- Зарегистрирован: Вс янв 11, 2015 20:33:32
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
- Сообщения: 357
- Зарегистрирован: Вс янв 11, 2015 20:33:32
О том что, приостанавливается ли выполнение программы на указанных ранее строках?
Только и всего лишь.
Если не трудно, можете перейти в ветку где обсуждается Си_Си++ ?
https://radiokot.ru/forum/viewtopic.php ... 1#p3961061
Только и всего лишь.
Если не трудно, можете перейти в ветку где обсуждается Си_Си++ ?
https://radiokot.ru/forum/viewtopic.php ... 1#p3961061
- Сообщения: 6515
- Зарегистрирован: Сб янв 28, 2006 22:47:24
[uquote="BlackKilkennyCat",url="/forum/viewtopic.php?p=3960473#p3960473"]можно пропустить короткий синал[/uquote]
В особо важных случаях можно поставить один корпус с триггером и считывать его состояние, сбрасывая после чтения. В некоторых PIC микроконтроллерах периферия содержит отдельные триггеры, входы и выходы можно вывести наружу настройкой альтернативных функций. Возможно, есть триггеры и в STM.
В особо важных случаях можно поставить один корпус с триггером и считывать его состояние, сбрасывая после чтения. В некоторых PIC микроконтроллерах периферия содержит отдельные триггеры, входы и выходы можно вывести наружу настройкой альтернативных функций. Возможно, есть триггеры и в STM.
Астролябия-сама меряет, было бы что мерять!!!
- Сообщения: 2516
- Зарегистрирован: Пт июл 12, 2019 22:52:01
Asmodey, зачем? Есть прерывания, в них можно флаг выставить, а потом неспешно проверять себе…
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ
Я на гитхабе, в ЖЖ
- Сообщения: 6515
- Зарегистрирован: Сб янв 28, 2006 22:47:24
1. прерывания слишком ценный ресурс, чтобы тратить их на проверку состояний линий портов.
2. микроконтроллер в состоянии sleep. Пока просыпается по прерыванию, все тысячу раз может измениться. Известная ситуация - спящий микроконтроллер и энкодер, вращение которого регистрируется по прерыванию. Без триггера он будет "крутиться" либо рандомно, либо в одну сторону.
А вообще, вопрос не ко мне, а к обсуждавшим выше способы регистрации уровней на входах МК.
2. микроконтроллер в состоянии sleep. Пока просыпается по прерыванию, все тысячу раз может измениться. Известная ситуация - спящий микроконтроллер и энкодер, вращение которого регистрируется по прерыванию. Без триггера он будет "крутиться" либо рандомно, либо в одну сторону.
А вообще, вопрос не ко мне, а к обсуждавшим выше способы регистрации уровней на входах МК.
Астролябия-сама меряет, было бы что мерять!!!
- Сообщения: 1743
- Зарегистрирован: Вт авг 15, 2017 10:51:13
[uquote="Asmodey",url="/forum/viewtopic.php?p=3962826#p3962826"]Известная ситуация - спящий микроконтроллер и энкодер, вращение которого регистрируется по прерыванию. Без триггера он будет "крутиться" либо рандомно, либо в одну сторону.[/uquote]Для этого есть таймеры МК, работающие в режим захвата. Естественно - их тактирование не должно отключаться на время сна ядра.
- Сообщения: 6515
- Зарегистрирован: Сб янв 28, 2006 22:47:24
[uquote="jcxz",url="/forum/viewtopic.php?p=3962889#p3962889"]Естественно - их тактирование не должно отключаться на время сна ядра.[/uquote]
Тогда в некоторых случаях теряется смысл перевода мк в спящий режим. Скажем, в радиоприемной аппаратуре. Гасить нужно все, что может гадить в эфир, в том числе и тактовый генератор микроконтроллера, чтобы не ловить его гармоники.
Тогда в некоторых случаях теряется смысл перевода мк в спящий режим. Скажем, в радиоприемной аппаратуре. Гасить нужно все, что может гадить в эфир, в том числе и тактовый генератор микроконтроллера, чтобы не ловить его гармоники.
Астролябия-сама меряет, было бы что мерять!!!


