-
- Думаю, что они с стм32 столько серий заплодили, что не успевают
баги и фичи описывать. С Л151, прикол был, там на плате ГСМ модуль
имелся, при его запуске у проца - хард фаулт. Долго программеры
парились, потом антенну на 90 градусов развернул, прошло. С Ф207
подобного не было. - Visitor(08.08.2021 22:43 - 23:09)
- У меня шлейф от МК к плате индикации (7-сегментные, светодиодные, через 74НС595, по SPI) идет длиной 10 см и в 5 см от модуля SIM800. Его надо укладывать определенным образом. Иначе сегменты подмаргивают в момент установления связи. :-) Других проблем нет. - Лaгyнoв(09.08.2021 06:46)
- Тут дело не в "стм322. GSM модуль в пике может взять 2А от 2,8В.
Эта энергия выходит в виде импульса или пачки импульсов через
антенну и может нарушить работу практически любого современного
микроконтроллера. Поворот на 90 градусов - оптимальный вариант
расположения проводников для минимального взаимного влияния. - BlackMorda(08.08.2021 22:47)
- С корпусом QFP ортогональностью не побалуешь, хоть и плата в 4 слоя была по всем канонам. Питание модулей давно отлажено, какой бы импульсник не был, рядом электролит в 1000 мкФ, тантал на 100, и керамики полно. Тот же схематик с Ф207, Ф205 нормально прет, а Л151 это не понравилось, у маложручих, видимо, свои особенности есть. Может по всем пинам сборки фильтрующие поставить стоило, проц медной фольгой пытался экранировать - не помогло, только ориентация антенны! Проект Visitor(36 знак., 08.08.2021 23:07)
- Расскажите, что за поделие, чтобы я обходил стороной :-) - SciFi(08.08.2021 22:46)
- Данные, которые используются и в прерываниях, и в главном потоке,
защищал от кривого доступа? Или как обычно? :-) - SciFi(08.08.2021 18:59)
- А я не знаю как, всегда само работало. Научи. - POV_(08.08.2021 22:26, )
- По ссылке вроде бы вполне дельно про volatile. Ну и бывает ещё атомарность, конечно. Кстати, обычно отключение оптимизации среди прочего делает так, что вообще все переменные ведут себя как volatile, так что у тебя есть простой способ быстро узнать, имеет ли volatile отношение к твоим проблемам. - SciFi(08.08.2021 23:28, ссылка)
- например, в фоне можно критическую секцию организовать. ну а в ней данные читать/модифицировать Vit(281 знак., 08.08.2021 22:39)
- Изобретать велосипед — неблагодарное занятие, мне лень. Просто
подумай немного на тему "а что если прерывание произойдёт в самый
неудобный момент, когда главный поток читает или пишет в
переменную, используемую в обработчике"? Там может получиться много
интересного. Если найду ссылочку на годный ликбез, поделюсь,
конечно. - SciFi(08.08.2021 22:37)
- Не-не, там другое. Телодвижения с расчетами в прерывании, например,
АЦП, портят переменные завязанные на разбор протокола входящего по
УАРТ. В итоге связь через пень-колоду, больше ни на чем не
сказывается. - _P0V(09.08.2021 09:20, )
- Кусками уменьшай проект Tyмблep(392 знак., 09.08.2021 14:22)
- У вас расчеты в прерывании случайно плавучку и/или вычисления
квадратного корня не используют? - rezident(09.08.2021 09:29)
- Не припомню, чтобы в стм32 это было чем-то чревато. Чем напугать
хочешь? Колись! - SciFi(09.08.2021 09:38)
- Так может у него АЦП с частотой 1 МГц сэмплирует. Я еще раз
напоминаю, что я не программист, но помнится для MSP430F149
включение всего одной функции деления float увеличивало процедуру
на ~800 тактов. При тактовой частоте 8МГц это было весьма
драматическим эффектом для расчетов в прерывании. - rezident(09.08.2021 09:43)
- Хе-хе. Тогда уж сразу sprintf(). Там легко можно отъесть килобайт
стека и миллисекунду времени. И про стек, и про время я ему уже
напомнил >>> - SciFi(09.08.2021 09:45, ссылка)
- Но если стека достаточно и во времени недостатка нет - Tyмблep(110 знак., 09.08.2021 14:06)
- Шож вы такой ревнивый-то? :) Ну считайте, что я конкретизировал общё обрисованную вами проблему. - rezident(09.08.2021 09:49)
- Хе-хе. Тогда уж сразу sprintf(). Там легко можно отъесть килобайт
стека и миллисекунду времени. И про стек, и про время я ему уже
напомнил >>> - SciFi(09.08.2021 09:45, ссылка)
- Так может у него АЦП с частотой 1 МГц сэмплирует. Я еще раз
напоминаю, что я не программист, но помнится для MSP430F149
включение всего одной функции деления float увеличивало процедуру
на ~800 тактов. При тактовой частоте 8МГц это было весьма
драматическим эффектом для расчетов в прерывании. - rezident(09.08.2021 09:43)
- Не припомню, чтобы в стм32 это было чем-то чревато. Чем напугать
хочешь? Колись! - SciFi(09.08.2021 09:38)
- Данунафиг. Ты там где-то глобально накосячил, вот оно и вылазит в
разных местах. Типа переполнение стека, или времени на обработку
прерывания не хватает, или ещё какая-нибудь фигня. - SciFi(09.08.2021 09:25)
- Переполнение стека ловится аппаратно, наверное. Скорее всего там
использование нереентерабельных функций в прерывании и в основной
программе, или другом, вытесняемом, прерывании. Функции могут быть
как самодельные (придется как-то переписать/разделить), так и из
стандартной библиотеки (использовать многопоточную, или какую-то
аналогичную) - AlexBi(09.08.2021 09:40)
- +1. Что-то я не вспомнил про это дело. - SciFi(09.08.2021 09:42)
- Переполнение стека ловится аппаратно, наверное. Скорее всего там
использование нереентерабельных функций в прерывании и в основной
программе, или другом, вытесняемом, прерывании. Функции могут быть
как самодельные (придется как-то переписать/разделить), так и из
стандартной библиотеки (использовать многопоточную, или какую-то
аналогичную) - AlexBi(09.08.2021 09:40)
- Не-не, там другое. Телодвижения с расчетами в прерывании, например,
АЦП, портят переменные завязанные на разбор протокола входящего по
УАРТ. В итоге связь через пень-колоду, больше ни на чем не
сказывается. - _P0V(09.08.2021 09:20, )
- Переменные которые изменяются в прерывании и основной программе
должны быть объявлены как "volatile". - BlackMorda(08.08.2021 22:36)
- слегка доебусь - не обязательно изменяются и там и там, достаточно чтобы использовались и там и там (и в основном теле, и в прерываниях). и всё,
здравствуй глюк - Mahagam(09.08.2021 00:43)
- Только при условии использовании оптимизации. - PlainUser(03.09.2021 07:36)
- угу, без неё они все как volatile. и прошивка раза в три жирнее. - Mahagam(03.09.2021 10:34)
- Только при условии использовании оптимизации. - PlainUser(03.09.2021 07:36)
- слегка доебусь - не обязательно изменяются и там и там, достаточно чтобы использовались и там и там (и в основном теле, и в прерываниях). и всё,
здравствуй глюк - Mahagam(09.08.2021 00:43)
- А я не знаю как, всегда само работало. Научи. - POV_(08.08.2021 22:26, )
- Думаю, что они с стм32 столько серий заплодили, что не успевают
баги и фичи описывать. С Л151, прикол был, там на плате ГСМ модуль
имелся, при его запуске у проца - хард фаулт. Долго программеры
парились, потом антенну на 90 градусов развернул, прошло. С Ф207
подобного не было. - Visitor(08.08.2021 22:43 - 23:09)