artemkad
Свой-
Постов
2 640 -
Зарегистрирован
-
Посещение
-
Победитель дней
13
Весь контент artemkad
-
Вопрос по си
artemkad ответил Павел_Б тема в Программирование
Для компилятора - перестанет. Это будет особая область памяти с которой нужно явно указать что делать можно, а что нельзя. Если этот аппаратный контроллер начнет менять содержимое по своему усмотрению - несомненно держать там можно будет только volatile-переменные. Впрочем, аппаратный контроль четности этого не делает. Т.е. ты утверждаешь, что в ARMах любая переменная в ОЗУ в любой момент времени может сама произвольным образом изменить свое значение независимо от действий программы? -
Вопрос по си
artemkad ответил Павел_Б тема в Программирование
Неизвестно компилятору. Например, ты сам-то сможешь однозначно сказать что получишь в ответ если прочитаешь только что записанный регистр FIFO? FIFO это совсем не просто область ОЗУ, а область ОЗУ с кучей собственной логики работы которая, в частности, приводит к тому, что читаемые программой данные не совпадают только что записанными. Т.е. с точки зрения компилятора это вообще не ОЗУ. Конечно обязательно. Даже если ничего не изымается чтение только что записанного в результате дает нечто совсем другое и зачастую даже из другого FIFO. Т.е. содержимое ячейки меняется самостоятельно по независимым от компилятора законам. Это где-ж я такое написал? Пока содержимое ОЗУ зависит исключительно от логики программы - это обычные переменные. Такие переменные можно хоть в вечный цикл засунуть - они не поменяются пока контроллер не стукнуть чем ни будь тяжелым(например снятием питания). Как только они начинают зависеть от внешних факторов, событий или логики периферии контроллера о которых компилятор ничего не знает, эти уже volatile. ЗЫ. Впрочем - volatile много не бывает ;) -
Вопрос по си
artemkad ответил Павел_Б тема в Программирование
Как это - меняются регистры FIFO. Причем как они меняются компилятору создающему код ничего не известно. И их содержимое зависит не только от того, что туда записано, но и от внешних событий изымающих содержимое очереди и создателей этого самого FIFO и/или UART/SPI/etc. Естественно туда обязателен volatile именно из-за этого. -
Вопрос по си
artemkad ответил Павел_Б тема в Программирование
Только потому. Это и есть "регистры меняются исходя из логики работы контроллера" о которой компилятор в общем случае ничего знать не может. -
Вопрос по си
artemkad ответил Павел_Б тема в Программирование
Регистры периферии так-же могут меняться в любой момент без ведома этой задачи. Эти регистры меняются исходя из логики работы контроллера или внешних событий, а не только из логики программы. Потому и volatile. -
Вопрос по си
artemkad ответил Павел_Б тема в Программирование
Это относится ко всем переменным не имеющим квалификатора volatile. Внутри функции они сами не меняются. Нет никакого прерывания DMA или другого потока который может внутри кода функции такую переменную изменить без её ведома. ЗЫ. Кстати, че-то мне кажется что в CV (const char *p) это указатель на константу размещенную во флеше, а ему пытаются подсунуть указатель на переменную в оперативке... Куда этот указатель будет указывать - хз. -
Вопрос по си
artemkad ответил Павел_Б тема в Программирование
Идеологически переменная объявлена как "может поменяться в любой момент сама", а аргумент как - "никто кроме функции её не поменяет". Естественно, исходя из этих объявлений компилятор и создает код. Потому и предупреждает, что возможно не зная о volatile функция вообще стала пустой. -
Вопрос по XMODEM
artemkad ответил artemkad тема в Программирование
Лично мне понадобилось загнать до мегабайта данных по UART в устройство, причем не занимаясь прогописательством под ПК и имея возможность приостановить поток данных на время записи уже полученной части данных в страницы Flash. Причем надо "на вчера", а не через месяц раздумий... ЗЫ. Сперва остановило то, что номер блоков однобайтовый и вроде как больше 255 кБ не передать, а потом доперло, что там номер блока ни на что кроме контроля повторов не влияет(т.е. это не адрес). По сути там мог быть вообще случайный идентификатор текущей посылки не совпадающий с предыдущим. -
Вопрос по XMODEM
artemkad опубликовал тема в Программирование
Скажите, при переполнении номера блока через 255, следующий номер блока будет 0 или 1 ? -
SIM800C проверка сим карты
artemkad ответил Mysteo тема в Сотовая связь и ее приложения
Не такие уж и непонятные - "Баланс:6.50р" -
POWERKEY "прижать к земле" до, а не после подачи питания. Весьма частая причина отсутствия записи...
-
Думаю желательно, но не обязательно - там если не рваный слой помехи будут где-то 5-10мВ от силы. Микрофон заметит, а цифровая карточка нет. Отдельные слои много ошибок прощают...
-
Не поможет. Там статья в стиле "мы за все хорошее против всего плохого" и в конечном итоге сводится к совет "берите 4-х слойную плату с полностью земляным одним слоем", а разделение цифровой и аналоговой земли описано не очевидно.
-
И снова - какого масса СИМ-карты подключена к силовой массе 36, а масса С8, С6 и, ... куда подсоединен верхний контакт С4 (???), к 21-й? "Отлично придумано" подвести силовую массу к 8-й ноге, пустив силовой ток по диагонали массы модуля, а потом массу карточки и её обвеса взять в двух разных точках этой диагонали.
-
Разводишь дорожками массу везде. Это помогает при разводке видеть как будут протекать токи по будущим полигонам. А потом когда все получилось дорожками, сверху уже заливаешь полигоны которые помогают экранировать и в общем снижают сопротивление.
-
В первом приближении L2 и С5 поменять местами, диод D3 перенести на другую сторону. Не ясно что за пренебрежение токами через выходной диод преобразователя - почему до D4 тонкая дорожка. ЗЫ. А вообще там дикие наложения контуров протекания токов двух преобразователей. Там как-то стоит выходные LC-цепочки переразвести, что-бы их токи не пересекались. Конечно там преобразователи дубовые, но никогда не знаешь с какой стороны косяк может вылезть при взаимодействии.
-
Полигон массы под карточкой сделан неверно. Импульсные токи 2А по той дорожке массы которая там идет вдоль периметра создадут нехилую такую помеху как на шунте(индуктивном шунте). Надо провести толстую дорожку массы от выходного электролита до силовой массы модуля(около его питания). Думаю лучше в слое модуля. В слоя sim-держателя если есть желания объединить массы его элементов полигоном, полигон должен соединиться с остальной массой одним переходным отверстием в районе 13 или 19 ножки модуля. По этому полигону ни при каких условиях не должен течь силовой ток модема(потому и одно переходное). А вообще - крайне рекомендую рассматривать массу как такую-же цепь как и остальные и вести её при разводке дорожками. И только в самом конце заливать полигоном когда все разведено. Отделить массу цепей карточки, а никак не массу остальных цепей модема. Задача такого отделения не допустить протекания силового тока между разными точками этого полигона, чем будет создана помеха работе карточки(особенно для низковольтных СИМок). И эта отдельная масса подключается к остальной массе не где нибудь, а к массе возле цепей Sim-карты.
-
1. Чего там делает дорожка питания возле разъема антенны? 2. Посчитай линию от модуля до антенны - там важны и толщина дорожки и зазоры её до земляного полигона. Помнится для 1.5мм FR4 там что-то было 0.9 центр на 0.2 зазоры. Разъем развернуть. Естественно, полигон линии прерывать левой дорожкой недопустимо. 3. Я правильно понимаю, ты надеешься что электролит в преобразователе будет работать как емкость? 4. Ноги и масса цепей карточки(включая массу к которой подключены кондеры вокруг карточки) надо выделить в отдельный полигон и соединить с массой модуля где нибудь рядом с ногами цепей карточки, а не бросать как попало на общем полигоне. ЗЫ. А вообще разводка типа "на, отцепись"... А че тут понимать, это главная проблема хреновой разводки - она ИНОГДА работает. В частности от того, что не сделана полосковая линия к антенне мощность передаваемого сигнала вместо того, что-бы попасть в антенный кабель начинает гулять по всему что к плате подсоединено. Т.е. по сути сейчас излучает не антенна, а кусок платы с куском антенного кабеля. Естественно, чего там наводится на детали - "подержи арбуз"...
-
GPS модули с хорошей точностью
artemkad ответил smk тема в Сотовая связь и ее приложения
Поставь хорошую антенну и проблема "плохого модуля" исчезнет сама собой... -
Ты сам просил моего мнения: Уже успел позабыть? Я так понимаю, это не более чем твои фантазии. Что-то мне подсказывает - у меня опыта побольше будет
-
Вопрос там не в буфере, а в том, что было дальше. А точнее: К примеру, принятое в буфер вполне может разбираться одной не прерываемой ничем задачей, а значит и никаких URC " в любой момент хоть между этими командами" не может быть в принципе. Конструктивно? Это не я тут "Не говорите ерунды" и " Странные у вас представления о работе GSM-модуля..." говорил. Для подобных заявлений вам сперва надо самому знать(а не фантазировать) о чем речь. Для того, что-бы заявлять "Я ничего не фантазировал и не выдумывал по поводу того, что там делается в чёрном ящике." надо сперва о содержимом модуля знать больше чем о черном ящике. Иначе конструктив сводится к тому, кто более уверенно озвучит собственные фантазии. Может все-же перед тем как с уверенным видом что-то заявлять таки почитаешь о чем речь? https://ru.wikipedia.org/wiki/Атомарная_операция
-
Разве? А мне помнится нечто иное: Да и тут не хуже: Впрочем, да, я не рассматриваю модуль как черный ящик. Я рассматриваю его как вполне конкретное устройство с программой кем-то когда-то написанной.
-
Ну, расскажите нам, что тогда еще GSM-модуль делает по командам? ATE0 AT+CREG=1 AT+CLIP=1 AT+COLP=1 AT+CRC=1 AT+CSCS="GSM" AT+CMGF=1 AT+CNMI=2,2 AT+CSCLK=1 AT+CMEE=1 Думаю всем будет интересно послушать. Причем замечу, ни одна из них даже не автосохраняемая...
-
Да, да, сохранение десятка переменных в оперативке это столь длительный процесс, что процессор модуля успеет тысячи раз переключиться на другие задачи и отправить из них сотни URC. Впрочем, для внешнего процессора это не будет иметь особого значения - он все настройки передал и свободен принимать и обрабатывать любые сообщения от модуля...