17.12.2019, 13:14
|
#1641
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от MikeF
|
я говорю про стандартный printf
|
"стандартный printf" недопустимо использовать на STM8! Оно ж отожрет половину флеша. Так что, явно там printf какой-то "нестандартный".
Сообщение от MikeF
|
Вы для чего используете прерывания при отправке, чтобы пока байт отправляется, основная прога исполнялась?
|
Да, чтобы не выжидать долго. Если бы на STM8S был DMA, все было бы проще.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
17.12.2019, 13:23
|
#1642
|
Прописка
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
"стандартный printf" недопустимо использовать на STM8! Оно ж отожрет половину флеша.
|
С чего вдруг недопустимо, я ж использовал. Ну если речь идет про stm8s001, то может быть и отожрет
Сообщение от eddy
|
Да, чтобы не выжидать долго.
|
Понятно, но это имеет смысл только если время отправки байта в первом приближении › времени одного цикла программы, иначе только кодозависимые-джиттероподобные паузы будут между байтами. Или вы следующий байт в прерывании отправляете?
Последний раз редактировалось MikeF; 17.12.2019 в 13:29.
|
|
|
|
17.12.2019, 13:29
|
#1643
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,968
Сказал спасибо: 2,552
Сказали Спасибо 11,849 раз(а) в 5,938 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от MikeF
|
А можно целиком этот пример увидеть
|
Это чисто функции getchar() и putchar() через прерывания.
Сообщение от MikeF
|
в нем как раз работают через стандартную stdio
|
Не совсем. Переназначены стандартные на эти.
Да и зачем Вам? Формируете строку, а потом отдаете эту строку самописной функции вывода строки, которая и выведет строку без запинок и "зависаний" процессора в тяжелом printf-e.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
17.12.2019, 13:33
|
#1644
|
Прописка
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от akegor
|
Не совсем.
|
Ну а всё же, как найти этот пример? А то у меня нет CV.
Сообщение от akegor
|
Да и зачем Вам?
|
Удобно использовать когда нужно выводить данные с числовыми вставками из переменных.
|
|
|
|
17.12.2019, 14:07
|
#1645
|
Гуру портала
Регистрация: 06.05.2005
Адрес: Краснодар, возле укротворного моря.
Сообщений: 18,968
Сказал спасибо: 2,552
Сказали Спасибо 11,849 раз(а) в 5,938 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от MikeF
|
когда нужно выводить данные с числовыми вставками из переменных
|
"sprintf" прекрасно сформирует строку. Останется только направить ее в нужное место.
Пример? Да хоть так:
PHP код:
|
void putstr(char buf) {
int i=0;
while (buf[i]) {
my_putchar(buf[i]);
i++;
}
return;
}
|
my_putchar - вывод на прерываниях.
__________________
Не бейте больно, ежели чо, ну не удержался... А вааще,
"Мы за все хорошее, против всей х..., По лугам некошеным чтобы шли ступни,
Чтобы миром правила правда, а не ложь, Мы за все хорошее, нас не на...!
..." (Ленинград)
Я не несу ответственности за свои действия в Вашей голове.
|
|
|
|
17.12.2019, 14:15
|
#1646
|
Прописка
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
|
Re: FAQ по STM8
Я понимаю, но заменив printf на sprintf мы не сэкономим память как хотел eddy
Спасибо, буду думать что оптимальнее будет применить.
|
|
|
|
17.12.2019, 15:23
|
#1647
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от MikeF
|
Или вы следующий байт в прерывании отправляете?
|
Естественно! На что прерывания еще нужны, если нет DMA? Когда буфер полный, выставляю флаг - длина буфера. КА проверяет этот флаг. Как только он ненулевой, а новых посылок не запущено, запускает посылку и дальше работа идет внутри прерывания. Как только посылка отправлена, выставляется флаг готовности, и можно следующий буфер отправлять.
Как выглядят мои "printf" у меня можно на гите посмотреть. Но там ничего эдакого. просто вывод целых чисел в 10 или 16 формате. Ну и иногда нужно выводить числа с фиксированной точностью, там почти то же самое, что в выводе десятичных целых, только в определенной позиции точка еще выводится.
Так формируется выводной буфер. Далее, как вся строка сформирована, скармливаем ее посыльному. А уж посыльным может быть что угодно: UART на DMA или прерываниях, USB, SPI...
__________________
Союз Советских Социалистических Округов Северной Америки
Последний раз редактировалось eddy; 17.12.2019 в 15:25.
|
|
|
|
17.12.2019, 17:59
|
#1648
|
Прописка
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
|
Re: FAQ по STM8
Сообщение от eddy
|
КА проверяет этот флаг. Как только он ненулевой, а новых посылок не запущено, запускает посылку и дальше работа идет внутри прерывания.
|
Т.е. когда на отправку данные сформированы вы разрешаете прерывание TXE и отправляете первый байт, а остальные байты отправляет уже алгоритм в прерывании?
|
|
|
|
17.12.2019, 18:22
|
#1649
|
Почётный гражданин KAZUS.RU
Регистрация: 27.01.2005
Адрес: Россия, КЧР, Нижний Архыз
Сообщений: 3,627
Сказал спасибо: 115
Сказали Спасибо 813 раз(а) в 590 сообщении(ях)
|
Re: FAQ по STM8
MikeF, именно так.
__________________
Союз Советских Социалистических Округов Северной Америки
|
|
|
|
17.12.2019, 18:36
|
#1650
|
Прописка
Регистрация: 14.04.2005
Сообщений: 116
Сказал спасибо: 12
Сказали Спасибо 18 раз(а) в 12 сообщении(ях)
|
Re: FAQ по STM8
Я думал о таком способе, но он мне показался не прозрачным - часть данных отправляется в одном месте кода, часть - в другом, поэтому я подумал что у вас данные отправляются в основном цикле, а прерывание только "крутит" счетчик и служит флагом что можно отправлять следующие байты. Вообщем взял на себя лишнее
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 15:43.
|
|