Сам я столкнулся с ней на работе, всё пишу под SAM3 и ATSAM91. Все нравки, внезапно стало доставлять. Планирую накатить линукс и сам собрать ядро.
>SAM3 и ATSAM91
Зачем мне твое говно? В чем смысл треда для самого себя? Радач - твой личный бложик? Иди выебывайся в другом месте, петух.
>Иди выебывайся в другом месте, петух.
Это копипаста первого АРМ-треда, довн. Он утонул и не бампается.
Почему не создать простой тред про STM32?
Потому, что иди нахуй https://2ch.hk/ra/res/298779.html (М) вот почему.
Помимо ST есть ещё овер 9000 фирм со своими чипами. Здесь даже в утонувшем ардуинотреде томился тайный любитель nRF51822. Куда ему податься с такими-то фетишами, кроме как в АРМ-тред?
Сук, сел с блокнотом и старым тредом дабы сделать из него выжымку сакральных знаний и достижений для будующих тредов и.... нихуя там полезного нет. Ни ссылок, ни вдумчивых разборов кода, одна петушня понтуется своими макетками.
Неправда.
Для вдумчивого ньюфага там дохуищща полезной инфы.
Кстати, как скачать тред целиком, со всей хуйнёй?
Скрипт писать лень, может что готовое есть?
Подвачну. Чистый бред. Нет чтобы узкоспециализированный тред STM32 запилить, а так всё и ни о чём.
>узкоспециализированный тред STM32 запилить
Ну давай думать шапку, да и пилить. Тред сам себя не запилит.
>узкоспециализированный тред STM32
Внимательно рассмотри контроллер на прилагающейся фотографии. Можешь ли ты представить себе, как он не справляется с расчетами в long double и невнятно виснет? Можешь представить, что он пропускает в очереди таски из-за нехватки оперативной памяти? А то, что он работает через раз из-за помехи при включении света в комнате? Ты видишь в нем контроллер, которому не хватает пинов под управление LCD с параллельным интерфейсом?
Теперь посмотри на него еще раз. Видишь ли ты на нем дорогой металлокерамический корпус? Может IDE для разработки под него стоит безумных денег и требует жутко производительного ПеКа? Он требует сверхмощного интеллекта для работы с ним? Или для покупки его необходимо продать автомобиль?
Посмотри снова на этот контроллер и спроси самого себя, почему ты еще не программируешь под него?
Почему ты до сих пор пишешь на wiring и боишься сделать шаг в сторону?
Для РФ график не особо актуален. Тут PIC+MSP430/MSP432+AtMega отъедают 60% бизнеса по микроконтроллерам.
Годная книжка.
Автор охуенен.
Какого года у тебя? У меня есть 2016.
На leanpub у него последняя версия январь 2018.
Рекомендую его бложик:
https://www.carminenoviello.com/
Например, вот этот пост весьма доставил:
https://www.carminenoviello.com/2015/09/04/precisely-measure-microseconds-stm32/
Есть ещё книжка Discovering the STM32 Microcontroller (бесплатная):
https://www.cs.indiana.edu/~geobrown/book.pdf
Там про F100.
Качнул, спасибо.
>>315149
Да, документация и информационная поддержка в целом - просто пиздец какой-то.
И HAL - лютое говно, даже на мой ньюфажеский взгляд. Собственно, буква A (abstraction) - отсутствует напрочь. Ну, или мы с ними по-разному понимаем слово "абстракция".
А самый прикол в том, что SPL и вообще всё, кроме HAL - теперь считается deprecated и не рекомендуется к использованию.
Короче, на программистах они явно экономят, судя по тому, что уже много лет так ничего путного и не могут родить.
>вообще всё, кроме HAL - теперь считается deprecated и не рекомендуется к использованию.
С одной стороны заебись, хоть не будет этой кучи несовместимого кода.
>всё, кроме HAL - теперь считается deprecated
CMSIS кто-то запретил? А как же Low-Layer (LL) API, который практически тот же SPL?
>Собственно, буква A (abstraction) - отсутствует напрочь.
Ты о чем? Взять, к примеру, обыкновенный таймер. У таймера есть предделители, которые везде разные, как ты их абстрагируешь?
>Короче, на программистах они явно экономят, судя по тому, что уже много лет так ничего путного и не могут родить.
Кортексы много кто делает, может стоит найти микроконтроллеры с нормальными библиотеками?
>>315202
Если не размазывать взаимодействие с периферией по всему коду, то эта куча кода значительно уменьшится.
>LL
Да, кстати, про него я и забыл.
>предделители
Вот именно.
Ты пишешь требуемый тебе период, а библиотека должна все эти делители сама задать. Типа, частота AHB такая-то, с таймера хочу такую-то, и всё. Плюс - дополнительные параметры для нестандартных случаев.
Если не экономить на программистах, можно дохуя чего наабстрагировать.
Блядь, да что ж такое, опять сажа сама подставилась.
Хочу добавить, что Куб, собственно, именно это и делает.
Т.е. вместо продвинутых либ они сделали генератор кода, что для контроллеров - более правильно.
Но, в этом случае HAL (или большая его часть) - просто не нужен. Лишняя промежуточная недо-абстракция.
Они это понимают, видимо, поэтому и сделали LL.
Сначала для микромощных моделей, а теперь и для всех.
Ещё бы они этот генератор как-то окультурили, чтобы он не срал в main.cpp, какие-то точки входа сделали бы, и т.п., было бы вообще охуенно.
>Типа, частота AHB такая-то, с таймера хочу такую-то, и всё.
Что-то я слабо представляю как это возможно. Например, стоит кварц на 8 МГц и нужно получить после предделителя на входе таймера 3 МГц. Такую частоту можно будет получить только при умножении (в PLL) частоты кварца на число кратное трем. А если нужно получить еще какую-нибудь частоту на другом таймере? По моему еще при разработке схемы придется все это учесть.
> делитесь знаниями по стм32
>Я уже писал проекты
Ну так и начинай делиться. Я вот, пока только умудрился светодиодом помигать на стм32ф429
И чем делиться к примеру?
Посмотрел в его сторну, поговнокодил . Проверил на эмс его и другие . Теперь хочу от него отказаться на веки вечные . Он как бы хороший, но далеко не самый надёжный.
Ух, прям как обратно в нулевые вернулся.
Мучал наносекндным генератором , без всяких защит , STM32 , STM8 , AVR8 , KINETIS KEAZ . Ну в общем у STM32 помер один пин , а stm8 и KINETIS KEAZ более мужественно выдержали испытание . Так что я лучше их юзать буду , ну ещё другие контроллеры помучаю , когда будет время.
На одной конференции представитель микрочипа говрил что армы от атмела хороши против помех. Попробуй их
Книги, полезные ресурсы с примерами кодов. Выше книгу вроде советовали, говорят годное.
Допустим Kinetis KEAZ , на отладочной плате выдержал 4 группу наносекунд , безо всяких дросселей . Купил исчо плату с tms570 он вреде , позиционируется для ответственных применений и сертификат sil-3 имеет . Его попробую следующим .
>На одной конференции представитель микрочипа говорил что армы от атмела хороши против помех
Там ведь разные семейства . В одном журнале писали что SAM3 умер быстрее STM32 .
Я хоть и не просил делиться знаниями, но не мог бы ты разъяснить >>315257
Допустим нужно получить (как пример) на входе (т.е. после предделителя) одного таймера 3 МГц, а на входе другого 5 МГц. при тактировании микроконтроллера от кварца на 8 МГц.
Если брать наиболее распространенный (на алиэкспрессе) STM32F103, то это можно получить только поделив частоту кварца на 2 и умножив в PLL на 15. Как тогда можно адекватно сделать:
>Ты пишешь требуемый тебе период, а библиотека должна все эти делители сама задать.
Буду, значит, духовно расти, а иначе пиздец.
Какие ещё есть книги для ньюфагов кроме >>315184 и >>315162 ?
Книги по С всякие валяются, даже пытался в CS50 пока не засыпался на магии с поинтерами в рекурсивных алгоритмах.
Я также взял палёный STLink и просто serial адаптер на FT232RL. Всякая мелочь типа парочки регистров и резисторов пополам с транзисторами едет.
>Какие ещё есть книги для ньюфагов кроме
Вот тут самое интересное. Никаких. Русскоязычных вообще ноль. Я тоже нуб и это просто пиздос. Ничего вразумительного, по форумам примеры квадратно-гнездовым способом написаны. Перевод кусками RM&DS. Ничего похожего на сообщество пердуинщиков, где можно найти разжеванное как для даунов, тут не жди. Только сам, только хардкор.
Период же можно получать не только путем изменения тактирования таймера, но и срабатыванием по прерыванию. Или я суть вопроса не так понял?
Другой
>то это можно получить только
Ты открой даташит и посмотри, что таймеры (ВСЕ) тактируются с шин APB1&2 и особо частотами ты там не разгуляешься ибо похеришь все тактирование периферии. Чувак и пишет, что настоящая абстракция это когда ты написал какой период хочешь получить на выходе, а HAL сам распихивает делители/умножители.
Ты путаешь тёплое с мягким.
Я говорил, всего лишь, о программном интерфейсе, а не о том, что библиотека должна магически привести все таймеры к общему знаменателю.
Нельзя, не сходится - выдаёт ошибку, и всё.
Вот тут >>315248 я потом написал, что Куб (генератор кода) лучше, т.к. в библиотеке было бы много лишнего кода, нужного только один раз при старте системы.
Я вообще только знакомлюсь со всем этим.
Но, программирую я давно, просто не для контроллеров.
Поэтому, смотрю на это как программист. И вижу, что в эмбед новые прогрессивные технологии программирования приходят, мягко говоря, с опозданием.
Достаточно посмотреть на уровень работы с кодом в Кейле - пиздец вообще, и это топовая коммерческая ИДЕ за охулиард мегабаксов. Уровень - конец 90-х, в лучшем случае.
Смысл в том, что долгое время контроллеры были маленькими, и писать под них можно было абы-как. Но, постепенно они стали большими, и писать кое-как уже становится напряжно.
Я неудачно выразился.
Имелся в виду именно инструментарий.
Т.е. раньше можно было и лопатой выкопать, а теперь заебёшься ей копать, и нужен экскаватор.
А, ну теперь понятно. Да, по нормальному такое делается в кубе в полуавтоматическом режиме или каким-нибудь препроцессором в процессе компиляции. Пихать это внутрь микроконтроллера просто бессмысленно.
>Достаточно посмотреть на уровень работы с кодом в Кейле
Я думаю ты это и так знаешь, но на всякий случай скажу. Тот же компилятор, что и в кейле, используется в ARM Development Studio (это на эклипсе). Вообще никто не мешает использовать gcc совместно с практически любой современной IDE. Еще я пробовал использовать armcc вместе с clion, но ломалось почти все кроме компиляции.
Вот, посмотри, как моргают светодиодом на любой STM32 Nucleo в Mbed OS, с помощью таймера (тикера):
https://os.mbed.com/teams/ST/code/Nucleo_ticker/file/7773a5ce9853/main.cpp/
Тикер тикает каждые 0.1 сек.
Весь код - 17 строк, включая пробелы.
Никакой ёбалы, никаких делителей-хуителей и прочего.
Бинарник получается 27 Кб, примерно, для F446.
Естественно, это рантайм мбедовский столько занимает, а не сам код. Т.е., при добавлении функционала размер будет расти не так сильно.
Как ты понимаешь, Nucleo - это голый контроллер, со светодиодом и кнопкой. Точно так же можно программировать любую плату на STM32, надо просто подкрутить конфигурацию.
> CLion
Вот это вот пробовал?
https://blog.jetbrains.com/clion/2017/12/clion-for-embedded-development-part-ii/
Я пока не пробовал, но собираюсь.
>Никакой ёбалы, никаких делителей-хуителей и прочего.
Но ведь для этого есть Ардуино? Она специально придумана, чтобы оградить впечатлительный мозг от таких сложностей как предделители и прочая ебала.
А теперь сделай на этом ардуиноподобном поделии частотомер, не используя прямую запись в регистры, только функции mdbed.
>Бинарник получается 27 Кб
Я тут в соседнем треде про стм8, рожал в муках датчик влажности на стм-овской HTS221. Даже с моим кривейшим говнокодом, мне хватило 5кб на тактирование,функцию задержек, само чтение с датчика и математические манипуляции с RAW-данными, пересчет в двоично десятичный код и отправку этой ебалы по UART. Вот сейчас подзавис с основной частью, которая будет на стм32ф4 с дисплеями и тачскринами все это принимать, думать над принятым и показывать в человекоудобном виде. Если только мои пропитые мозги не охуеют от такого.
На этом поделии никто не запрещает писать в регистры. Надо просто разобраться с работой ОС, чтобы не завалить ничего. Таймер там системой используется только один (2-й, по-моему). Остальное - доступно.
И речь шла о "моргании светодиодом".
Вообще, Mbed заточен под IOT, и для этих целей - просто охуенен.
>чтобы оградить впечатлительный мозг от таких сложностей
Я не впечатлительный.
Я ленивый.
Это разные вещи, лол.
Про Mbed vs Arduino есть кино:
https://www.youtube.com/watch?v=EJVTSSdZJoU
>>315350
Есть русскоязычные сайты, местами годные.
Гугол гуглит на раз.
Например:
http://narodstream.ru/stm-urok-15-hal-usart-dma/
http://we.easyelectronics.ru/STM32/rukovodstvo-k-bystromu-startu-po-rabote-s-periferiey-stm32f10x.html
У ардуинщика, скорее, проблемы будут из-за того, что тут надо иметь дело с голым контроллером.
Но, контроллеры все одинаковые, по большому счёту.
Поэтому, может быть полезно поупражняться с AVR без ардуино, чтобы было что-то знакомое, для начала. Инфы полно, гугол в помощь.
>Инфы полно, гугол в помощь.
Я с этим и не спорю. Но чтобы продвинуться на шаг, приходится выгугливать килотонны иногда абсолютно противоречивых примеров и инфы.
Нет, в clion так не пробовал. Тем более что я STM не использую, а тот плагин вроде в основном для автоматической генерации скриптов cmake для STM. И регистры так смотреть неудобно.
Использую сейчас для отладки ozone, как (там же) написано в первой части. Для прошивки (без отладки) приделал аналогичным образом j-flash.
Вообще-то все действия, описанные во второй части, можно сделать без плагина. Достаточно лишь использовать "GDB remote debug", там нужно лишь задать команду запуска сервера (например openocd или j-link gdb) в окошке "before launch", указать порт сервера и elf-файл.
> HTS221
И как оно?
В смысле - точность, надёжность, диапазон?
Температуру им же меряешь?
А давление чем?
>В смысле - точность, надёжность, диапазон?
Сравнил показания с Si7021, расхождение в пределах погрешностей.
>А давление чем?
А мне оно не нужно. Это датчики в подвал, чтобы мерять влажность и включать вентиляцию. Температуру им же меряю.
Отбой, нашел костыли для исправления
>так ненавидят HAL?
Почему ты так решил? Меня бесит полный кавардак в учебных примерах. Одни в HAL, другие в SPL, третьи вообще самопальное байтоебство проповедуют, четвертые орут ТОЛЬКОASM!!!
Смотрел ютубы, читал изиэлектроникс, двач, и прочие ресурсы. Везде одинаковые лучи поноса в сторону HAL, и при этом те же люди топят за SPL, хотя за бугром это общепризнанный моветон уже больше года.
Изиэлектроникс не лучше будет. Тут хотя бы ПЛИС-тред есть. Был еще ЦОС, но умные аноны разбежались.
Вообще HAL сложнее в освоении. Если для использования более простых библиотек достаточно прочтения референс мануала на микроконтроллер, то для HAL придется читать еще и документацию к HAL. Вообще код с SPL можно перенести на современный LL API простым переименованием в большинстве случаев.
Хоть я сам не пишу для STM, но думаю что стоит использовать LL API и немного HAL (для таких вещей как USB).
А чего то прихуел гляда в hal и ни хуя не понял как он работает . Толи я тупой мудак , то ли блеять не надо пытаться понять и просто вызывать функции .
Я использую SPL, раньше юзал прямое обращение к регистрам, мне норм. Хорошо написано, нет геморроя по подключению в проект. Всегда можно проследить что функции делают на низком уровне.
>ямое обращение к регистрам, мне норм. Хорошо написано, нет геморроя по подключению в проект. Всегда можно проследить что функции делают на низком уровне.
А как в HAL это же самое проследить ?
LL не умеет в переферию, как пишут стмовцы, это библиотека для работы с регистрами.
The HAL offers high-level and feature-oriented APIs, with a high-portability level. They hide the MCU and peripheral complexity to end-user. The LL offers low-level APIs at registers level, with better optimization but less portability. They require deep knowledge of the MCU and peripherals specifications
За себя могу сказать, что когда писал функцию микросекундных задержек, не нашел как HAL'ом установить время работы таймера в one-pulse mode. Поэтому проще было вписать значение в регистр напрямую. И до сих пор все прекрасно работает.
Хотя не. Вместо того, чтобы каждый раз запускать Init проще было записать такое:
TIM4->ARR = us - 1;
HAL_TIM_Base_Start(&htim4);
while ((TIM4->CR1 & TIM_CR1_CEN) != 0);
https://youtu.be/kHBLaw5nfzk
>А как в HAL это же самое проследить ?
Читай исходники.
Выброси Кейл и начни пользоваться Eclipse, а лучше - TrueSTUDIO - она сейчас стала бесплатной для STM32, и это та же эклипса, только допиленная до состояния коммерческого продукта - отладка, просмотр регистров etc. С кубом работает на ура, сразу, без костылей.
Так вот - создаёшь в кубе проект, экспортируешь в TrueSTUDIO, открываешь main.c и Ctrl+click-аешь мышкой в функции HAL_ololo_xxx() и во всё остальное. Читаешь, прёшься, умнеешь.
Например, можно быстро понять, что многие функции HAL - просто обёртка над простой записью в регистры, в тот же BSRR, не более того. В некоторых - добавлены проверки корректности параметров и конфигурации. И т.д.
Очень удобно быстро смотреть структуры - короче, совершенно другой уровень работы с кодом.
>Ctrl+click-аешь мышкой в функции HAL_ololo_xxx()
Дык в Кейле тыкаешь в функцию правой кнопкой и в Go To Reference To 'HAL_YOBA_Function(xxx)'
>>315533
Дело не во внешнем виде.
Это вообще разные вещи по уровню работы с кодом. Потом можно обратно на Кейл вернуться, когда освоишься с темой.
Эклипса тоже хуйня, на самом деле, по сравнению с тем, что делает JetBrains (CLion). Но, с лайоном будет гораздо больше возни - он под эмбед пока не заточен.
>Эклипса тоже хуйня
>>315528
>ачни пользоваться Eclipse, а лучше - TrueSTUDIO
Лучше я начну с купленного на торрентах Кейла. А вот когда я буду спокойно ориентироваться в коде, разберусь в тонкостях использования всяких -хуй -пизда -джигурда в настройках компилирования, я перестану фалломорфировать при виде непонятных ошибок линковщика, и т.п. Вот тогда я полезу в дебри Эклипя и прочего Линукса. Извините.
Ну, это дело хозяйское.
Алсо, на торрентах достаточно купить только кейген.
А кейл потом свежий купить прямо на сайте, лол.
Уточню, однако, что TrueSTUDIO - это _коммерческая_ IDE для ARM, которая с этого года стала бесплатной (только для STM32).
Скачал - поставил - всё работает.
Там нет непонятных ошибок линкера. Сохраняешь проект из куба, открываешь - компилируешь - запускаешь прямо на чипе сразу отладку. Одной кнопкой, как и в кейле.
Минус - в кейле несколько лучше компилирует компилятор.
Линукс же тут вообще не при делах.
Есть ещё Segger, кстати, он тоже официально бесплатный для некоммерческих проектов.
А IAR покупается примерно так же, как и кейл.
ОПЯТЬ ТЫ? ИЗЫДИ, ГОВНОЕДИНА!
Или ставится Visual Studio 2017, потом на торренте покупается VisualGDB. Устанавливается тоже далее, далее, ок. После запускаешь плагин в ВС, один раз проходишь процедуру настройки качая OpenOCD, тулчейн и пак с мк для работы с стм32. И у тебя в качестве иде для мк появляется вижуал студио с интеллисенсом и прочими ништяками.
>кто нибудь пользуется системой контроля версий?
Пока нет, но уже читаю книжку "Git в помощь молодому колхознику" ибо уже такой пиздец в папках проектов мигающих светодиодов, что ебануться можно.
Почитай Pro Git, она на русском есть, реально нужная вещь ибо пиздец в файлах настает молниеносно.
Спасибо.
А то сейчас у меня просто копипаст папки проекта с указанием в имени что я там делаю. Вот такой вот колхоз
Да у меня такой же. Плюс наработки которые вроде не пригодились, отдельными файлами сохраняю, чтобы когда понадобятся скопипастить их. В общем пиздос.
В онлайн - ГитХаб.
И BitBucket.
Смысл гита в том и состоит, что у тебя в оффлайне всегда есть полная история проекта - независимо, используешь ты онлайн или нет.
И ты можешь переключаться между любыми версиями опять же в оффлайне.
Если работаешь один и на одном компьютере - онлайн нужен только для бекапа. И то, никто тебе не мешает просто бекапить папку .git (где вся история и лежит).
В онлайн для начала лезть вообще не надо.
Всё абсолютно (кроме групповой работы) доступно в оффлайне.
Если надо будет, можно залить потом.
В качестве gui (если в иде нет поддержки, типа кейла) можно использовать SourceTree.
>просто копипаст папки проекта с указанием в имени что я там делаю
Ты не поверишь, но "коммит" в гите - это и есть снимок текущей версии папки проекта (всех отслеживаемых файлов), с комментарием - что ты наделал с прошлой версии.
Можно отслеживать не все файлы, а только нужные. Также, есть файл .gitignore, где перечислено то, что отслеживать вообще никогда не надо - бинарники и т.п.
Можно вернуться к прошлой версии всего проекта и обратно. Можно в гуи просто посмотреть старую версию одного файла и т.д.
В качестве гуя ещё хорош GitKraken.
там даётся необходимый базис для начала.
а уж куда дальше сам разовьёшься - зависит только от тебя.
и даже некоторые ошибки в том курсе тоже присутствуют. скажем, неточности.
Вообще кстати да, лучше начальные вещи типо моргания сделать на основе таких уроков. А после уже выходить плавно на самостоятельное программирование.
Сам начинал с видеокурса по stm32f4 на Ютубе (кеил + spl)
От изучения программирования контроллеров по видосикам. Я еще понимаю гончарному мастерству или вышивке арматурой можно поучиться по видиво, но, блядь, все эти "видеоуроки автокадного мастерства", "программируем на крестах через два видеоурока" и т.п. Неужели человечество настолько отупело, что текста уже не в силах понять? Надо как мартышка повторять движения мышей как на видиво?
Слова можно понимать по разному, к тому же у писателей учебников стоит задача минимизировать описания и по возможности уменьшать количество страниц текста. В итоге книги получаются для тех, кто уже в теме.
А в видео действия имеют единственный смысл, а именно то, что сделал автор.
Считаю видео более наглядным чем десять страниц текста. Легче посмотреть куда чувак тыкает чтобы создать проект, чем читать это. И мы говорим не о сложным проектах, а только о начальном уровне. Никто не говорит о видео "создаём терминатора за 10 минут".
>Легче посмотреть куда чувак тыкает чтобы создать проект,
Это папка тыкал твоей мамке, чтоб создать тебя, а мышкой - КЛИКАЮТ!
Ебать ты придирчивый, чувак. Ты ещё скажи не дырка, а отверстие. Корабли не плавают, а ходят.
А в чем разница между Дискавери и нуклео? Поясни, если не сложно. Сам начинал с дискавери, недавно надыбал себе набор с всякими доп.платами и платой нуклео, но не трогал ещё.
На дискавери уже напаяно всякой хуйни типа MEMS, экрана, тюльпанов для I2S, разъема для камеры. Нуклео, это как китайский стм32ф103 - камень + программатор + пара диодов + разводка ножек. Первый пик диско, второй нуклео.
Вот Eval.
>И это за кристалл
У него у самого цена не отличается от 429 серии. Хотел купить, но потом передумал, шибко быстрый.
из роддома )
бесплатно. На работе выписали, а я домой пока утащил в свободное время изучать, поскольку в будущем это может пригодится.
В Atmel Studio прогаешь?
Спасибо
>>31020
Ну да. Красиво, удобненько. Мне хватает с головой. К тому же в конце концов официальное ПО от производителей
Анон, какова хуя HAL_Delay не работает? Надо что-то инициализировать?
Лол. Короче выяснил в чем дело. Какого-то хуя в hal из кейла нет обработчика sysTick и потому программа виснет.
Завалите ка свой ебальничек, сударь малолетний.
https://aliexpress.com/item/1pcs-STM32F103C8T6-ARM-STM32-Minimum-System-Development-Board-Module-For-arduino/32719680030.html
Можно.
Вот только отладить не получится.
Не знаю что такое "просто запустить прошивку", но это выглядит похожим на проебанный volatile.
ну, если просто залить прошивку на контроллер и запустить его, то в таком случае контроллер не видит в переменной результат преобразования АЦП.
Если запустить в режиме дебага, в переменную пишется результат и все работает как надо.
А ты область видимости переменной какую сделал? Может она у тебя дальше функции и не видна?
Видимость нормальная, должно видеть. Иначе мне скорее всего ошибку бы выдало что такой переменной не существует при компиляции
Бля, я практически уверен что переменную видит.
>сохранение через ДМА в переменную
А это как? Я думал, что DMA это прямой доступ к памяти и ты сохраняешь не в переменную, а передаешь указатель на эти данные.
При настройке дма ты указываешь два адреса памяти. Откуда считать данные и по какому адресу их записать. После запуска программы дма молотит без твоей помощи информацию, т.е. Считывает быйты по адресу (к примеру)по которому находится регистр АЦП и записывает эти байты в память по второму адресу, который принадлежит переменной.
Если правильно задано (флагами) ядро для которого компилировать, то все будет использоваться.
На всякий случай добавлю:
1) В Cortex-M0 имеется умножение только 32х32 разряда с 32-разрядным результатом. В M3 уже есть умножение с 64-разрядным результатом, причем есть вариант с накоплением.
2) В Cortex-M3 есть команда деления, которой нет в М0.
3) В Cortex-M4F есть FPU, причем оно бывает в двух вариантах с одинарной точностью (может только float) и с двойной (может float и double). Но в STM32 вроде бы FPU имеется только с одинарной точностью, соответственно вычисления с double будут медленные. Также GCC без дополнительных флагов не использует инструкции FPU, наверное в кейле/иаре также имеется отдельная галочка.
Я не он, но попробую:
https://gcc.gnu.org/onlinedocs/gcc-6.1.0/gcc/ARM-Options.html
-mfloat-abi=name
-mfpu=name
Это не линуксовые команды.
Это _опции_ - дополнительные параметры при вызове компилятора.
Я же ссылку дал.
Какие именно туда подставлять "name" для STM32Fx - надо гуглить отдельно (о чём и был вопрос).
Пока накидал придумал только:
1) выделение в оперативке еще одно массива для хранения ( может не хватить места)
2) запись во флеш-память (записывает долго )
может есть какие-то нюансы или еще что?
Т.к. массив только дописывается, то хранить его весь в RAM нет смысла.
Надо иметь буфер, и в фоновом потоке сливать его куда ты там хотел - на флешку или в EPROM.
Можно держать два буфера (указателя).
Пока текущий пишется, другой сливается, потом меняются.
И т.д. и т.п.
Есть владельцы STM32F429-Discovery в этом ИТТ треде?
Возник вопрос после вдумчивого раскуривания схемы данного устройства. У него, что, можно встроенный дисплей переключить в последовательный режим и освободить немного портов?
https://ru.aliexpress.com/item/Free-shipping-STM32F407ZET6-development-board-M4-STM32F4-core-board-arm-development-board-cortex-M4/32689262341.html
Стоит ли брать? Нужен ли к ней программатор?
Я ещё в ньфаг-треде написал что нужен. Щас он в программаторов тред зайдёт и там спросит какой программатор нужен.
Конвертер USB-UART всё-равно нужен будет.
Кортексач, хочу плотно подсесть на RTOS и смотрю в сторону ChibiOS. Отговори или посоветуй FreeRTOS другую ОС.
Бери отладчик в этом же магазе. https://ru.aliexpress.com/store/product/ST-Link-V2/1817254_32544133138.html Вариант не самый лучший и плата для бомжей, иногда приходит кривая, но в F407ZE полноценный FSMC, ножек больше и цена радует. В нуклее вообще R огрызок.
Долго думал чем оправдать её применение, но по факту получается только чтоб иметь её в качестве инструмента на будущее.
>Там есть загрузчик по uart
Нахуя этот гемор если клон ст-линка стоит столько же сколько и конвертер юсб-уарт? Я себе его вообще спаял за пол часа и не парюсь.
Беру, спасибо большое!
Сайт ST требует регистрации чтоб что-то скачать. Целые сутки я ждал письма с подтверждением мыла. Пока ждал - запросил ссылку на скачивание без регистрации. Ссылка пришла, но скачивания не произошло. Вообще никак. А ещё краткие описания семейств и в даташитах - путаница пиздец. Документация - ебанько.
SW4STM32 по сути сраный эклипс на яве, что на моём нетбуке с хубунтой превращается в слайдшоу с квестом. После всех установок, обновлений и правок - проект всё-равно не собирался и вылетал с какой-то неведомой мне ошибкой о том, что проект не существует.
ST MCU finder приложение на ведре не понимает, что доступна вафлесеть, и не работает. Все приложения работают, кроме этого.
Сайт с Mbed работает, но онлайн компилятор не раскрывает список "Select platform:". Вводишь имя-хуимя, кликаешь туда, список вываливается, но он пустой.
На винде есть Кеил, но как же я не хочу в винду...
>Сайт ST
Красноглазый смог собрать ядро и выйти в интернет, спешите видеть. Сайт ST всегда отличался калечностью и уебищностью. Дахе логин у меня происходит секунд 40. Хотя за последние пару лет они довольно хорошо рассортировали материалы по контроллерам и я даже уже и не припомню когда бугуртил в поисках нужного.
А так, заради работы с контроллером можно и винду поставить с кейлом, ты уж целку из себя не строй.
>можно и винду поставить с кейлом
Дык поставлено, но
>как же я не хочу в винду...
И вообще мой высер никак не отменяет уёбищности описанного. У меня впечатление, что всем вообще похуй, и эти фантики сделали под лозунгами "и так сойдёт" и "хуяк-хуяк и в продакшен".
>и так сойдёт
Я, скажем так, совсем немного прикоснулся к программированию стм-ок да и вообще контроллеров, прямо на осьмушку шишечки, но на винде не было проблем ни с купленным на торрентах кейлом, ни с STVD для стм8. Про линукс говорить ничего не буду, даже не пытался попробовать.
Осталось проверить TrueSTUDIO которая решит исход событий вселенского масштаба. Господи, спаси человечество меня, я не хочу в шиндоус.
>SW4STM32 по сути сраный эклипс на яве
В чем проблема написать мейкфайл? Можно даже готовый взять. Не хочешь мейк - есть CMake и прочие.
>ST MCU finder
>приложение на ведре
Чо? Зачем это тебе?
>онлайн компилятор
Ну это вообще. У тебя в репозитории убунты по любому есть gcc-arm-none-eabi, которым все должно компилироваться.
>Сайт ST требует регистрации чтоб что-то скачать.
Это да, у них все не лучшим образом. А еще микроконтроллерные кортексы не заканчиваются на ST, есть минимум полтора десятка производителей.
>На винде есть Кеил, но как же я не хочу в винду...
У меня почему-то gcc одинаково работает под виндой и линуксом.
>как же я не хочу в винду...
Представь себе, для 8051 ничего кроме SDCC (который по качеству не очень) под линукс нет. А для многих микроконтроллеров и сигнальных процессоров так вообще ничего линуксового нет.
>мейкфайл
А почему бы IDE просто не заработать как положено?
>Чо? Зачем это тебе?
Случайно наткнулся. Оказалось, что она тоже от ST, и тоже не работает.
>Ну это вообще.
Просто решил попробовать подСТшную ардуину, но оно отказалось работать.
>кортексы не заканчиваются на ST
Вопрос в цене и кол-ве говна с Али, которым так сильно хочется обмазаться...
>gcc одинаково работает
Так проблема не в компиляторе.
>вообще ничего линуксового нет
Допустим. Вот только под СТМ32 какбе должно быть, судя по статьям в интернетах, чтоб с ИДЕ, отладкой и без мозготраха. У меня не получилось, например. И, если что, я не ОП треда.
На винде Кеил у меня отлично работает. Ардуина в убунте тоже работает, в т.ч. с СТМ (Только в качестве эксперимента. Даже не у ардуинохейтера может взорваться пердак от такого сетапа). Проверю ещё TrueSTUDIO искаропки, который тоже эклипс, и если откажется, то да, придётся винду только для СТМ держать.
да я уже вчера купил самую простенькую дискавери, теперь все одно Ethernet модуль нужен
Ну и неправильно. Нужно было брать микроконтроллер с Ethernet MAC, а к нему уже приделывать PHY. Иначе ты бы мог делать то же самое на ардуине с каким-нибудь ENC28J60, даже код отличался бы только в части SPI. Или можно было взять микроконтроллер со встроенным PHY, только таких у ST вроде нет.
>>337292
>понял, что зашквар
Вот это спорно. Безусловно пердуино иде можно назвать зашкваром, но саму плату - не особо. Конечно атмеги устарели, но с чего бы от этого им стать зашкваром?
Для вкатывания атмеги неплохи - в небольшом количестве регистров трудно запутаться. И у них простой ассемблер, который несложно освоить для общего развития.
>>337357
Ушло недописанным. В общем, смотри на платы с 407/207 и 405/205 камнями на борту: https://www.waveshare.com/wiki/Main_Page#STM32
Некитайцы, кстати, их тоже делают. На стартерките куча плат с STM32/LPC и эзернетом.
>>337357
Не только, в F107 тоже есть. И вообще армы не заканчиваются на STM32, например со встроенным PHY:
https://www.digikey.com/products/en/development-boards-kits-programmers/evaluation-boards-embedded-mcu-dsp/786?k=MSP432E401Y
https://www.chipdip.ru/search?searchtext=+MSP-EXP432E401Y+
Если от игры с отладками перейти к созданию своих плат, микроконтроллер со встроенным PHY может оказаться получше STM32 из-за упрощения платы и экономии места.
Господа, есть один STM32F103ZET6. Какой самый минимальный вариант обвязки, чтоб он опознался китайским st-link'ом? Нужно ли запитывать все пины VSS и VDD для этого? Посылать нахуй в гугл смысла нет, буду ставить эксперимент и постепенно подключать, а затем отключать пины, чтоб выяснить, если никто ИТТ не проверял сам.
А ты точно уверен, что ему нужен внешний кварц? Разве SWD не тактирует его сам? Более того, у него же есть внутренняя RC-цепь на 8МГц.
>SWD не тактирует его сам?
Нет
>есть внутренняя RC-цепь на 8МГц.
Есть, можно даже на горячую ломать кварц и он перейдет обратно на встроенный осциллятор, но 8мгц это все же не 72
>минимальный вариант обвязки, чтоб он опознался
Я так понимаю, что внешний кварц таки не нужон. Как насчёт соединения всех ног питания? Хватит ли одной пары?
Так у диодов же обратное включение навроде защиты от ESD. Почитал интернеты и Getting started with STM32F10xxx hardware development. Похоже, что там подразумевается внешняя шина и без соединения всех VDD/VSS работать не будет. Энивей, спасибо, завтра буду проверять экспериментально. Обидно если сожгу камень, но, вроде, не должен.
*у дейва
Ну, это другое. Вопрос не в том, чтоб запитать ядро через диод. Нужно наверняка знать, соединены ли внутрисхемно все пины питания. В видео использован МК с одной парой выводов питания. Если использовать МК с двумя парами, но внутрисхемно расцепленными, то такой МК не заведётся подобным образом.
Не, похоже таки шина внешняя. В даташите ноги питания обозначены и пронумерованы от Vdd_1/Vss_1 до Vdd_11/Vss_11. придётся все пины соединять блять.
1) Зачем брать взломанную и, возможно, затрояненную версию, когда есть бесплатная версия с ограничением 32 кБ. Твои программы занимают больше 32 кБ флешки?
2) Почему бы не взять GCC?
Ну, по разному бывает. Но, например: http://fandy.ucoz.org/publ/metalloiskatel_quot_kvazar_quot_quot_quasar_quot/metalloiskatel_quot_quasar_arm_quot/2-1-0-5 занимает около 40 кБ флешки, более старые версии немного меньше.
Хотя, какой-нибудь lwIP даже побольше 32 кБ занимает, или это HAL у STM-щиков такой жирный.
И ты точно о том пишешь? Это ограничение не на размер исходного кода, а на суммарный размер секций данных и кода.
Это что такое https://rutracker.org/forum/viewtopic.php?t=5113043 ?
Но для начала ты должен ответить (хотя бы самому себе) чем тебя не устраивает >>337745 Даже если перестанет хватать версии с ограничениями, ты всегда можешь использовать "таблетку" из раздачи с рутрекера. А GCC чем не устраивает?
>А GCC чем не устраивает?
Под него линкер-скрипты, меморимапы и фьюзы-хуюзы руками на башоперле же писать?
>А GCC чем не устраивает?
В чем смысл уговаривания низкоквалифицированных специалистов перейти на более сложный софт?
Я вообще не понимаю, нахуя тут постоянно свидетели Эклипса и ГЦЦ лезут? 99% посетителей /ра/ даже Ардуинский blink не могут воспроизвести, а им тут начинают затирать про make и прочие линкеры/канпиляторы
Ну как бы это ARM тред. Это подразумевает, что посетители этого треда осилили хотя бы Си. Осилить после этого остальное уже несложно.
Но писал я не об этом, а о том, что для мигалок кейл воровать не нужно, а для чего-то более сложного можно и GCC же освоить.
>>338143
Ничего, что кейл это IDE вместе с компилятором, а GCC компилятор? Компилятор, не обязательно GCC можно и armcc, можно использовать из самых разных IDE.
>божественного
Тебе хоть есть с чем сравнивать? Как IDE, кейл остался в прошлом веке.
Откуда такая агрессивность? Это реакция на замечание о том, что даже кейл воровать не обязательно?
Если так хочешь эклипс, можешь попробовать TrueSTUDIO или DS-5 Development Studio. Проект создается так же просто как в кейле, но лучше навигация по коду, есть рефакторинг, можно поставить плагины для интеграции с гитом, doxygen и прочим.
>>338215
Нашел что советовать. Оно тормозит на 16 ГБ оперативной памяти, с двумя гигабайтами уже работать совсем невозможно. А под XP вообще не запускается. Лучше бы visual studio советовал.
>>338236
Не знаю что ты называешь напильником, но там необходимо вручную писать CMakeLists.txt, причем не только для микроконтроллеров, а вообще для всего. Так что, наверное, для тебя без напильника никак. Хотя если освоить CMake, то будет все просто.
>Хотя если освоить CMake, то будет все просто.
Зачем плодить сущности?
Есть же Keil (IAR, TrueSTUDIO), который из коробки/торрентов всё умеет.
На лицензионность я хер клал.
Тот же TrueSTUDIO сейчас для STM32 вообще бесплатный (хотя после Keil он мне не зашёл)
Оо
>Как IDE, кейл остался в прошлом веке.
Keil как среда разработки для ARM, а конкретно, для STM32.
Keil не ok, по твоему мнению.
Что взять БЕЗ ГРЁБАНОГО ДОПИЛИВАНИЯ, что бы начать кодить/отлаживать для STM32? Поддержка CubeMX приветствуется. Хотелось бы обоснование выбора.
Keil. Поменьше опирайся на мнение общественное, и побольше на своё. Какой вообще смысл выбирать что-то, если есть возможность поставить Keil и ниибаца?
Выбор сейчас огромный, не мудрено реально хороший вариант проебать из-за лени и инерционности мышления. Поэтому и интересуюсь.
>Зачем плодить сущности?
Ты наверное еще и гит или меркуриал лишними сущностями считаешь.
>Что взять БЕЗ ГРЁБАНОГО ДОПИЛИВАНИЯ
С таким подходом к программированию - только кейл.
>>338268
Если ты в эклипсе (TrueSTUDIO) не заметил никаких преимуществ, то продолжай использовать кейл. А так, в более-менее современных IDE, в том числе и в эклипсе, есть много полезных средств для работы с кодом, выше я называл некоторые. В предыдущем треде тоже кое-что можно почитать.
что-то конкретики нет.
>Поддержка CubeMX
CubeMX генерирует Makefile,
так что vi и arm-none-eabi- и openocd достаточно.
Сам понимаешь что выигрывает в выборе из vi и eclipse параши.
>так что vi и arm-none-eabi- и openocd достаточно.
>Сам понимаешь что выигрывает в выборе из vi и eclipse параши.
что?
Открываю в AtollicSTUDIO проект из CubeMX - пишу HAL_GPIO_WritePin(
Ну и где тут посмотреть какие параметры у функции?
Почему в процессе написания не предлагалось вариантов названия вызываемой функцию?
В Keil это работает из коробки.
В обыкновенном эклипсе все работает. По умолчанию подсказки появляются по нажатию ctrl + пробел (в кейле точно такое же сочетание клавиш), но можно в настройках включить автоматическое появление. Возможно в AtollicSTUDIO автодополнение по умолчанию отключено, для уменьшения занимаемой памяти, чтобы на древних компах не тормозило.
Хотя, по сравнению с visual studio и даже qt creator, автодополнение в эклипсе работает плоховато.
>По умолчанию подсказки появляются по нажатию ctrl + пробел
О, прикольно!
>в кейле точно такое же сочетание клавиш
В Кейле это сразу включено
>автодополнение в эклипсе работает плоховато
А что работает хорошо?
Для хорошего познания необходимо программировать на чистом железе и без всякого автодополнения и в редакторах по типу vi emacs joe
>В Кейле это сразу включено
Что-то не похоже. По крайней мере в версии 5.11 этого нет. Возможно у тебя репак от Васи с торрентов, в котором настройки по умолчанию изменены.
>А что работает хорошо?
Выше по треду перечислили некоторые навороченные современные IDE:
>visual studio и даже qt creator
>clion
>>338455
Это ты вообще о чем? Про редакторы так вообще бред. Заучивание горячих клавиш этих уродцев никак не поможет изучит язык Си. А еще, судя по тебе, использование этих текстовых редакторов плохо сказывается на способности понимать русский язык.
>Это ты вообще о чем
Не используй кубик, программируй baremetal
>изучит язык Си
только ассемблер
Я конечно допускаю то что могу что-то не понимать, но по моему ты делаешь ерунду.
>путем дерганья ног
Чем это будет отличаться от использования таймера? У тебя наверняка не все таймеры заняты. Запуск и остановка таймера это точно такая же запись в регистры, как и дрыганье ногой.
>потому что мой умеет всего 24 Мс/с.
Столь малые задержки это всего лишь несколько инструкций. В таком случае, по моему, целесообразнее смотреть ассемблер.
>в зависимости от значений переменных и ветвлений и лучший/худший вариант.
Возможно ты это и так знаешь, но на всякий случай скажу. Видишь как организована память? Так вот для разных микроконтроллеров с одним ядром это может немного отличаться. По крайней мере быстродействие и разрядность флеша может отличаться. В тех же STM32 (и почти во всех других кортексах) есть буфер предварительной выборки из флеша, который необходимо включать при большой тактовой частоте, да еще и настраивать количество тактов задержки при доступе к флешке. Размер этого буфера и возможно логика его работы отличается в разных микроконтроллерах, даже если у них одинаковое ядро. А еще программу можно запихнуть в ОЗУ. А еще ОЗУ может быть однопортовое и двухпортовое.
>анализ языка меня немного пугает.
Не пойму где тут анализ языка. Тут скорее работа с ELF и эмулятор микроконтроллера. Вроде как тайминги ядра все описаны в Technical Reference Manual на arm.com. Вот только мне кажется что там не полностью все описано. Например, мне не понятно как изменятся тайминги при выполнении кода из ОЗУ, когда все взаимодействие с памятью будет осуществляться через одну шину. Хотя, возможно, я просто невнимательно читал документацию.
Да, а я думал, что уже что-то понимаю в микроконтроллерах. Даже книжку по M0 прочитал наполовину и все равно есть области, в которых не шарю совсем.
>Чем это будет отличаться от использования таймера?
Таймер даже лучше. Спасибо, с ардуино осталась привычка ногодрыгом все мерить. Но все равно остается заливка программы, хотя тут можно написать вывод значений по UART или SWO и получить обычный анализатор, который будет показывать, сколько раз какое число тактов исполнялось, сейчас имеется один для анализа дампов с логического анализатора.
>В таком случае, по моему, целесообразнее смотреть ассемблер.
Да, я так и делаю иногда или пишу сразу на нем, но подсчет тактов надо делать вручную или смотреть, что меняется в разных версиях, хочется это как-то автоматизировать.
Видишь как организована память?
Да, ее работу я еще не разбирал. Хочешь сказать, что в некоторых случаях могут быть задержки на получение инструкций? Это можно настроить, думаю, они ж фиксированные. Я с STM32F0 и F4 работал, там все без ожидания работает, из ОЗУ запускать программу не пробовал.
>Не пойму где тут анализ языка.
Ну так я же для си делаю анализатор,а не для ассемблера. Как минимум циклы и ветвления надо распознавать. Кажется, что все просто, а на самом деле все совсем не так будет. Ветвление еще ок, а циклы хочется решать хитрее, чем простой симуляцией, чтобы не городить эмулятор. Я хочу вообще без него обойтись, просто считать количество тактов на инструкцию. Keil генерирует листинги с комметариями, какой кусок кода скомпилировался в инструкцию, так что с этим проблем нету.
>Например, мне не понятно как изменятся тайминги при выполнении кода из ОЗУ
Особый случай, его отдельно разбирать надо будет. Зачем это делать, кстати, кроме экономии ресурса памяти или случая, когда она медленная?
>Я с STM32F0 и F4 работал, там все без ожидания работает
>STM32F0
RM0360 страница 58
>Bit 4 PRFTBE: Prefetch buffer enable
> и т.д.
>Bits 2:0 LATENCY[2:0]: Latency
>hese bits represent the ratio of the SYSCLK (system clock) period to the Flash access time.
>000: Zero wait state, if SYSCLK ≤ 24 MHz
>001: One wait state, if 24 MHz < SYSCLK ≤ 48 MHz
Все там есть. И задержка есть и буфер. За тебя это наверное HAL с кубом настраивали.
Для STM32F4 сам сможешь найти.
Мой прогноз - с таким подходом ничего адекватного у тебя не получится.
>просто считать количество тактов на инструкцию.
Ты хотя бы про конвейер в процессорах слышал? Так в кортексах он тоже есть.
>RM0360 страница 58
Я только про периферию читал. Нет, частота 48МГц, а память без задержек ебашит и все работает, странно как-то. Может потому что напряжение питания 3.3 вольта, лол.
А с задержкой совсем грустно, без нее прерывание 12.7мкс занимает, с ней и PRFTBE — 14.2, без PRFTBE — 19.2.
>HAL с кубом
Фу-фу, только CMSIS и работа с регистрами, только хардкор. Думаешь,если бы я использовал HAL, мне бы было дело до пары процентов во времени исполнения?
>с таким подходом ничего адекватного у тебя не получится.
Может быть, пойду собирать инфу. Даже с допущением, что все инструкции выполняются за время, которое на сайте армовском написано, можно получить результат, близкий к реальному. Мне не абсолютное значение длительности важно, а относительное. Задержки же постоянны, изменяя их, невозможно сделать один фрагмент кода быстрее другого.
>Ты хотя бы про конвейер в процессорах слышал?
Да, и про архитектуру слышал, и микрокод писал. Из-за него осуществленное ветвление 3 такта занимает вместо одного, судя по всему.
Пытаюсь её перепрошить через ST-Link v2 c зажатым reset'ом - не прокатывает. Программатор чип не видит.
Помогите, а?
>Может потому что напряжение питания 3.3 вольта
А также комнатная температура и просто повезло.
>Фу-фу, только CMSIS и работа с регистрами, только хардкор.
Ну и зря. Хотя бы настройку периферии можно было через HAL или LL делать. Какая разница сколько времени после включения питания будет настраиваться периферия? Ну займет оно у тебя чуть больше памяти, какая разница, все равно памяти обычно много. Ты вот не пользовался и как минимум одну ошибку сделал.
>мне бы было дело до пары процентов во времени исполнения?
Вот это странно, что тебе есть дело до этого. На практике, за редкими исключениями, оптимизация имеет смысл только для снижения потребляемой мощности. Либо подобную оптимизацию используют для экономии пары копеек на микроконтроллере, но это уже обычно не про кортексы.
Да хоть ты в три раза по быстродействию соптимизируешь, все равно приличный DSP/ПЛИС не заменишь кортексом.
>>338606
Тебе нужно включить бутлоадер.
>Тебе нужно включить бутлоадер.
Я на boot0 кидал 3.3в - ничего не изменилось.
Ну или можешь подробнее разжевать?
Там кроме BOOT0 есть BOOT1. Нужно убедиться что на BOOT1 подается 0, например резистором к земле притянут.
>>338621
>f4
Так там в начале лежит таблица векторов прерываний. Тебе тогда придется после каждого стирания сектора их восстанавливать.
А так все возможно. Потребуется изменить скрипт линкера и startup.
А в ST-link utility определяется? Может, в логах будет проблему видно. У меня на прошивке выше 27 не подключается плата, если подать на нее 5 вольт со встроенного источника, с внешним или 3.3 все работает. На 27 версии работает, но с 28 откатиться на более старые не получается.
>>338613
>А также комнатная температура и просто повезло.
Ну значит так и оставлю. Надо тест написать, может, ошибки проскакивают, но крайне редко.
>Хотя бы настройку периферии можно было через HAL или LL делать.
Про LL не слышал, только про stdperiph, но он у меня не захотел компилироваться. Я, когда начинал, скачал куб, настроил там все, посмотрел, какую он простыню накатал и решил, что он мне не нужен. Тащить его ради инициализации, которая по мануалу за полчаса делается? И как раз записал себе в то время встраиваемые системы в универе, а там все на регистрах было, для лучшего понимания, наверно, так что решил, что только регистры и никаких библиотек. Все равно мануал для понимания почитывать надо. Плюс с ним я бы и не узнал, что память без задержек может работать, надо еще частоту попробовать выше максимальной поднять для эксперимента.
>Ты вот не пользовался и как минимум одну ошибку сделал.
Не одну, я в прошлом треде синтезатор для баса делал, можешь почитать. И макрос для значения одного регистра в другом использовал, и выключенную периферию конфигурировал. Вкатился с нуля, надо было хоть что-нибудь почитать для начала, а не пытаться сразу писать совсем без понимания, как все работает.
>Вот это странно, что тебе есть дело до этого. На практике, за редкими исключениями, оптимизация имеет смысл только для снижения потребляемой мощности.
А для увеличения производительности? У меня сейчас в прерывании по таймеру ШИМ 32-канальный считается, и чем оно меньше времени занимает, тем выше можно сделать частоту. Я только в случаях, когда производительность затрагивается, это и делаю.
>Либо подобную оптимизацию используют для экономии пары копеек на микроконтроллере, но это уже обычно не про кортексы.
Кто-то еще делает чипы с объемом памяти, не кратным двум?
>все равно приличный DSP/ПЛИС не заменишь кортексом.
Эх, хотелось бы мне получить задачу, где их не заменишь. Пока пилю свои идеи, в синтезаторе надо было определять частоту главной гармоники сигнала, посоветовали автокорреляцию. Было там 4к сэмплов, сначала делал ее через БПФ, но особой точности не было. Потом помаленьку пришел к нахождению максимума на графике по количеству логарифма от размера выборки точек с увеличивающейся точностью, в начале из сигнала берется каждый 100 сэмпл, потом 64, потом 32 и до одного. Стало возможно использовать вычисление обычным методом за 1мс, быстрее, чем БПФ, и точнее. А хотел сделать на ПЛИС параллельное умножение сначала, но коммуникация между ней и процессором все плюсы съедала, потому что АЦП встроенный. Можно, конечно, сдетлать внешний АЦП и все расчеты в ПЛИС засунуть, но зачем, задержка и так не ощущается. Хотя я SIMD-инструкцию для умножения и сложения использовал, ARM их к DSP относит.
А в ST-link utility определяется? Может, в логах будет проблему видно. У меня на прошивке выше 27 не подключается плата, если подать на нее 5 вольт со встроенного источника, с внешним или 3.3 все работает. На 27 версии работает, но с 28 откатиться на более старые не получается.
>>338613
>А также комнатная температура и просто повезло.
Ну значит так и оставлю. Надо тест написать, может, ошибки проскакивают, но крайне редко.
>Хотя бы настройку периферии можно было через HAL или LL делать.
Про LL не слышал, только про stdperiph, но он у меня не захотел компилироваться. Я, когда начинал, скачал куб, настроил там все, посмотрел, какую он простыню накатал и решил, что он мне не нужен. Тащить его ради инициализации, которая по мануалу за полчаса делается? И как раз записал себе в то время встраиваемые системы в универе, а там все на регистрах было, для лучшего понимания, наверно, так что решил, что только регистры и никаких библиотек. Все равно мануал для понимания почитывать надо. Плюс с ним я бы и не узнал, что память без задержек может работать, надо еще частоту попробовать выше максимальной поднять для эксперимента.
>Ты вот не пользовался и как минимум одну ошибку сделал.
Не одну, я в прошлом треде синтезатор для баса делал, можешь почитать. И макрос для значения одного регистра в другом использовал, и выключенную периферию конфигурировал. Вкатился с нуля, надо было хоть что-нибудь почитать для начала, а не пытаться сразу писать совсем без понимания, как все работает.
>Вот это странно, что тебе есть дело до этого. На практике, за редкими исключениями, оптимизация имеет смысл только для снижения потребляемой мощности.
А для увеличения производительности? У меня сейчас в прерывании по таймеру ШИМ 32-канальный считается, и чем оно меньше времени занимает, тем выше можно сделать частоту. Я только в случаях, когда производительность затрагивается, это и делаю.
>Либо подобную оптимизацию используют для экономии пары копеек на микроконтроллере, но это уже обычно не про кортексы.
Кто-то еще делает чипы с объемом памяти, не кратным двум?
>все равно приличный DSP/ПЛИС не заменишь кортексом.
Эх, хотелось бы мне получить задачу, где их не заменишь. Пока пилю свои идеи, в синтезаторе надо было определять частоту главной гармоники сигнала, посоветовали автокорреляцию. Было там 4к сэмплов, сначала делал ее через БПФ, но особой точности не было. Потом помаленьку пришел к нахождению максимума на графике по количеству логарифма от размера выборки точек с увеличивающейся точностью, в начале из сигнала берется каждый 100 сэмпл, потом 64, потом 32 и до одного. Стало возможно использовать вычисление обычным методом за 1мс, быстрее, чем БПФ, и точнее. А хотел сделать на ПЛИС параллельное умножение сначала, но коммуникация между ней и процессором все плюсы съедала, потому что АЦП встроенный. Можно, конечно, сдетлать внешний АЦП и все расчеты в ПЛИС засунуть, но зачем, задержка и так не ощущается. Хотя я SIMD-инструкцию для умножения и сложения использовал, ARM их к DSP относит.
>Ну значит так и оставлю. Надо тест написать, может, ошибки проскакивают, но крайне редко.
То что производитель не гарантирует работу в этом режиме, тебя не беспокоит? Оно из-за этого в любой момент может перестать работать.
>У меня сейчас в прерывании по таймеру ШИМ 32-канальный считается, и чем оно меньше времени занимает, тем выше можно сделать частоту.
Не убедительно. Можно использовать пересылку ПДП в GPIO, это даст минимум на порядок большую частоту. Можно взять микросхему вроде TLC5947. Можно взять CPLD.
>Можно взять CPLD.
Тут я немного ошибся. CPLD такого объема дороже FPGA. 10M02 в самый раз будет.
>Под него линкер-скрипты, меморимапы и фьюзы-хуюзы руками на башоперле же писать?
На Яве, блеать: https://gnu-mcu-eclipse.github.io/templates/stm32f/
>Оно из-за этого в любой момент может перестать работать.
Пока проблем не было, надо тестировать. Может, работа на такой частоте в узком диапазоне условий доступна и про нее не написали. Я контроллер для игры делаю, он будет работать в помещениях с температурой от +15 до +30 градусов.
>Не убедительно.
Забыл сказать, что использую STM32F030 и делаю упор на цену. Готовое устройство будет около 400 баксов стоить(но 220 из них приходится на фейдеры с мотором), в нем 9 модулей, текущая комбинация с четырьмя 595 регистрами стоит $1.5 на LSCS, если они от ST, и $1.3, если взять подешевле.
>Можно использовать пересылку ПДП в GPIO, это даст минимум на порядок большую частоту.
Это время расчетов, регистры по SPI управляются. Есть массив из 32 байт со значениями скважности, из него считаются состояния выводов. Написано на ассемблере, одна итерация цикла 13 тактов занимает, быстрее пока не придумал.
>TLC5947
Нелохо, но цена великовата. Плюс таких 2 понадобится, можно взять TC62D723FNG, но она $1.8 стоит, уже $4.2 получается на модуль.
>10M02
$6, мне на ней всю логику надо будет писать. Слишком незначительная задача, чтобы тащить FPGA, светодиодами управлять да мотором, но для него ШИМ трехбитная и частота в 32 раза выше. Конечно, если бы это всего одна плата была, то можно делать, что хочешь, но цена и так слишком большая, поэтому надо экономить. Неограниченный по бюджету у меня экран на 0402 светодиодах на AS1130B, там и WL-CSP будет, и куча сенсоров.
>>338739
Мне Кейл своей простотой нравится и тем, что 150 мегабайт оперативки занимает, в 2 раза меньше дискорда и остальных поделий на электроне. После него эклипс слишком навороченный и тяжелый в плане интерфейса. Форматирования только не хватает.
>Там кроме BOOT0 есть BOOT1. Нужно убедиться что на BOOT1 подается 0, например резистором к земле притянут.
Спасибо, бро!
Всё получилось.
Согласен. Стартанул 103 на голом цмсис и почувствовал себя отцом, думаю ща и для 407 бойлерплэйт сварганю. Запутался в этой куче плл, зашёл в куб и за 3 минуты сделал инициализацию с помощью лл. Ебал я такой пердолинг за идею.
http://www.allitebooks.com/beginning-stm32/
На scanlibs.com ещё набери в поиске stm32 или arm.
Там реально дофига по армам всего.
Котаны, подскажите, что делаю не так.
Пытаюсь сделать задержку в "наносекундах" через DWT, но вместо результата получаю какую-то хуиту. На малых числах получаю неадекватно большие задержки, на больших получаю разницу раза в 2 (при том наоборот в меньшую сторону).
https://godbolt.org/z/AXRGxD
Видимо, я проебался где-то в своей функции, но что я сделал не так - понять не могу.
Со стандартного вида DWT-ms таймером всё работает нормально.
>Zalupa999(120010001000*5);
У тебя тут переполнение uint32_t. Дальше лень смотреть, может позже попробую.
Хмм, насчет переполнения справедливо, посчитал - оказывается тормознул.
Но оно и до переполнения работает мальца через жопу. Странно.
АНОНЫ Я когда то давно вкатывался в STM32, у меня даже был модуль, там вроде была F100 какая-то, но у нее уже EOL тогда наступал.
Мне тогда ARM не очень под задачи и умения был, и я остался на AVR сидеть, ща понял что сильно отстал от моды и надо наверстывать.
Какой ARM камень себе под макетку взять (не обязательно STM), что бы вот прям самый современенный и максимально несущий все новомодные фичи?
Я понимаю, что - мудак берешь параметрический поиск и выбираешь).
Но мб кто че конкретное посоветует.
Планирую с ним изучать из списка: CAN, Ethernet, встроенный USB, базовый радиопередатчик, RFID, WiFi, мб че еще предложите.
Задрался я сидеть на компорта и всяких ебучих RS-xxx.
Лол, наизейше, по взмаху руки менеджера.
На AVR вон взяли и ебанули пачку своих жтагов с выходом новой IDE.
Какую еще проприетарщину натворили мудаки один хуй знает, сейчас бы гнать месяц топовый камень, разхуярить плату и узнать, что для покупки жтага надо продать автомобиль которого нет.
У меня есть ST-Link и G-Link Segger(клон), если один из них берет ESP32 то возьму ее скорее всего.
Официальные доки и книжки Джозефа Ю.
А в чем отличие ESP32 и STM32? Так понимаю ESP32 китайское дерьмо в отличие от германского STM32.
Да всего лишь наличие в дерьме вайфая, блютуса и второго ядра проца.
Захуярьте загрузочную флешку из образа и Етчера
Положите в корень два файла: ssh и бла-бла
Тут я охуеваю и не могу зайти в файловую систему флешки!! Винда требует ее отформатировать!! Неужели придется ставить красноглазый Линух?!
>Спермопроблемы спермораба.
Ебанные красноглазые пидорасы!! Как же я вас ненавижу!! Всё не как у людей!!
Простейший коннект к малине превращается в хитровыебанные пасы с созданием файлов и бросанием их в корень через виртуалку с Убунтой. Нахуй! Просто нахуй эту ебучую поделку!!1
Во-первых, в DIY есть тред чисто по Малинам.
Во-вторых, я нихуя не понимаю, в чем твоя проблема, сириусли. У меня из под винды нормально всё запустилось без особых плясок. Win 8.1. Не помню, чтобы бегал к кому-то за линуксами хоть раз. Ну а после первоначальной установки у меня вообще всё прекрасно работает и коннектится. Ни разу с того момента не подключал к ней USB клаву.
В-третьих, я так и не понял, что означает твой пикрил. Это какой-то юмор?
>в DIY есть тред чисто по Малинам.
Ну охуеть! Зато страшно далекий от радачества тред про 3д-принторы висит на глагне
Жизнь - боль. Deal with it.
На каких языках пишут 3000кк/сек-погроммисты для Малинки?
Ты не забыл что там на твоей малинке крутится? Извинись.
4+ часа компилинга и ХУЯК!! Почему нельзя сделать установочный пакет откомпиленного этого говна, а не пердолить судками эту ардуину на стероидах?
в логи конфига не судьба было глянуть
Вкатываюсь по тихому в cmsis, потому что хал и прочие библиотеки для пидоров или хуже того, ардуинщиков, а так с авр много общего в принципе, ну разве что надо помнить про тактирование всего
Как реализовать это на примере асмр?
Ну короче, вопрос такой. На чем программировать stm32? Можно туда вхуярить жаву? Или есть менее больные методы?
stm32f103c8t6 blue pill
C/C++/Rust. 20kb RAM же. Было бы 40kb+, можно было бы запустить micropython или javascript через espruino, но это блажь и ересь.
А можно джаву? Я нагуглил Java ME и вот это https://www.youtube.com/watch?v=VOw069JyVks
Но гайдов, как поставить я не понял.
Но зачем это делать? Допустим поставишь, а дальше что? Как будешь взаимодействовать с периферией?
> Как будешь взаимодействовать с периферией?
Но ведь джаву делали для того, чтобы программировать чайники и холодильники. Должен быть по идее способ
Разумеется способ есть, вопрос только в том, сколько тебе для этого придется писать кода.
В качестве примера можно взять мигалку светодиодом. Для того чтобы включить или выключить светодиод, нужно записать в память определенное число по определенному адресу. Естественно что тебе придется этот адрес взять из документации, забить в константу, которую потом использовать в коде. Но до включения и выключения светодиода порт нужно настроить, для чего опять придется брать и вбивать из документации адреса, битовые маски и прочее. Но для Си это уже сделано. Сделаны в том числе несколько более высокоуровневые библиотеки. А для джавы тебе придется почти все это писать самостоятельно. Конечно, для какого-то микроконтроллера кто-то все это мог частично сделать, но что ты будешь делать, если потребуется использовать другой микроконтроллер?
Помимо этого код на джаве без JIT будет очень медленно работать. Ну и зачем джава нужна на микроконтроллерах?
Да это так, но зачем
Один вариант на CMSIS другой с использование HAL.
Херли такая большая разница?
Все просто.
CMSIS - меня ничего не ебет, я сказал туда (явный адрес регистра) запихнуть это дерьмо и оно будет запихнуто, даже если недопустимая комбинация или адрес.
HAL - вот тебе говно - название модуля и его настройки. Меня не ебет где и куда оно попадет - это ты сам решай, проверяй на корректность и недопустимость.
С ходу разница только в наличии проверок и соответственно куче говнокода проверки имени периферии и допустимости значений.
Что использую ровные пацаны при разработке устройств?
Получается недаром HAL называют калом.
Стоит ли вообще с ним связываться?
Мой ответ тут >>352800 . На пикрил обрати внимание.
Ждем независимые мнения. И да - мне похуй. Тяжелая периферия - кубик+HAL, все остальное - CMSIS и ебись ты HAL/LL конем.
PS Тебя скорее всего пнут под сральник в соседнюю нить >>339005 (OP)
В начале можно и на нем. Кому-то хватает, кто-то потом переходить на другое, а кто-то сам биты ставит в регистры.
Это не страшные заклинания, новичку они просто неведомы. Старое PORTC |= или PORTC &= из АВРок оче на это похоже, но пока всё разберешь...
Не знаю как сделано в этом вашем HAL, но в подобных библиотеках как правило используются ассерты. Ассерты это такие макросы, которые при несовпадении условия вызывают некую функцию, в кототрую передают номер строки с ошибкой, имя файла и прочее. Проверь, включены ли у тебя ассерты и если включены, то попробуй выключить.
Из коробки
/ ########################## Assert Selection ############################## /
/
@brief Uncomment the line below to expanse the "assert_param" macro in the
HAL drivers code
/
/#define USE_FULL_ASSERT 1U*/
Если определить USE_FULL_ASSERT памяти отожрет на пол шишечки больше.
Отрицать, что кубик великолепен могут только спецы в рунете, мол индусы говно написали не эффективно. Только кому кроме их самих их мнение интересно.
с другой стороны, работа с железом не предполагает обязательного использования регистров.
на уровне HAL я могу использовать, допустим, I2C на уровне функционального блока МК без записи и чтения регистров. HAL это сделает за меня.
вопрос не в могу/не могу сделать, а в том, что спускаться до битов и регистров для выполнения задачи вообще нахер не надо.
Так значит, если есть куб, то документацию читать не нужно? Ну, разве что на HAL документацию почитать, а на микроконтроллер нет смысла.
Какая разница? Ты бы еще спросил какой параграф, а то их там еще больше. Ну если про ST, то наверное datasheet, reference manual, errata. Без чего тут можно обойтись? Разве что только добавить ко всему этому "Description of STM32Fx HAL and LL drivers".
Ты по ходу вообще не понимаешь как устроена индустрия embedded development.
Будучи разработчиком встраиваемых систем ты постоянно будешь сталкиваться с документацией, на МК, на кодеки, на ОУ, да на все, блин, привыкай читать ее, привыкай читать ее очень внимательно, привыкай читать ее внимательнее всех остальных.
Это далеко не прогерство десктопного ПО. Тут недостаточно уметь тыкать пальцами по клавиатуре.
Если хочешь стать реальным инженером, то надо быть любознательным, очень. Это одно из самых главных качеств инженера и исследователя, ему все хочется понять, докопаться до сути.
Любознательный инженер все разбирает до винтика, так что он выберет CMSIS.
А если не хочется лезть под капот, то останешься обычным кустарем, который клепает всякое говно, используя чужие наработки, и не понимая как они работают.
Так это не я взял, это следует из утверждения о том, что касаться CMSIS и LL (SPL) не нужно.
Со всеми бывает
А тут, сравнение не корректное.
Тут как раз ты автослесарь, а не водитель, но каждый свой путь выбирает)
Ты водитель, если используешь HAL и автослесарь, если использует CMSIS
Но нет ничего страшного в комбинации этих умений.
С другой стороны, если нужно просто доехать из п. А в п. Б достаточно быть просто водителем.
Неправильные аналогии. Еще раз повторю: HAL отменяет чтение документации?
Допустим возьмем тупой код мигалки. Естественно, что для начала нужно настроить порты. Как ты будешь настраивать порт? Наверное заполнишь структуру GPIO_InitTypeDef и вызовешь HAL_GPIO_Init. Но что ты будешь писать в структуру? Абсолютно то же самое что и в регистр. А какие значения будешь туда писать? Вот тут придется открыть документацию. Так какая разница, в данном примере, что использовать? Поэтому невозможно нормально уметь в HAL и совсем не уметь при этом в CMSIS или LL.
Больно сложно.
Настрою периферию Кубом и буду HAL_Write_Pin менять состояние пина.
Зачем мне в этой задаче про регистры думать?
В 99% случаев это возможно, ну и есть конечно, особо изъёбистые случае, когда приходится спускаться до битов и регистров.
>Больно сложно.
Сложно настраивать GPIO через HAL? Всего то разницы между этим и кубом, что не натыкиваешь то же самое мышкой, а пишешь текст. Если это сложно, то как ты "задачи более высокого уровня" собрался решать?
>Настрою периферию Кубом
Ну возьмешь ты куб, что поменяется то? Не нужно будет читать документацию в части GPIO? Ты в кубе те же самые биты натыкиваешь, только мышкой. Разве только что куб тебе на явные ошибки укажет. А если документацию прочтешь, то какая разница как натыкивать эти биты?
Можно купить готовый модуль, например, MPU6050 в Китае за 40 руб и работать с ним спокойно. А можно ПП проектировать, микруху с обвязкой закупать, всё это собирать.
И тоже будет работать. Но зачем?
Вот всё тоже самое.
Нет, не понимаю. Какая разница, мышкой натыкаешь или с клавиатуры наберешь то же самое? Сэкономишь этим время, натыкивая в кубе? Явно нет. Меньше всего нужно будет изучать? Тоже нет.
Всё так
Гуру должен всё ручками и желательно на ассемблере. Иначе это не гуру, а банальный ардуиншик.
а тексты набирать используя vi
> А тем, кто серьезно занимается проектированием электроники ничего не надо объяснять.
Аргументов "за" у вас нет, вот и объяснить не можете. Остаётся только щёки надувать :-)
Какие аргументы за чтение документации, ты хотел написать? Ведь прочитав документацию, сразу поймешь как настраивать то же GPIO хоть через HAL_GPIO_Init, хоть через CMSIS. А не прочитав документацию, и в кубе неправильно натыкаешь.
Речь вовсе не про чтение документации идёт, а про использование CMSIS и HAL
этого никто не знаю. наслаждайся.
>Приведите пример необходимости
Ну, например на stm8s003, мне пришлось опуститься до регистров, дабы запихнуть прошивку в имеющийся объем флеша. С stdperiphlib-ой не удавалось
Нужен пример из мира 32 бит
Но выше речь была не о необходимости непосредственного использования регистров. И даже пример был с GPIO. Допустим откроешь в документации блок-схему какой-то части периферии микроконтроллера, а там указаны названия битовых полей, разрядности каких-нибудь предделителей и прочее. И вот тебе уже биты и регистры. А если брать LL или SPL, то это почти те же самые биты, только не раскиданы по регистрам, а собраны в сишные структуры, плюс чуточку логики и ассертов. Если скажешь про куб (а тред, кстати, не только про STM32 по идее), то в нем будут те же самые названия битов, т.е. даже используя куб, от этих битов ты все равно не до конца абстрагируешься.
Твой вопрос можно даже переформулировать иначе: зачем на STM32 опускаться до LL, если есть HAL.
Предположим, есть два диапазона памяти: 0x0-0xff и 0xff00-0xffff, т.е. два 256-байтных участка, расположенных на расстоянии почти 65кб друг от друга.
Если я хочу поместить исполняемый код в обе секции, то на выходе получится 65кб бинарник с кучей нулей от 0x100 до 0xff00. Разумеется, такое мне не надо.
Я могу руками удалить все эти нули и получить 512б бинарник, который при запуске копирует верхние 256 в нужный участок памяти копирует, до того, как код оттуда начнёт исполнятся.
Но это вообще нормально так делать? Есть ли какой-то способ сказать objcopy, чтобы он нули эти не делал, лишь выровнял данные по какому-то размеру (чтобы не друг за ругом на хрен знает каком байте меняясь секции шли)? Ну или как-то скомпилировать так, чтобы ко всем инструкциями в добавился некий отступ, о котором линкер не будет знать? Т.е. в линкере у меня будет .uppertext{upper.o(.text)} > 0x0100, но сами инструкции/джампы идут с другим адресом, +0xff00 типа.
Конкретно юзкейс у меня с xilinx zynq7010б в нём по-дефолту 256кБ on-chip memory раскиданы на 0x0-0x3fff и 0xffff000-0xffffffff, если не поставить флаг в регистре, что можно сделать, естественно, уже лишь после запуска. Цель использовать только OCM, бутлоадер который имеет важные вещи в верхних 64кБ, затем копирует нужное приложение из флеша в нижние 192кБ памяти и передаёт управление ему, а верхние 64кБ приложение как стек/кучу использует и остатки бутлоадера уже само затрёт / проигнорит. Просто всё в 64кБ запихнуть проблематично, да и их ROM загрузчик не хочет стартовать fsbl, если .text не в 0x0 в линкере почему-то.
То есть ты хочешь создать один бинарник, который загрузчик потом считает из флешки в две отдельные области памяти? И секции, само собой, у тебя раздельные? А как помещаешь код в uppertext? Указываешь для функций через __attribute__ по отдельности?
Если так, то этим делом по идее должен заниматься линкер, objcopy тут не при чем. В принципе что-то подобное делается во всех микроконтроллерах, в них копируется секция data из флешки. Если я ничего не путаю, то в ld это (дублирование содержимого сегментов) делается ключевым словом "AT>".
>То есть ты хочешь создать один бинарник, который загрузчик потом считает из флешки в две отдельные области памяти?
Ну типа того, да, только это получается, что он как бы часть самого себя перенесёт в другую область.
>И секции, само собой, у тебя раздельные? А как помещаешь код в uppertext?
Не, в линкер скрипте:
>.sect {
> myobject.o (.text .data ...)
>} > RAM_HIGH
>.text {
> ✴︎(.text)
>} > RAM_LOW
И весь код (data, bss и прочее, если указать) из myobject.c попадёт в эту секцию. Ну, планируется так сделать, может некоторые отдельные функции всё же через атрибуты будут, если удобнее код организовать.
>делается ключевым словом "AT>".
А, блин, точно! Прям то, что надо, спасибо!
>линкер, objcopy тут не при чем
Ну я не совсем уверен был, кто именно распределяет, как данные в .bin лежат, вносит ли objcopy свой вклад (.elf-то не увеличивается в размерах)
Нельзя. Я запрещаю.
>зачем
Если ты делаешь устройство, по габаритам должное влезть в условный подрозеточник, при этом, кроме МК и его питания нужно ещё что-то релюхи там, блютуз-модуль и т.д., голый контроллер и фуллкастом плата единственное решение.
а если нет ограничений по габаритам, массе и нет в конечном итоге разницы - сам ли разведёшь плату под микруху с обвязкой или используешь готовый модуль?
Помимо этого "а если", есть еще достаточно причин.
1) Как будешь соединять эти модули? Хорошо, если все эти отладочные платы рассчитаны одна под другую, но часто это не так.
2) Требуемый модуль не существует вообще.
3) Электромагнитная совместимость.
Короче такой же тупняк как и про регистры, только еще глупее. Я еще не спрашиваю, что там можно "работать" с акселерометром.
Сап, на связи 32 лвл инженер-эмбеддер с мухосранска-миллионика(пишу прошивки + иногда развожу печатные платы в нии). Пару месяцев назад создавал тред в воркаче, где рассуждал, какое это блять дно быть в россии инженегром в 32 за зарплату 40к. И блеать, сегодня на работе одна тян из отдела увольняется, 26 лет, отработала год, до этого еще 3 года на каком-то уралбыдломаше. Сказала, что это все дно и пиздец и она будет учить кодинг. Кун ее тоже инженер(конструктор), тоже сидит после работы зубрит питон. Начала приводить примеры своих знакомых, отучившихся на инженеров, бросивших через две недели, и работающих в ДС программистами за 180к. У меня опять весь день параноидальные мысли о том, что я занимаюсь какой-то хуйней за гроши.
Как блять жить сука если ты инженер и не поехать от осознания своей донности и того что уже поздно и ты застрял в этом дерьме навсегда? Как думаете, возможно ли перекатиться из байтоёбства эмбеддед в айти?
Думаю что такое нужно писать в каком-то более подходящем треде. Или вообще создавать новый.
>сидит после работы
Это странно, что после работы. Неужели не дают прямо на работе? Мне начальство такое вполне позволяет, когда ничего особо срочного нет.
>Где можно найти годных туториалов для введения в микроконтроллеры
Если в ангельский можешь, то все курсы Джона Валвано Embedded Systems - Shape The World на edX. Там, правда, не только и не столько микроконтроллеры, сколько разработка встроенных систем. Перед тем, как записываться, Си рекомендую как следует задрочить. На том же edX есть чумовая серия курсов по классическому Си.
> Как думаете, возможно ли перекатиться из байтоёбства эмбеддед в айти?
Да.
Кодить уже умеешь, выбери область разработки и хуярь туториалы, читай книги и смотри видосы. Часов 8-12 практики в неделю (пара вечеров и пол выходного), и через полгода-год можно ходить по собоседованиям.
Друг 37лвл пару месяцев назад вышел на первую ойти работу стажером, на прошлой неделе стал джуном, веб-фронтенд зп $400 в укродс2. Я его полтора года наставлял (успел отговорить учить плюсы и подсунул джыэс), раз в месяц-два он рассказывал об успехах, я давал советы. Ходил на бесплатные курсы от какого-то аутсорсера. Через год мидлом станет, будет $1500+ получать. Из образования - бухгалтерская шарага и технический вуз на неайтишной специальности. И 17 лет опыта работы официантом/барменом/мясником лол.
Мимотимлид не могу найти толкового джанго-питониста в Москве за 150-180тр, все хотят от 200
Анон, ты бы рассказал, с каких позиций стартуешь и чего в конечном итоге достичь хочешь? Я тебе Валвано посоветовал, но он довольно продвинутый - если ты нуб, то тебе может не подойти.
Знание языка: околонулевой С/С++. Сейчас стараюсь нагонять пропущенное. Считаю себя полнейшим нубом.
Опыт работы с микроконтроллерами: копипаст кода в ардуино. Но понять и исправить необходимые вещи способен.
Чего хочет мой начальник хочу достичь я: понимание принципов работы микроконтроллеров, знание различных интерфейсов передачи данных(UART, SPI, I2C и прочие), таймеры, обработчики прерываний, memory mapping.
Предприятие разрабатывает системы навигации, поэтому эти микроконтроллеры будут считывать входящее положение, а потом в дело вступает "сложная" математика, необходимая для вычислений.
inb4: специально попросился в программерский отдел, чтобы меня хоть чему-нибудь научили, но сам тяготею к железу. Поэтому буду рад абсолютной любой помощи, потому что даже репетитора хуй найдёшь в ДС
Не знаю что за курсы советовал анон выше, но мне кажется они про то как "правильно писать код", а не про то что такое микроконтроллеры.
>UART, SPI, I2C
Ну даже не знаю. Для понимания таких простых интерфейсов достаточно временной диаграммы с небольшим описанием того что происходит.
>memory mapping
Применительно к микроконтроллерам это же просто табличка, в которой указано по каким адресам что располагается. Такое можно не понять, только если не понимаешь что такое адрес.
Я бы посоветовал почитать что-нибудь общеобразовательное для студентов о том что такое процессор вообще, какие они бывают и зачем нужны.
>Знание языка: околонулевой С/С++. Сейчас стараюсь нагонять пропущенное. Считаю себя полнейшим нубом.
>Опыт работы с микроконтроллерами: копипаст кода в ардуино
А, ну тогда тебе лучше поардуинить немношк. Книжка Джереми Блума в помощь. Если можешь в ангельский, то поищи в ютубе канал Paul McWhorter - там дядька неторопливо рассказывает про ардуину и не только.
Наиграешься - запишись на edx на курсы по классическому Си нужно будет как Отче наш задрочить указатели и структуры, а после - на курсы к Джону Валвано, которые я тебе выше посоветовал. Там уже будут и интерфейсы, и таймеры с прерываниями, и всё остальное. Только там ARM, а не AVR.
>>385355
>Не знаю что за курсы советовал анон выше, но мне кажется они про то как "правильно писать код"
Нет, анон, ты не угадал.
>а не про то что такое микроконтроллеры.
Таки про них. Проект/задача курса - разработать портативную игровую приставку на Cortex-M4 без нихуя: без библиотек, шаблонов... А дальше начинается хардкор: чтение мануалов, таймеры, прерывания, конечные автоматы, интерфейсы и т.д. и т.п.
А что там задрачивать? Я понимаю задрачивать ++ их можно всю жизнь задрачивать.
А в СИ то чего?
СИ на 33% состоит из знания синтаксиса
На 33% из понимания работы железа
На 33% из понимания или хотя бы предположений, что тебе высрет компилятор.
1% это всякие изъебства, которые не очень обязательны.
СИ очень простой язык, но на нем надо писать, это пожалуй единственное условие, садишься и пишешь, не от пизды, а думая как лучше, как правильнее, как не замакаронить, что у тебя сделает компилятор.
Ты можешь идеально выдрочить все эти книжки, а потом споткнуться и разбить ебало об нарушение атомарности, там где ты не ожидал. И от этого тебя книжки не спасут, опыт, опыт и опыт.
В то же время незнания некой фишки синтаксиса лечится за 5-10 минут гуглением.
Все базовые алгоритмы давно сделаны за тебя.
И это неговоря про то, что что бы научится правильному использованию, нужно понимать нахуя это в боевой обстановке требуется, а не в книжных примерах и олимпиадных задачках.
Так что нечего там учить. Садишься и бьешься бошкой об клавиатуру пока не заработает.
Я в общем полностью не понимаю, смысл изучения основ языка по книжкам, один хуй основа выучивается сама по себе из пары статей, а все хитрые штуки ты позабудешь нахер без практики.
Другое дело читать про архитектуру и организацию процесса, но для правильного понимания, нужен опыт и не малый.
>А что там задрачивать?
Указатели и динамическое выделение памяти - не самые простые для начинающих темы, не все сходу въезжают. Что до структур, то сами по себе они несложные. Но когда дело доходит до приложения этой ботвы к реальным задачам типа описания состояния конечного автомата, то у ардуино-анона тоже могут возникнуть затруднения.
>а все хитрые штуки ты позабудешь нахер без практики
Именно поэтому анону и предлагается записаться на курс по разработке встроенных систем, а не по тупо программированию. Попытается создать железку, закрепит навык.
>Буду развиваться в нужном направлении.
Поменьше серьёзности! ;) Придумывай себе какие-нибудь придурочно-дикие задачки типа "сделать умный светильник, который будет реагировать на мяуканье кошки" или "допилить стиралку так, чтобы по окончании стирки она включала чайник" и пытайся их реализовать. При всей несерьёзности, науки придётся поесть по полной программе - там и аналоговые фронтенды, и основы обработки сигналов в случае с кошко-светильником и т.д. Hardware hacking ещё хорошая вещь для нуба - берёшь что-то готовое, разбираешь, анализируешь, допиливаешь/модифицируешь.
>Вопрос: стоит ли ставить линукс, чтобы писать код там без всяких вижуал студий и прочих готовых приблуд для понятия особенностей компиляции или можно забить и прогать в VS/Keil?
А что тебе мешает под виндой тем же gcc из командной строки компилировать, если так уж хочется хардкора?
С ужасом обнаружыл, что CMSIS вычисляет косинусо-тангенсы по таблицам.
Он, наверное, думал, что там вычисляется сумма ряда.
Воу, даже не думал, что дурацкие задачи настолько полезны!
Возьмешь и подключишь либу.
>IAR/GCC
В чём разница, кроме того, что IAR - платный?
IAR это для надёжных систем в промышленности и медицине, заточеный под MISRA C, а GCC - это для бытовой и не требовательной автоматизации?
У IAR более компактный и быстрый код, в МНОГИХ случаях, по сравнению с другими компиляторами.
Все.
Для АРМ-а? Ты бредишь
здесь такая же ситуация как с виндой и опен соурсами
все опен соурс продукты поставляются с лицензией "without any warranty", а винда с гарантией, но на деле никто до сих пор не отсудил у майкрософта норм деньги за их проебы
я хз как в иаре, но я часто работаю с асм кодом от gcc -S, да там есть немного мусора в коде, не всегда логичное использование регистров, но в целом не к чему доебаться
писал в треде про stm32, что после долгого поиска норм иде, решил использовать текстовый эдитор, а компилить и заливать из под консоли, оч удобно
ну и да, сижу под линой
>"сделать умный светильник, который будет реагировать на мяуканье кошки"
Це дуже сложно. Нужен мощный процессор, не слабее малинки, для распознавания голоса.
>допилить стиралку так, чтобы по окончании стирки она включала чайник
ATiny10 или PIC10 + реле.
>"сделать умный светильник, который будет реагировать на мяуканье кошки"
>Це дуже сложно. Нужен мощный процессор, не слабее малинки, для распознавания голоса.
А зачем тебе интеллектуалочку заведомо слабым микроконтроллером делать? Собрал аналоговый фронтенд, чтобы можно было минимально причесать сигнал/данные, причесал, оцифровал, запихал в канплюхтер, а уже дальше канплюхтером и сложный ЦОС, и ИИ, и что хочешь делай.
В IAR легче следовать MISRA C, так как стандарт писался именно под IAR и компилятор IAR его поддерживает.
Анон, поясни за teensy 4.0 .
Я шо, смогу на 600мгц ногами дрыгать?
Алсо, как ее купить баксов хотяб за 30 с доставкой? На али 3к, на амазоне pjrc в рашу не отправляет.
Открыл ради тебя документацию. И если я правильно понял, то GPIO тактируется от IPG_CLK_ROOT, максимальная частота которого 150 МГц.
Так что в полной мере не сможешь дрыгать GPIO на 600 МГц.
Но выглядит так будто команда gdb load прошивает только код, не закидывая во флеш контроллера дебажные символы. Это так или мне показалось?
Даже не знаю как нагуглить это.
Хочу дисплей дюйма 4, но не хочу отдавать 1000 на алиэкспрессе за него.
>условно-бесплатные дисплеи из планшетов и смартфонов с дешёвыми stm32 MCU?
Используй, кто тебе запретит? Ищи даташиты, пиши либы для драйвига этой хуяты. Только у дохуя телефонов и планшетов интерфейс MIPI, который дешевые стм-ки хуй вытянут
Дебажные символы использует дебаггер, для какой цели оно на МК?
В какой секции и каком сегменте в эльфе они находтся, какие у них аттрибуты смотрел?
>В какой секции и каком сегменте в эльфе они находтся, какие у них аттрибуты смотрел?
Слишком сложно для вкатыша.
Компилирую в elf, это да, а вот куда внутри него смотреть я ещё не запомнил.
Попробовал релизную и без дебажных сделать - загружается в контроллер такое же количество байтов, значит, оно само отрезается?
> Дебажные символы использует дебаггер
я как раз через openocd на него хожу пошагово дебажу, с ними удобнее. Но волнуюсь что оно прямо во флешку контроллера пишется.
Дебажные символы нужны дебаггеру для того, чтоб можно было сопоставить адрес переменной и её название в коде и аналогично с функциями. Контроллеру названия переменных до балды. Оно не заливается туда.
>Оно не заливается туда.
Спасибо!
Я просто про этот swd и как оно работает с железом мало знаю
swd это спецификация на интерфейс для отладки. Он не имеет отношения к эльфу и дебаг-символам. Так же как USB не имеет отношения к данным, которые за копируешь на флешку или жёсткий диск или ещё что.
Сильно упрощённо, дебажная информация - это вот что-то вроде такого:
адрес 124 - переменная i, 126 - j, по адресу 5122 функция main, 5230 - led_on.
у процессора есть регистры, регистры где лежат данные и регистр, который указывает на текущую инструкцию. И есть спец. регистры, которые говорят "стоять, блять".
вот дебаггер командает "стоять, блять", шарится по регистрам, смотрит, что в регистре инструкций лежит адрес функции мэйн, а в регистре данных адреса переменных ай и джей.
твоя идея получает эту инфу, выделяет нужную строчку и ты видишь значения переменных, котрые читаются через адреса в коде.
Я капитально сосу в изучении микроконтроллеров, поэтому подскажите, где можно найти репетитора по микроконтроллерам в ДС. inb4 искал на профи.ру, 5 челиков всего.
Памагите, пожалуйста.
>Я капитально сосу в изучении микроконтроллеров
Ничего, весна близко уже. Надо годичный перерыв в изучении сделать. Не надо себя так насиловать
Проблема в том, что ты лезешь в СЭМы которые конечно крутые и простые, но предположу, что по ним очень мало инфы для новичка.
Изучи сначала AVR, потом STM32 и после этого уже в СЭМ.
Причем начни с ассемблеров.
>СЭМ
На сколько он сложнее stm32. Есть гайд для ассемблера stm32, а лучше для ESP32. Может кто знает.
Я думаю что он лучше и понятнее STM32, потому что лучше и понятнее STM вообще все.
Плюс сэм имеет охуевшую IDE. Я сам не работал, но вот все хочу попробовать.
Сужу по тому, что у атмеля не плоха документация и примеры.
Но гайдов по STM невообразимо больше. А когда ты только вкатываешься - гайды важнее всего, после того как изучишь 2-3 ядра по гайдам, сможешь сам любые с ходу изучать.
ESP32 закрытая платформа.
Принципиально юзаю командную строку и опенсорсные тулзы. (Не поехавший, удобно для CI и воспроизводимости.) Но судьба заставила обратиться к вам, люди добрые!
Нигде не могу найти Linker Script для Blue Pill (который на STM32F103C8T6). Собственно, это не была бы большая проблема, если бы мне не нужны были новомодные секции для MPU (которые содержат .privileged_functions и __syscalls_flash_start__) чтобы прикрутить это к FreeRTOS. Можно написать руками но ошибиться и потом потратить кучу времени впустую боюсь.
Если кому-то не трудно сгенерируйте пожалуйста .ld файл с ними?
С меня как обычно
Правильно ли я понимаю, что сначала надо отладить функции, допустим, для ногодрыга, а уже потом прикручивать rtos?
Или надо сначала завести rtos, а уже потом ебаться с периферией?
Раньше дел не имел с ней, а тут понадобилось.
Когда писал мигалку - поступал проще.
Писал говнокод перед запуском планировщика и смотрел как он работает, потом запихивал в задачу и смотрел как поменяется работа. Так грубо писал, внимательно следя что бы не было пересечений с тем что уже используется в созданных задачах.
Какого хуя Малинка первой/второй версии нихуя не распродается по бросовой цене? Почему не работает рыночек?
А почему он должен работать?
Рыночек работает, но не так, как ты понимаешь-хочешь.
Сука, под ёбаный камень нет поддержки i2c у Micrium OS.
Блядь, похуй. Попробую обойтись как-нибудь.
На авито платки A/B (не путай с A+/B+/Zero) в моём мухосранске по пятсот рублей вместе с корпусом отдают. Работает рыночек.
Подмывает купить Jetson Nano и заебенить из нее дверной звонок с ИИ и нескучными мелодиями. Отговорите меня штоле
А B+?
Твоему ИИ подсунут фотографию и он обосрётся.
Апноут на таймер: https://www.silabs.com/documents/public/application-notes/AN0014.pdf
Правда, не увидел там ничего по делу.
Формула для расчёта: The overflow rate is fHFPERCLK / (TIMER_TOP x 2^TIMER_CTRL_PRESC).
Таймер 16-ти битный. Тактируется от HFPERCLK, равного 72 МГц. Делитель таймера пока выставлен равным 8.
Надо высчитать TIMER_TOP.
Overflow rate это частота переполнений?
Т.е. будет равняться 1000 / 100 -> 10.
Тогда формула примет вид: 10 = fHFPERCLK / (TIMER_TOP x 2^TIMER_CTRL_PRESC)?
Безнадёжно бамп. :-(
Давай я тебя запутаю.
1. Каждые 100мс, т.е. с частотой 10 Гц
2. Переполняться должен 10 раз в сек., то есть:
10 = 72000000/TIMER_TOP x 2^8 ->
TIMER_TOP = 72000000/2^8 x 10 = 28125
НО! Если рассуждать логически, то это бред какой-то.
Частота на счетчике = 72/8 = 9Мгц
До 28125 он досчитает за 0,003125с, т.е. чуть дольше 3мс
Сдается мне, что ты не ту формулу употребляешь. Полез я в реф-мануал по этому диковинному контроллеру и не нашел там ничего подобного. Как и в остальных, генерируется прерывание при достижении счетчиком числа равного TIMER_TOP и сброс его в 0 при обычном счете вверх.
Т.е ставь делитель 144, TIMER_TOP на 50000 и каждые 0,1с у тебя будет прерывание
Да, смешно.
Я не вкурил как работает таймер, надо объяснить. Знал бы - не спрашивал.
Как это считается?
>Как это считается?
Делишь 72МГц на 256 и получаешь частоту на счетчике - 281250Гц. Тебе нужно чтобы прерывалось с частотой 10Гц, значит ставишь TIMER_TOP (т.е. до какой цифры будет досчитывать счетчик и сбрасываться в 0) равным 28125. Итак счетчик будет досчитывать до 28125 и сбрасываться в ноль десять раз за секунду. И генерировать нужное тебе прерывание если включил в настройках
ПыСы. Таймер 16-битный, значит считает до 65535. Делителем выбираешь на сколько поделись системную частоту, чтобы потом уложиться в эту цифру.
Нет, что-то не вяжется.
Посмотрел примеры кода в сети: допустим, частота от которой тактируется таймер равна 1 МГц, собственный делитель таймера равняется 1, в TIMER_TOP занесено 1000 и говорится, что прерывание по переполнению будет происходить каждые 1 миллисекунду, т.е. тысячу раз в секунду.
По конченой формуле мы получаем (1x10^6)/(1000x(2^1)) = 500 переполнений.
Хрень какая-то.
Ещё пример: допустим, частота от которой тактируется таймер равна 14 МГц, собственный делитель таймера равняется 1024, в TIMER_TOP занесено 27342 и говорится, что прерывание по переполнению будет происходить каждые 2 секунды.
// 13671 Hz -> 14Mhz (clock frequency) / 1024 (prescaler). Setting TOP to 27342 results in an overflow each 2 seconds
Ваши мылси, господа? Заебался я в край.
https://pastebin.com/PNxJRrir
>>408122
Да с примером всё так.
Не пойму, как подогнать таймер под мои нужды.
https://pastebin.com/vEHenjaD
Извиняюсь, там версия для регистрового доступа. По ссылке выше - через обёртку.
.prescale = timerPrescale1,
>// Use /1 prescaler...timer clock = HF clock = 1 MHz
Слушай, я уже нихуя не пойму в твоем таймере. Тут пытаются сказать, что timerPrescale1 = 2^0
>Не пойму, как подогнать таймер под мои нужды.
Ну ты хоть как-то пробовал или пока только радач заебываешь?
>сижу в тематическом треде
>7 постов
Ух, как я всех заебал уже.
Конечно пробую. Чую, что придётся пиздовать на форум силабса, а там чсв-пидорасы кругом.
> Почему в STM32F4 такие мозголомные примеры в Кубе? Почему интернет заполонен какими-то ебанутыми, несовместимыми со здравым рассудком примерами? В одних HAL, в других SPL, третьи вообще говняют свои конструкции и хуярят байты налево и направо? Почему нет нормальных файлов справки и хоть какого-то единства? Как же мне печот-то, передать не могу.
Так надо брать нормальную RTOS где все это говно скрыто нахуй за драйверами HAL.
Нагуглил вот такую прогу: https://libstock.mikroe.com/projects/view/398/timer-calculator
И начал перебирать похожие МК.
Результат на пикчах.
Как проверял: по прерыванию таймера происходит ногодрыг пина.
Оказывается, силабс основали бывшие огрызки из микрочипа со своими пиками. Вот тебе и сходство.
Всем спасибо. Кота вам за помощь.
28125 тогда дало бы прерывание каждые 50мс по идее.
По осциллографу видно, что логические уровни меняются каждые 100мс по прерыванию.
У тебя прерывание по фронту/спаду или по обеим граням импульса ебашит?
Значит условие нужно было ставить - как настроить таймер, чтобы переполнялся за 200мс
>rising и fallling edge
>>408200
>по обеим граням импульса
Сука блять нахуй, почитайте же уже наконец-то https://ru.wikipedia.org/wiki/Фронт_сигнала и выучите базовые термины в конце-то концов нахуй.
>и выучите базовые термины в конце-то концов нахуй.
NYET! Специально не выучу, чтобы такие как ты воспламенялись в треде
opy
А нахуя тебя F4 без RTOS?
Есть 32-ух битный WTIMER, который тактируется от 72 МГц и имеет делитель 1024.
Надо настроить на задержку от 5 мс до нескольких секунд.
Делитель задан жёстко и может быть от 2^0 (1) до 2^10 (1024).
Таймер тикает 72000000 / 1024 = 70312.5 раз в секунду.
И способен считать: 2^32 / (72000000 / 1024) => примерно до 61 секунды.
"Up-count — counts up until it reaches the value in TIMERn_TOP, then it is reset to 0 before counting up again (if in continuous
counting). When the counter goes from TIMERn_TOP to 0, an overflow event occurs."
До 900+ мс таймер работает как надо.
TIMER_TOP = ((fHFPERCLK / TIMER_CTRL_PRESC) x (N / 1000.0)) - 1
А вот формула для секунд уже даёт сбои и таймер начинает гнать.
TIMER_TOP = ((fHFPERCLK / TIMER_CTRL_PRESC) x N) - 1
Неправильная формула?
П.С. fHFPERCLK - частота, от которой тактируется таймер; TIMER_CTRL_PRESC - делитель таймера; N - задержка, в мс.
>TIMER_TOP = ((fHFPERCLK / TIMER_CTRL_PRESC) x N) - 1
Возможно, тут задержка в целых секундах, не милли.
>TIMER_TOP = ((fHFPERCLK / TIMER_CTRL_PRESC) x (N / 1000.0)) - 1
Здесь ты написал 1000.0, поэтому компилятор все будет считать во float, а потом округлит до целого
>TIMER_TOP = ((fHFPERCLK / TIMER_CTRL_PRESC) x N) - 1
Здесь ты считаешь в целых числах, причем, навскидку, максимально неточным образом. Делить в целых нужно всегда в последнюю очередь, тогда будет максимум точности.
TIMER_TOP = (fHFPERCLK x N / TIMER_CTRL_PRESC) - 1
Либо
TIMER_TOP = (fHFPERCLK x N / (float)TIMER_CTRL_PRESC) - 1
Либо
TIMER_TOP = ((fHFPERCLK / TIMER_CTRL_PRESC) x (N / 1.0)) - 1
>>422353
Ситуация такая: мне нужна частота ядра 72МГц. Максимальный делитель 1024 и он не меняется в большую сторону.
Какого-то хера даже 32-ух битный таймер записывает в регистр TIMER_TOP 0xFFFF (65535).
По формуле для секунд, даже для одной секунды выходит TIMER_TOP равным 70311.5.
Поэтому таймер фейлится.
Возможно, надо дополнительно поделить на число. Но тогда явно получается какая-то херня, не связанная ни с миллиснеундами, ни с секундами.
Сейчас смотрю в сторону RTC. Пробую запустить.
Поддержка шлёт на хуй: мол изучайте сами, у нас всё норм.
Есть массив static uint32_t test_arr[] = {X1, Y1, X2, Y2, X3, Y3,...,Xn, Yn}; , содержащий всегда чётное кол-во элементов.
Если произошло Событие1, то надо передать X1; по Событию2 надо передать Y1.
И так далее: Х2, У2,..., Хn, Yn
Какой из режимов позволяет это провернуть из одного массива?
Забил, короче, сделал на указателях.
>Или ставится Visual Studio 2017, потом на торренте покупается VisualGDB. Устанавливается тоже далее, далее, ок. После запускаешь плагин в ВС, один раз проходишь процедуру настройки качая OpenOCD, тулчейн и пак с мк для работы с стм32.
Включить debug - выключить debug.
>>Что взять БЕЗ ГРЁБАНОГО ДОПИЛИВАНИЯ
TrueStudio. Он ничем не отличается в этом плане от кейл, установил exe-шник и сразу работает искаробки.
Нафиг тебе с++? На малинке можно и на питоне писать.
>Тогда точно н
Хуй там! Даже stm32f030хх будет иметь 100500 ядер CUDA и нервосетки можно будет обучать
Кто-нибудь может объяснить, как разобраться с поиском проблем в eclipse-подобных IDE?
Сука, при дебаге код просто виснет и не пишется, что именно отвалилось.
Ничего криминального в код я не добавлял.
Не лучше ли в такой ситуации посмотреть что выдает gcc -S ?
Очевидно же - пользоваться инструментами разработки (Keil) непосредственно от компании разработчика микроконтроллера (ARM), а не жрать кривое опенсорснутое говно.
Компилятор кейла радостно сжирал у меня неправильный код логика правильная, но написано мимо стандартов C и выдавал бинарь, оный код выполняющий. GCC такое говно не сожрал и намекнул, что стандарты языка надо уважать. Вот теперь сижу и думаю, если кейл забивает на стандарты языка в одном случае, то он вполне может забивать на что-то ещё. Вкупе с закрытостью кода доверие это не вызывает
Настройки компилятора бывают разные, в кейле или в iar'е вроде есть проверка на соответствие misra c, толькот надо её включить.
А вот нахуй оно всё надо, если есть GCC, с которым можно работать хоть через eclipse, хоть через vs code, да хоть через code blocks, все из которых как IDE явно лучше кейла
ну и не надо целую винду ради этого говна держать
>ну и не надо целую винду ради этого говна держать
На самом деле armclang есть и под линукс, только хейтер опенсурса об этом наверняка не знает. Он наверняка даже не подозревает что некоторое время назад в кейле перешли с armcc (который на gcc) на armclang (который на ллвм со шлангом).
>На самом деле armclang есть и под линукс
Юзаю шланг который из коробке в дебиане, в нём тупо встроены все платформы сразу, надо только правильный target указать
Только armclang это не clang. Это шланг из которого выкинули шлангово-гцц-шные расширения, переделали вывод сообщений об ошибках к виду который был в armcc и так далее. И вроде как добавили каких-то своих оптимизаций, может быть даже ллвм-ный бэкэнд полностью свой сделали, а может и нет.
>мимо стандартов C
Да кому нужны эти стандарты.
Главное результат.
Кейл, после IARа, генерирует самый оптимизированный код по скорости/по количеству кода(на выбор).
В то время, как полностью соответствующий стандартам Eclipse GCC генерирует тормозное лагающее говно, отжирающее память.
> Вот теперь сижу и думаю, если кейл забивает на стандарты языка в одном случае, то он вполне может забивать на что-то ещё.
Опять таки, главное не код, а результат его работы. Если ты проверил, протестировал, что твое устройство выполняет нужные функции надежно - какая разница, написан он на С полностью соответсвующем стандартом, или слега отходящем от стандарта. Хотя насколько я понимаю keil соответсвует стандарту С89.
>Eclipse GCC
Зачем приплетаешь эклипс? GCC самодостаточен и текстовый редактор, в котором написан код, не влияет на выхлоп компилятора. Зато может быть стоит указать с какой стандартной библиотекой Си оно используется, glibc там или newlib или еще что.
>Кейл
То же самое. В кейле используются компиляторы armcc и armclang, которые раньше может быть и не давали без кейла, но теперь дают. Также эти же компиляторы есть в среде ARM DS-5, которая тоже вся "от производителя", как ты любишь.
>генерирует тормозное лагающее говно, отжирающее память.
Можешь подтвердить свои слова? И желательно не на абстрактном примере, в котором допустим сравнивается какая-нибудь векторизированая хрень, а на куске твоего собственного кода.
>Можешь подтвердить свои слова?
Сравнение компиляторов для разработки на микроконтроллерах с ядром ARM Cortex-M
https://habr.com/ru/post/368779/
>генерирует тормозное лагающее говно
А вот на таком простеньком примере, кейл (причем и armcc и armclang) слил старенькому gcc из стабильного дебьяна. При -O3 разница по времени выполнения была около 20%. Причем gcc даже при -O2 немного опережал кейл с -O3 и -Ofast.
>проверил, протестировал
Вот как раз в ходе этого процесса хочется, чтобы компилятор идеально соблюдал все стандарты. Тулчейн должен быть таким, на который можно однозначно положиться, иначе могут возникнуть практически неуловимые баги. Вот за примером далеко ходить не буду, пусть он не про компилятор, но про тулчейн практически. Есть у меня один проект, там есть ESP32, код к которому пишется в Arduino IDE(не мой выбор, но мне лень оттуда слезать) с использованием тулчейна/библиотек от ESP. Так вот, возник у меня баг, при котором прочитанный из EEPROM SSID никак не находился, вывожу в консоль - всё вроде должно быть ок, да и рядом лежащий телефон спокойно подключён к нужному роутеру. И после долгих мучений я выяснил, что функция чтения строки из фирменной, мать её, библиотеки просто добавляла пробел в конец прочитанной строки. Круто, да? И в терминале этот пробел хрен увидишь. Вот потому тулчейн должен быть таким, чтобы единственными потенциально проблемными местами были твой код и железяка. И GCC в этом плане меня никогда не подводил
>Светлая тема в IDE
Фубля, аж глаза резануло, как жить-то так можно?
кейл ваш, кстати, туда же
>аж глаза резануло, как жить-то так можно?
Ну ладно, ладно, мамкин кулхацкер. Сиди с темной темой, кто же тебе запретит? А я охуеваю когда светлую в Автогаде вижу. Хочется сидящего за монитором еблетом об стол побить.
устарело давно, компиляторы сейчас очень быстро развиваются. По крайней мере, те что LLVM-based
А причём тут кулхацкер-то? На тёмной банально лучше синтаксис видно. Да и, будем честны, светлые темы везде как говно выглядят. В том числе и в пресловутом автокаде
Спрошу тут.
Никто не натыкался на реализацию авто-настройщика ПИД регулятора для ARM микроконтроллеров?
Алсо, может кто-нибудь поделиться методой настройки коэффициентов ПИД регулятора?
Нашёл пару статей, но ебли будет огого.
метод циглера-никольса
Какие есть нормальные книги (на русском!) по STM32 и ARM в целом?
Есть перевод "Ядро Cortex-M3 компании ARM. Полное руководство". Однако "ARM в целом" это очень много разных ядер, а STM32 это тоже много разных серий микроконтроллеров с отличающейся периферией. Может стоит определиться конкретнее?
Но что ты вообще хочешь получить от книги? Такие книги не могут заменить документацию, они будут лишь дополнением, в котором разжевывают некоторые нюансы.
А также, чем существенным отличаются ARM микроконтроллеры от любых других с точки зрения практического применения? Если не писать самостоятельно операционные системы и не лезть в ассемблер, то какая разница?
>Есть перевод "Ядро Cortex-M3 компании ARM. Полное руководство".
Спасибо, уже скачал.
>Такие книги не могут заменить документацию, они будут лишь дополнением, в котором разжевывают некоторые нюансы.
Да, именно это мне и нужно.
>А также, чем существенным отличаются ARM микроконтроллеры от любых других с точки зрения практического применения?
Конечно я согласен, что если писать на Си/С++ то разницы нет никакой. Но дело в том, что в вакансиях в графе "требования" пишут что-то вроде "опыт работы, знание устройства и особенностей архитектур 8051, AVR, ARM ...".
>в графе "требования"
>знание устройства и особенностей архитектур 8051, AVR, ARM
Перескажи хрюше первую страницу даташита любого контроллера из серии, ей хватит.
Patriot
Для вычислений протеинов ищу мк с битовой адресацией данных.
Так вот, их только мк архитектуры 8051 поддерживает или еще какие мк есть с такой функцией?
Что-то подобное есть в ARM Cortex-M3 и M4, называется bit banding.
>Для вычислений
Зачем? Это бессмысленно. Допустим понадобится для доступа к биту не одна инструкция, а две, то какая разница для вычислений? Ну возьмешь микроконтроллер с тактовой частотой повыше, если потребуется, подумаешь проблема. По моему оно нужно для атомарного доступа к битам, да и то не факт что такое вообще нужно.
Надо решить задачу удалённого обновления устройств без связи, наверняка решено уже 300 раз.
короче есть идея написать че то типа сервисной программки, которая будет позволять читать/записывать/бекапить флеш/еепром/rtc, при этом не загружаясь в память работая из оперативы. Для коммуникации надо олед на SSD1306 и кнопки через PCF8574 по i2c, и сд карточка по SPI, вопрос, есть ли перспективы у такой херни и могут ли набутылить если какой то хуй считает прошивку у коммерческого устройства с помощью этой хуевины если ее вообще возможно считать
Что за бред я читаю?
>не загружаясь в память работая из оперативы.
Если ты о том, чтобы загрузить программу в RAM через JTAG/SWD/бутлоадер, а потом эта программка что-то будет делать, то у тебя бред. Вообще-то именно так часто делают при штатной прошивке через JTAG/SWD/бутлоадер. Если JTAG/SWD/бутлоадер не отключены, то читай прошивку как угодно, все уже готово, ничего делать не нужно.
Иначе, если все это отключено аппаратно, запрещено чтение и т.д., то для некоторых микроконтроллеров путем каких-то ухищрений (обычно с питанием) эту защиту можно обойти, но это уже совсем другое дело.
>Для коммуникации надо олед на SSD1306 и кнопки через PCF8574 по i2c
Шиза какая-то.
Ничего подобного найти не могу.
Может быть стоит начать поиски с изучения user manual? А то с чего ты вообще взял что LPC так могут?
Задача такая стоит, нужно для периферии
Значит ты не там смотрел. А то что тебе нужно называется PINSEL_PINMODE_TRISTATE, если я не ошибаюсь.
Спасибо! Похоже на то, просто особого внимания на TRISTATE не обращал.
в ардуино иде как два пальца об асфальт через pubsubclient. Только вот если поддержка stm32 в ардуино иде
Тебе нужна будет либо стмка с эзернетом на борту и схема для физического уровня, либо прослойка в виде какой-нибудь esp. Потом продумать систему команд и написать прошивку, выполняющую эти команды, и проверяющую твоё "облако" вангую, это самая жопошная часть, возможно, проблема не решаемая в общем случае. Если взял есп, прошивка по работе с вебом на ней будет.
Если что-то из этого не вызывает у тебя мысли: "А, я уже делал нечто подобное, и знаю примерно как и что", то не лезь. Начни с чего попроще.
The new flexible $4 microcontroller board from Raspberry Pi
Raspberry Pi Pico is a tiny, fast, and versatile board built using RP2040, a brand new microcontroller chip designed by Raspberry Pi in the UK.
RP2040
Designed by Raspberry Pi, RP2040 features a dual-core Arm Cortex-M0+ processor with 264KB internal RAM and support for up to 16MB of off-chip Flash. A wide range of flexible I/O options includes I2C, SPI, and — uniquely — Programmable I/O (PIO). These support endless possible applications for this small and affordable package.
For beginners, for experts
From controlling appliances to operating a light display, Raspberry Pi Pico puts the technology that underpins countless everyday operations into your hands.
Programmable in C and MicroPython, Pico is adaptable to a vast range of applications and skill levels, and getting started is as easy as dragging and dropping a file.
More experienced users can take advantage of Raspberry Pi Pico’s rich peripheral set, including SPI, I2C, and eight Programmable I/O (PIO) state machines for custom peripheral support.
https://www.raspberrypi.org/products/raspberry-pi-pico/
https://pine64.com/product/pinephone-5-99-lcd-panel-with-touch-screen/?v=0446c16e2e66
И как это сделать, чтобы работал и сам дисплей, и тачскрин?
Хочу сделать смартфон на микроконтроллерах.
Распберри пи не предлагать, там напаяно куча металлоконструкций, который мешают, придают громоздкости. Когда-то сделал автономный планшет на распберри пи, но всё-равно было не очень юзабельно.
И пайнфон этот не хочу покупать, мутный он какой-то. И всё-равно придётся писать часть софта самостоятельно.
Судя по всему можно с микроконтроллерами у которых есть LTDC, только естественно нужна документация на сам дисплей. Возможно есть смысл потренироваться для начала на STM32F746G-DISCO.
>и тачскрин?
Там вообще обычно I2C, если я не ошибаюсь.
Только идея у тебя бестолковая и ты скорее всего ничего вменяемого не сделаешь. Нахрена вообще телефону тачскрин и такой дисплей, если на нем нельзя будет запустить браузер или видеоплеер? Или ты о STM32MP1? Но даже если так, то это тоже ерунда.
>Хочу сделать смартфон на микроконтроллерах.
Если купить у хачей/цыган в переходе "ифон" китайский то это оно и будет. Если их ещё продают, давно не видел.
>если на нем нельзя будет запустить браузер или видеоплеер?
А карты? Загрузить OSM на сд-карту и двигать, скейлить ёмкостным тачскрином. А когда надо вписать текст, то открывать экранную клавиатуру, а не пытаться перебирать что-то несколькими физическими кнопками.
>А карты? Загрузить OSM на сд-карту и двигать, скейлить ёмкостным тачскрином.
А у тебя есть такой софт, не заточенный под OS? Я писал навигацию - задача не так проста как кажется, нахрапом не решишь.
>такой софт, не заточенный под OS
Нет. Когда-то пытался отрисовывать OSM-карты вручную, но в интернете всё время натыкался на шизофрению типа отправить XML-данные на какой-то третьесторонний сервер, чтобы он отрендерил или что там было.
В любом случае, у OSM есть вся карта (где-то 50 ГБ) в т.н PBF формате: https://wiki.openstreetmap.org/wiki/PBF_Format
К сожалению, вроде нет нормальных библиотек по взаимодействию с ним и надо читать документацию и вручную писать библиотеку. На SD-карту в 256 ГБ можно будет поместить и всю планету в виде OSM, и английскую википедию с медиафайлами в OpenZIM формате (для которого тоже библиотек почти нет или написаны на жсе).
Но это я делал давно и с тех пор мой опыт возрос, надо будет ещё попробовать.
В общем-то в ГУИ и рендеринге ничего сложного нет. У меня уже есть самодельные графические и ГУИ движки (с поддержкой разных бекендов отрисовки, опенгл, софтверный рейтрейсинг и для МК надо будет сделать софтверную растеризацию).
Так что всё упирается в скорость, размер флеша и ОЗУ микроконтроллера и надёжность+скорость хранилища данных.
>В любом случае, у OSM есть вся карта (где-то 50 ГБ) в т.н PBF формате
Это формат для компактного хранения а не для быстрого отображения. Для отображения надо как минимум поверх 2D-индексацию прикрутить.
>Когда-то пытался отрисовывать OSM-карты вручную
Вот же дурачки сидят в автодеске и прочих, да? выдумывают всякие MapServer-ы и другую хуету для рендеринга векторных карт. Но тут Анон возьмется и на ардуине захуярит. Осталось чутка напрячься, написать библиотеку и всё. А ничего, что там float-вычислений до жопы? Контроллер просто крякнет это обсчитывать, не говоря уже о выоде на экран.
>А ничего, что там float-вычислений до жопы? Контроллер просто крякнет это обсчитывать
В Cortex-M4 уже завезли. Стоит 350 рублей на алике.
>В Cortex-M4 уже завезли. Стоит 350 рублей на алике.
И сколько он будет пересчитывать карту на миллион полигонов при переходе на другую СК?
Стоило всего лишь ответить что в старших стмках есть LTDC, но сама идея хрень полнейшая, как начался бред. То анону не нравится то что на малинке куча лишних для его задачи деталей, а то вдруг берется запросто угробить кучу времени на какую-то хрень, которую не факт что сделает, а даже если сделает то ей толком невозможно будет пользоваться. Да за то же время можно сотню раз малинку переразвести.
>>В Cortex-M4 уже завезли. Стоит 350 рублей на алике.
>И сколько он будет пересчитывать карту на миллион полигонов при переходе на другую СК?
Миллиона не должно быть - пересчитывается только то что на экране надо отобразить. Это сотни-тысячи.
Да ну! На али только 103 подделывают, и то хреново, а пропали все серии
>куда STM32 пропали из магазинов?
Никуда не пропадали https://www.electronshik.ru/catalog/mikrokontrollery/7Mfo А вот с ценами, что-то неладное.
И даже тут не все модели есть, нет в том числе "народной" STM32F103C8T6, многие модели со сроками поставки в недели и месяцы
Бля. Даже у самих ST их нет. Наверное майнеры клятые раскупили на стадии литографии.
>"народной" STM32F103C8T6
Впсовнил что года полтора назад прикупил 103CBU6 десяток по 50р/шт. Они правда оказались б/у, выпаянные откуда-то заботливым китайцем. Настало время проверить их работоспособность. что-то хуевые времена настают.
Тут сразу 2 фактора, ка мне кажется, пандемия приостановила заводы + майнеры, мать их, заводы своими видеокартами перегрузили
В итоге я вообще не понимаю, на какие МК теперь кидаться в плане изучения, учитывая то, что уже они могут также рандомно пропасть
Допустим, работая в гос.учереждении или фирме ты разработал ряд микропроцессорных устройств(прошивки и/или схемы).
Как потом добавить их в свое портфолио?
ПРОСТО приложить фоточку устройства и черкануть пару строк о нем, как здесь
<<
Или еще от РАБотодателя нужно затребовать документальное подтверждение того, что именно ты сделал это устройство и оно успешно продается и эксплуатируется? И как тогда такой документ будет называться - справкой, рекомендация с предыдущего места работы, етц?
Собственно, увольняться не планирую, но на всякий случай решил соствить портфолио, чтобы на случай, если выкинут на мороз, можно было легче устроиться на новую работу.
Портфолио надо, если ты будешь фрилансером, тогда
>> ПРОСТО приложить фоточку устройства и черкануть пару строк о нем, как здесь
достаточно.
Если устраиваешься в фирму, просто покажи свои платы, у тебя же есть бракованные и тестовые? Ни один работодатель в здравом уме справку тебе не даст, вдруг ты хочешь оспорить его право на эту разработку?
>Портфолио надо, если ты будешь фрилансером
Так портфолио в любом случае надо, чтобы указать в резюме, ведь работодатели думают следующим образом:
>опыт - это не столько года которые ты пропердел в стул на позиции [...], а законченные проекты, задачи, технологии, с которыми ты работал
Я так понял, тогда надо просто указать в портфолио список законченных устройств и все, а если будут вопросы просто кратко объяснить в чем их суть. А документальных подтверждений выполнения этих устройств мной фактически нет выходит.
>просто покажи свои платы, у тебя же есть бракованные и тестовые?
Лично у меня есть только макетки с кучей проводов, на которых тестировал прошивки, полноценные платы только у фирмы. Но они работоспособны.
А с ПО как быть? Снять видео, демонстрирующее работу устройства?
>Ни один работодатель в здравом уме справку тебе не даст, вдруг ты хочешь оспорить его право на эту разработку?
Хм, я об этом не думал.
По этой же причине, полагаю, нельзя показывать схемы и код с предыдущего места работы, ведь это интеллектуальная собственность работодателя.
>Снять видео, демонстрирующее работу устройства?
>и присесть за шпионаж в особо крупных размерах
Надо смотреть, что за госконтора в которой сейчас работаешь. А то сума и турьма заждались тебя.
Да не, в частной фирме, но это тоже не варик выходит.
Чтож, получается, надо в портфолио просто написать список проектов. Без каких-либо пруфов.
достаточный пруф, что ты можешь внятно рассказать, что делал и почему так. Электроника не айти, где толпа нубов после курсов строит из себя сеньоров
>Отличительной чертой mbed является вариант работы, при котором программист не нуждается в инсталляции специального инструментария для программирования контроллеров. В этом варианте для написания кода используется онлайн IDE, работающая через браузер. Компиляция также производится онлайн.
Проиграл с жидков.
Это дно хуже, чем компляторы, работающие через юсб-ключ.
Т.е. в любой момент(по желанию левой пятки), владелец этого онлайн-компилятора отключит его, или сделает доступ к нему только за тысячи долларов, и всем твоим разработкам, написанных на mbed пизда.
Снайпер в тре
В связи с тотальным пропаданием с рынка бюджетных STM32, полез смотреть аналоги у конкурентов и понял, что Cortex-M4/7 микроконтроллеры сопоставимые с STM стоят в полтора, два раза дороже и потребуют дохуя сил на курение их мануалов, покупку программаторов, и т.д. Пиздец какой-то. Чо делать-то?
Че за говно... Реально, STM32F103C8T6 за 10 штук хотят около 53 usd. Раньше, по-моему, дешевле было... Хотя, STM32F030 по-прежнему дешевенькие.
Фикс. Писал про алик.
Хотяяя... Я, вероятно, и подгоняюю насчет цены.
Но, кстати, в местном украинском радиодетальном магазе реально нет контроллеров серии f1.
Переходить на нижние stm32
кто-нибудь может привести пример личного проекта который не вытащил бы avr?
Какой авр? Атмега8/168/328? Элементарно - вывод информации на цветной 320х240 жк дисплей с более-менее высокой частотой обновления, а не 0.5-2 гц. Банально низкая производительность, даже не глядя на унылую встроенную периферию.
Ты делол? Я и сам могу придумать хуллиард теоретических применений, дай реальные проекты
Transistor tester.
По Украине синих таблеток на STM32F103C8T6 можно еще купит ьпо 3 доллара, причем сами чипы похожи на оригиналы, читается ID и ревизия в прошивке совпадает с маркировкой на корпусе.
Если что scylots
Ну суть в том что программируя железо абстракция и не нужна, она делает работу кода только хуже. Хороший программист мк это не программист по образованию, а электроник.
Загони в бутлоадер и замерь напряжение на jtag пинах. Если нет подтяжки вверх, значит левак
Хуй знает.
PA15(JTDI) - 3.3V
PA14(JTMS) - 3.3V
PA14(JTCK) - 0V
PB3(JTDO) - 1.5V
PB4 (JTRST) - 3.3V
И кстати, нигде не залит блинк, вроде китайцы заливают блинк не?
спасибо за информацию, продолжайте наблюдение
Бля, торможу, это библиотеки периферии и др. что не АРМ арх.
>почему у всех свои библиотеки
Это не совсем так, CMSIS-Core один на всех. А поскольку хоть ядро одно, но периферия у всех разная, соответственно требуются разные библиотеки. В том что касается остальной периферии, которая не входит в состав ядра, CMSIS требует от производителей описать все регистры единообразно и в соответствии с рядом требований. Но CMSIS низкоуровневый и поэтому производители делают высокоуровневые библиотеки, однако часто даже у одного производителя они разные для разных серий микроконтроллеров, в качестве примера STM32 - HAL и LL для каждой серии свои.
>и IDE
Это тоже не так. Ну да, зачастую лепят какую-то хрень на эклипсе, бывает при этом приделывают какие-то специфичные штуки, вроде куба или замеров энергопотребления у силабс. Только никто не заставляет пользоваться этим.
>Это тоже не так. Ну да, зачастую лепят какую-то хрень на эклипсе, бывает при этом приделывают какие-то специфичные штуки, вроде куба или замеров энергопотребления у силабс. Только никто не заставляет пользоваться этим.
Ну, у микрочип библиотека AFS открыта, но просто огромна, выбрать из нее только то, что нужно, без IDE, не тривиальная задача. В IDE можно указать что нужно, usb-cdc бла бла, и оно копирует это в твою директорию.
Не знаю почему они не используют стандартные механизмы. Нужен USB: git clone usb-cdc && make DEVICE=x. Но нет, нужно их IDE юзать.
https://github.com/ARM-software/CMSIS/blob/master/CMSIS/DSP_Lib/Source/ControllerFunctions/arm_pid_init_f32.c
У меня вопросец: надо ли каждый раз вызывать функцию инициализации при изменении параметров PID?
Т.е. изменил параметр Kp, например -> вызвал функцию. Или иожно на лету менять?
Хочу задействовать FPU на МК ARM Cortex-M4.
Всё упирается в строчку макроса
#if defined (__VFP_FP__) && !defined(__SOFTFP__)
__VFP_FP__ и __SOFTFP__ - неопределены, нужные значения макроса неактивны.
Как это исправить?
asda sda sd asd
смотря к какому одноплатнику, некоторые могут в pcie.
прям так и гугли, "название_борды pcie"
Так, ну судя по этому - https://raspberry3.ru/orange-pi-3-obzor-i-sravnenie/, писиай появлися только в третьей версии, а значит в первой его нет, я прав? Вообще совсем никаких способов без дополнительных плат его туда не присобачить?
там не в платах дело, можешь подпаяться к разьему, где о н есть. Засада в том, что PCIE интерфейс шустрый, на ARM-ном GPIO не сэмулируешь.
Оранжи на allwinner в основном. H3 без pci-e, h5 без, в h6 есть но там он забагован и линуксом не поддерживается.
Хороший pci-e у rk3399 но он дорогой, платы с ним около 100$ были до кризиса ещё.
Кстати о прикручивании необычных деталей к одноплатникам, никто не видел статью об установке на Raspberry Pi Zero GBAшного экрана?
Экран от игровой приставки Game Boy Advance. Последнюю неделю у меня вертится в голове этот вопрос, то ответ я пока не нашёл.
можно, но из малинки такой себе роутер выйдет, дороговатенький.
есть два stlinkv2 кетайских, могу один перешить во что-нибудь другое. Что анон посоветует - jlink или black magic probe?
Go with the black magic probe.
Порты перегружены, людей почему-то не хотят нанимать; стоимость переправки контейнера выросла в два раза.
>стоимость переправки контейнера выросла в два раза.
Там вроде зависит от направления. Из Китая в США вроде даже в 20 раз.
Ну я смотрел mygap на эту тему вроде, он так поясняет.
https://youtu.be/7iF-xM30rXk
Кто-то пробовал Mbed?
Он проще, чем Cube MX?
Правда ли, что на нем писать также просто как в ардуино иде?
Сам я ардуинщик и возможность легкого переката из ардуино иде в стм-ки через Mbed кажется заманчивой.
На AnalSkript. Только анальная пробка нужна, анимешная. Для мужественных олдскульных пидарасов не подойдет.
Смотри сразу в сторону F7. Вон, один человек пилил семплер на STM32, он брал седьмую серию (если знаком с оборудованием Pioneer DJ средины 2010х, то это что-то очень похожее по фичам).
Да, как ардуинка. Также много контроллеров, такой же говёный код, подойдёт для ди-ай-вай.
Лучше уж HAL + FreeRTOS
Лучше уж HAL + FreeRTOS
Лучше уж HAL + FreeRTOS
Gd32f
>безопасников
Эти хуже пидорасов. Все чем они занимаются на практике - правильное оформление бумажек, чтобы не прикопались аудиторы и прочие внешние проверяльщики. Разумеется по мере возможности при этом перекладывают ответственность и прикрывают свою жопу, причем только бумажками разумеется.
>хардварь секьюрити роются
Что это ты имеешь в виду?
>Эти хуже пидорасов
Да я понимаю, хотя я сам не безопасник, но роюсь и в ней.
>Что это ты имеешь в виду?
Направление "Hardware Security". Проектирование безопасной аппаратной архитектуры, если быть кратким.
С этим еще проще, хотя в чем-то может и сложнее. Наиболее заметный пример, пусть не про железо а софт, но это не столь важно - все эти сертифицированные отечественные линуксы. Сколько дыр находили и продолжают находить в одном только ядре линукса? Таким образом очевидно что все эти сертификации и прочее это не про безопасность, а про бабло. Ну может быть что-то прям уж совсем явно палящееся они не пропустят, но это я оптимист наверное.
>>481349
Все равно не понимаю. Например в микроконтроллерах есть аппаратная защита прошивки от считывания и копирования и в некоторых микроконтроллерах эту защиту можно обойти снижением напряжения питания и/или подачей импульсов по питанию или как-то еще аналогично. Это относится к твоему "Hardware Security"? Но тут проблема в том что одна часть микросхемы продолжает работать при пониженном питании, а другая нет, то есть исследовать такое нужно на уровне транзисторов.
Или относительно недавно нашумевшие meltdown и spectre - это проблемы на уровне rtl, от которого до транзисторов весьма далеко.
Это две совершенно разные проблемы, для выявления и устранения которых требуются познания в разных областях, пересекающихся лишь частично. А потом в почти любой железке есть и софтовая часть - это еще одна область. И все это ты хочешь намешать в одну кучу?
Есть такая легенда среди военов, что в каждый чип, купленный за границей, встроен радиопередатчик, который каждый день отчитывается куратору о том, как воен подрочил и где находится его ржавый советский металлолом.
Именно поэтому они дпочат на отечественные чипы, ведь там точно нет шпионских закладок. Страну опять спасли, ой как здорово, ой не могу!
>Это относится к твоему "Hardware Security"?
Мои действия закончатся на анализе прошивки.
>относительно недавно нашумевшие meltdown и spectre
Уязвимостям уже несколько лет, не знаю где они "недавние". Из недавних аппаратных CVE я знаю только VoltPillager. Но и там задействован SGX, он косвенно пересекается с софтом.
https://zt-chen.github.io/voltpillager/
>И все это ты хочешь намешать в одну кучу?
Ох, я разбираюсь в частности с прошивками и их работой, все, так теперь понятнее?
>Сколько дыр находили и продолжают находить в одном только ядре линукса?
Ну, прикинь сколько это фаззить определенные модули ядра? Тоже не мало времени занимает. Ядро линукса - жутчайший легаси, в котором рыться и искать что-то ой как не хочется.
>уж совсем явно палящееся они не пропустят
Критичные уязвимости переходят на первый план обычно. Фиксят, их, собственно быстро, из-за чего вместо одной иногда появляется две и более уязвимостей.
Уязвимости, которые не вызывают аппаратных сбоев или сбоев в ядре, обычно фиксят медленее. Даже которые самые неприятные
Как это сделать "по правильному" ? Need help, как говориться..
Контроллер выпаять и делай что хочешь. Я думаю нужно подать заведомо большое напряжение и ток, как при сварке или пайке, чтобы эффект был точечным. Иначе будет печка, которая постепенно перегреет весь кристал.
Что-то вроде 12 В/10A от компьютерного БП. И подавать такое напряжение одиночными импульсами, сначала короткими, потом длиннее, до тех пор пока не получится нужный эффект или не сгорит все.
Чисто теоретические советы, никогда таким не занимался.
>Как вам вообще реверсится и эксплойтится данная архитектура?
Сниферы + безумные дедуктивные умения уровня камбебетча
https://www.youtube.com/watch?v=Vq1lxeg_gNs
Спасибо! Посмотрю подробнее в эту сторону
MCU разных фирм могут быть защищены по-разному, в зависимости от назначения тоже по разному. Есть аппаратные средства защиты, но они в основном не от атаки защищают, а повышают надежность. У микроконтроллера чаще всего закрыта на пароль отладка JTAG, BDM, BSL и т.д. Атаки в основном деляться на глитч атаку и сайд-ченнл. Микроконтроллер можно замедлять тактируя на килогерцах, мешать работе его ядра и т.д. Отслеживаются токи потребления, температура. Воздействуют электромагнитным полем, температурой. Успешно атакованный закрытый микроконтроллер в свою очередь дает возможность задокументировать атаку и создать относительно простой программатор который будет буднично подламывать. Renesas строит защиту на модуле FCU, секвенсер доступа к памяти. У файрчалд/моторола использует похожие, но не такие методы, часто подламываются глитч атакой на ножку Xtail. Обширная тема очень и чтобы понимать нужно неплохо знать микроконтроллеры. Есть еще момент что прошивка криптованная, ее реверс сложен и долог, но выливается это все в утилиту весом в 5 мегабайт которая все может поправить в ней. Есть дорогостоящие программы для реверса бинарника вытащенного из контроллера, которые декомпилируют примерный код, из-за разнообразия ядер и реализаций все очень громоздко, но при известном упорстве эти программы справляются, можно примкнуть к разработке и помочь в отладке декомпилятора для конкретного микроконтроллера. Длинно и путанно я наверное объяснил и очень сумбурно, но как есть теперь.
Это всего лишь защита от копирования прошивки, которая вовсе может быть открытой. Но "хардварь секьюрити" это наверняка более обширная тема, впрочем фиг поймешь что имел в виду тот анон.
>>481410
>Критичные уязвимости переходят на первый план обычно.
Ага https://news.ycombinator.com/item?id=26887670
>Обширная тема очень и чтобы понимать нужно неплохо знать микроконтроллеры
Я тут и чтоб учиться тоже. До этого я работал с виндой на уровне ring 0, но хочу абстрагироваться и уйти куда-нибудь в более интересное дело.
>Есть дорогостоящие программы для реверса бинарника вытащенного из контроллера
Насколько знаю, IDA умеет в ARM, но никогда не смотрел, какой у нее выхлоп декомпилятора конкретно для ARM. Надо признаться, что на пример с MIPS она не очень хорошо управляется. Однако для x86_64 их декомпилятор остается лучшим из лучших.
Я привык пользоваться каким-нибудь r2/Cutter или Ghidra.
>Есть еще момент что прошивка криптованная
Вероятно, оно так и будет: вытаскивать из себя закриптованный бинарник в рантайме. Однако я не совсем представляю как это должно выглядить для ARM.
>Длинно и путанно я наверное объяснил и очень сумбурно, но как есть теперь
Все хорошо, анонче, спасибо!
>>481656
>Но "хардварь секьюрити" это наверняка более обширная тема, впрочем фиг поймешь что имел в виду тот анон.
Я вкатываюсь только в данную тему, я извиняюсь, если как-то говорю что-то не так или не объясняю.
>Ага
На Patchwork время от времени захожу, иногда бывает так, как я и сказал.
Я опять сумбурно буду. Например возьмем систему санкционирования доступа BMW, третьего поколения. CAS3 старый, добрый. Его давно весь изломали до основания. Применен мотороловский( фрискейл) MC9S12DG512, например с маской 0Y15. Секьюрный MCU, микропрограмма состоит из криптованного флэш, епром. Прочитать его можно многими программаторами, например R270. На него осуществляется комплексная атака, я тыкал осциллографом во время подлома, картина интересная. Полученные файлы были расковырены и появилась возможность скорректировать VIN, пробег, записать ISN (ключи моторного и GWS) после любой корректировки утилита пересчитывает крипту, вывешивает флаги что все "ОК" Сравниваешь бинарники и видишь характерные лесенки. Большую роль в успешном реверсе этой серии микроконтроллеров сыграло то, что криптованных там три модели и 15 масок примерно, а открытых куда больше. Плюс нервное напряжение, когда я первый раз "усыпил" BMW снеся флэшку CAS3 у меня голова заработала интенсивно. При этом не криптованные (без буквы S) после 9 могут быть тоже закрываться на чтение, въебываются glitch атакой. Программатор подает питание, через определенное время на ногу кварца 16 мгц дают 8, он замедляется, потом генерацию вообще срывают, происходит странный танец с питанием и ресетом процессора, в итоге он переходит на темную сторону и читают на 16 мГц. Я не знаю точно, выдергивают с него пароль или просто вдалбливают что PassOK. Кстати реверс прошивки порой и не нужен, например при попытке клонирования, т.н. "Отлома" устройства максимально дешево и с возможностью официального обновления ПО. Но это старая сказка, большинство серьезных чипов имеют номера и в базе разраба все есть и они онлайн команды kill засылают. Кирпичил так один прибор на NXP)))
Есть FreeRTOS и нотификация таска из интеррапта, примерно вот так — https://ideone.com/sTwLFW
Проблемма в том, что интеррапт и условие иногда срабатывают и после того, как я всё сделал, потому перед началом ожидания мне нужно просто сбросить все уже пришедшие до этого момента нотификации, чтобы я точно не получил никакого старья.
Проблема в том, что xTaskNotifyStateClear почему-то не работает. Он возвращает pdTRUE, что заклирил какие-то нотификации, но следующий за ним вызов ulTaskNotifyTake всё равно возвращается мгновенно из-за ранее пришедшего оповещения.
В итоге мне приходится делать while (ulTaskNotifyTake(pdTRUE, 0)){} вместое StateClear, что немного некрасиво.
Других АПИ для сброса я чего-то не нашёл. Я что-то не так понимаю, наверное, но как мне добиться нужного мне поведения человеческим методом, а не так топорно?
Наверное, вопрос отменяется, есть ulTaskNotifyValueClear, просто у меня слишком старая версия ОС в проекте, где такой функции ещё не завезли, а StateClear вообще другое делает. (Cраный куб, мог бы и новое качать, а не из 2017 года версию, сам проект создавался буквально пару месяцев назад).
Парни, не сочтите за наглость.
Киньте за щеку кейгеном для IAR.
Для STM8 надобно. Там лимит сейчас 4k кода всего.
Спасибо, но Cosmic он же не дружит с IAR? Надо юзать STVD получается? Я только вкатываюсь. Пытаюсь. Я поставил Cosmic.
>>481391
Миландр делал несколько фич аппаратной защиты:
https://habr.com/ru/company/milandr/blog/518138/
зарубежные аналоги тоже упоминаются.
>>481445
Можно попробовать, но скорее всего в утиль.
Была такая хуйня с ПЛИС, которую пиздануло повышенным напряжением питания - жрала 5 Вт вместо 0,5, грелась как печка, один или несколько выводов закоротило.
Поставил радиатор, работал так несколько дней - мощность постепенно упала в 2 раза (в первые минуты и часы больше, потом меньше), но КЗ осталось.
https://www.freertos.org/vTaskGetInfo.html
Эта залупа поможет? Или есть что-то типа ПроверитьЗапущенаЛиЗадача()?
Всё что я нашёл - это спецификации самого контроллера к этой плате, больше ничего. Как шить это говно? В какой среде писать (на сайте есть демка для IAR, но она не запускается) и где брать SPL ко всему этому добру?
Чет разочаровывает пока пиздец, везде видел шизу по поводу всех этих армов, а как сам начал пытаться вкатиться - так даже не могу понять как демопроект на платку закинуть. ЧЗХ они там у себя в Олимексе делают, что к ней даже нихрена доков нету.
Для avr ты должен был ставить атмел студию, в которой в комплекте должен идти гцц для армов. Вот им и компилируй. А шить можно хоть через st link utility, особенно если IDE не настроена. Через встроенный бутлоадер тоже можно шить, даже без программаторов.
Забыл упомянуть, что уже работал с ARM (но только отечественными) и юзал всегда кейл. Поэтому надеялся, что уже есть что-то привычное.
> А шить можно хоть через st link utility, особенно если IDE не настроена.
Эту утилитку уже скачал, непонятно как шить, если на плате вывод JTAG для их нативных программаторов от OLIMEX. Надо перепрошивать ST-link в J-link и смотреть распиновку житага?
> Через встроенный бутлоадер тоже можно шить
Его вроде нету.
>>495333
Можешь на пальцах объяснить, в чём отличие? Да и эта макетная плата тоже не из нашего времени, а из 2014 года.
Swclk к tck, swdio к tms, землю к земле.
Для миландров тоже работало.
Самое простое - скачать stm32 CubeIDE, там все идет из коробки. Даже если пересядешь на более адекватную ide, куб удобен для раскидывания пинов.
LL - это современный SPL.
HAL - это высокоуровневая надстройка над LL типа ардуины на минималках со всеми вытекающими плюсами и минусами, автоматически генерируется кубом. В критичных к быстродействию местах лучше не использовать.
Бутлоадер позволяет шить стм через uart1, замкнув соответствующий boot на землю или питание, в мануалах все есть. Прошивальщик - flash loader demonstrator.
Понял, благодарю.
А +3.3В обязательно подключать? Или если контроллер уже запитан то не надо (пик 1)?
> Бутлоадер позволяет шить стм через uart1
И для этого надо переставить перемычки boot0 и boot1 в единицу, а сам загрузчик уже зашит с завода получается?
Но обычно эти перемычки режима загрузки выглядят как переключатели, а у меня тут кнопки (пик 3 и 4), причем я только 1 нашёл (B0), похоже что B1 и WakeUp совмещены просто. Но как тогда переключать режимы загрузки, каждый раз зажимать кнопки чтоли?
>Забыл упомянуть, что уже работал с ARM (но только отечественными) и юзал всегда кейл. Поэтому надеялся, что уже есть что-то привычное.
Конечно всё есть. Вполне можно пользоваться одной средой и для миландра и стм и авр, я так и делаю и все хорошо. Пишешь мейкфайлы, можно симейк и все везде более-менее одинаково работает. Можно и кейл использовать, если так больше нравится.
>Надо перепрошивать ST-link в J-link и смотреть распиновку житага?
Антон выше правильно написал. Достаточно подключить только SWD, не обязательно задействовать JTAG. Смотри мануалы.
Если хочешь использовать программку от ст, то очевидно перепрошивать не нужно, даже нельзя. Перепрошивают только чтобы использовать ПО от сеггера. На счёт подсоединения питания - зависит от программатора, некоторые по этому напряжению берут свои лог. уровни. А загрузчик, если что, находится в масочном ПЗУ, т.е. не перепрошиваемый даже. Все как и у миландра.
>>495342
У этого бутлоадер и через USB может работать.
Мне почему-то кажется что прерывание может нарушить целостность хода выполнения и мб данные какие повредить.
А что если Hard Fault вылетит во время работы? Система продолжит работу? Из-за чего вообще обычно Hard Fault происходит?
соре за тупые вопросы
Но ведь прерывание именно для того и предназначено, чтобы прервать выполнение и сделать какое-то срочное действие. Никакие данные оно само по себе не повреждает, ни с ОСРВ, ни без неё, всё зависит от прокладки между микроконтроллером и клавиатурой. freertos имеет специальные функции для вызова из обработчика, просто делай как написано в доках и примерах.
Можешь в hardfault ресетнуться, например, почему бы нет, но по мне это нездоровая хуйня. Происходит от нарушения правил работы с данными, доступа к неправильным адресам, попытки затереть код программ во время выполнения, вызвать математические функции с выключенным float-сопроцессором. Over 9000 причин.
Понял, пойду дальше изучать, на выхах попробую что-нибудь простенькое сделать типа моргалки.
>>497655
Вот в отсутствии этой конкретики вся проблема, пока что я понимаю только что если программа сваливается в Hard Fault - значит я скорее всего что-то не так сделал с памятью или как-то не так обратился к ней.
Хорошо бы ещё как-то уметь обрабатывать этот случай, но я хз как. Есть какой-то универсальный способ вызвать ресет программно? Или нужна конкретика в виде модели контроллера?
>Вот в отсутствии этой конкретики вся проблема
В документации все есть. Или посмотри в книге у Джозефа Ю.
NVIC_SystemReset(), не?
Можно перед этим теоретически где-нибудь сохранить данные о сбое какие-нибудь. Я сам не делал, стараюсь избавляться от любых Хардов.
В отладчике CubeIDE например всю последовательность вызовов до попадания в Хард показывает. Ну некоторые еще printf'ом содержимое регистров и указателя стека выводят, чтобы потом узнать, что за данные и на каком адресе вальнулось. В книжках есть такие примеры, у Джозефа Ю, например.
Проблема такая. Сделал для начала тестовый проект, там просто настраивается контроллер SPI, монтируется моя флешка и по uart выводится инфа о количнстве папок в корневой директории и свободное место на флешке. Все работает отлично при каждом включении устройства.
Создал другой проект, где сделал все тоже самое что и в прошлом, но только обрабатываю определенные файлы с флешки, и все работает пока не отключить питание устройства. После включения-выключения диск не монтируется и выдает FR_NOT_READY, при этом при ресете все норм.
И самое странное, что для того чтобы диск опять начал читаться, мне надо прошить в контроллер мой первый проект, а потом зашить второй проект. И тогда второй проект будет работать стабильно, пока не отключить питание.
Сначала думал, что перед выключением питания надо закрывать все открытые файлы и размонтировать диск, но это не помогло. Как я понял, ошибка появляется на моменте вызова disc_initialize().
В чем может быть проблема?
> Могу я брать инфу из книги Джозефа Ю если использую Cortex-M1
Можешь. Даже если что-то сразу не пойдёт, это будет для тебя стимулом залезть в RTFM, напрячь мозг и разобраться в проблеме самостоятельно.
Но я бы лучше нашёл книжку по Кортекс-М0, они с М1 почти одинаковые.
Кто нибудь паял атмегу проводами? Хочу сделать собственную отладочную плату на дощечке, только х.з. как аккуратнее подпаяться к тонким smd выводам и заодно исключить их замыкание.
Может быть как нибудь гребенкой попробовать, четные выводы загнуть чуть вверх, нечетные вниз, и просунуть какой нибудь изолирующий лист между ними как можно ближе к корпусу микросхемы, чтобы толстая пайка проводов не дотягивалась до соседних?
Ты адово заебешься паять это говно, а потом оно отвалится от первого пука или не будет работать на высоких частотах из-за паразитной индуктивности проводов.
Сделай отладочную плату ЛУТом аля пикрил, или купи китайскую макетку для LQFP.
На самом деле проще купить или с али заказать.
Дорого готовую плату покупать. И плату для самостоятельной пайки тоже нет смысла, у меня только ЭПСН под рукой.
Хотя вот это >>498590 (вторая ссылка) интересно конечно, по цене ещё куда ни шло.
По сабжу - сегодня отпаял атмегу128 с ненужного устройства. Первый час или два пытался разными способами - сначала пытался по одной ножке паяльником и иголкой, потом лезвием. Ничего не получалось. После этого попробовал соорудить квадратный каркас из проволоки чтобы прогреть им все ножки, но тоже не прокатило, он почему-то никак не хотел греться.
В итоге всё же нашел приемлемый способ - продел под загибами ножек эмалированный провод примерно 0.5, прогрел их паяльником и начал потихоньку тянуть проволоку на себя. За несколько секунд все ножки одной стороны ровно отошли. Тянул не со всей дури а аккуратно, чуть наискосок, чтобы ножки отходили по одной.
После этого случайно одну оторвал пинцетом пытаясь выровнять, но она не критичная судя по даташиту.
После отпайки отогнул на одной стороне ножки гребенкой - 8 вверх, 8 вниз. Таким образом между ними получилось где-то по одному миллиметру свободного места. В принципе должно хватить чтобы подпаяться. Но понимаю, что будет геморно.
> час или два
> паяльником и иголкой
>отогнул на одной стороне ножки гребенкой - 8 вверх, 8 вниз
>подпаяться. Но понимаю, что будет геморно
Еб твою мать, блядь, еб твою мать.
Атмеги по-нищебродски отпаиваются так: электроплита включается на единицу или двойку, на ней прогревается плата градусов до 100, и прямо на микросхему светишь прикуривателем. Электроплиту можно заменить утюгом, зажатым в тиски вверх ногами, у него даже термоконтроль есть.
https://www.youtube.com/watch?v=JKDZRzR1eU0
"Сборка устройства производится в обратном порядке".
>Что можно собрать на базе Арм-а?
Если без уточнений, то всякое, в зависимости от Арм-а. Молоток, микроскоп, мигалку светодиодом, обработку сигнала для радиолокатора и прочее.
>А что если использовать промышленную электронику, датчики и прочее, но управлять ими не с помощью ПЛК, а используя что-то другое?
Ну делай. Только с чего ты взял что будет быстрее сделать свой вариант ПЛК, чем взять готовый, пусть и ущербный? Схему там нарисовать, детальки заказать, платы развести и заказать, вот это вот все такое. Или ты собрался кое-как все на висящих проводках делать?
>Куда вообще копать? Не знаю за что браться, что читать. Контроллеров всяких куча.
Вряд ли с задачами ПЛК ты упрешься в быстродействие и даже объем памяти. Поэтому единственный критерий выбора это наличие необходимых интерфейсов. И вовсе необязательно использовать ARM, даже атмеги тоже может оказаться более чем достаточно.
>Только с чего ты взял что будет быстрее сделать свой вариант ПЛК, чем взять готовый, пусть и ущербный?
Не быстрее, но дешевле. ПЛК очень дорогие и не являются универсальными контроллерами. Они решают только свою специфическую задачу.
>И вовсе необязательно использовать ARM
Согласен. Тогда такой вопрос. С чего вообще начать? Есть опыт программирования на языках общего назначения. Может с ардуино? Цель набраться опыта и попутно автоматизировать свои задачи.
Какую же специфическую задачу решает cosesys например?
>Не быстрее, но дешевле.
Если ограничиться микро-ПЛК в виде программируемых реле, то не факт что дешевле будет.
>ПЛК очень дорогие и не являются универсальными контроллерами. Они решают только свою специфическую задачу.
Релюшками щелкать могут, какие задачи тебе еще нужны? Тем более любой "контроллер" не будет универсальным, у какого-то один набор интерфейсов, у какого-то другой, объем памяти различается и прочее.
>Может с ардуино?
Станешь ардуинщиком.
Там может и стоять авр, но ты в нем толком и не разберешься т.к. там куча абстракций.
Наверное, все от твоих целей зависит, если хочешь здесь и сейчас что-то написать под контроллер – то ардуино подойдёт.
Что лучше для обучения? Для ардуино много обучающей информации, много всяких железок. Как мне кажется для обучения должно хорошо подходить. Я не боюсь сложности, просто не знаю с чего начать.
Могу только за себя сказать, но я до сих пор учусь.
Начал вкат с авр атмеги 128 кажется т.к. она шла на макетной плате. Все что там было нужно - это немного базовых знаний по микропроцессорам, а остальное находилось в документации.
Норм варик взять какую-нибудь отладочную платку (evaluation board) с популярным контроллером и ковырять её. Сначала ставишь себе цель, что хочешь сделать в рамках возможностей платы, потом смотришь в документации что для этого нужно и как это сделать. Периодически гуглишь.
Учиться нужно всегда. Нет таких кто все знает и умеет. У меня есть задачи, которые нужно автоматизировать, но я не знаю что для этого взять. Например, мне нужно измерять PH и получать эти данные на компьютер и смартфон. Еще нужно получать температуру и влажность, управлять электромагнитными клапанами и кнопками на разных реле. На работе есть всякие ПЛК и программируемые реле, но никто не даст мне обучаться на них, они в работе, а покупать для себя такое нереально из-за дороговизны. Да и не тянет меня к таким железкам, там какие-то дурацкие языки программирования. Не знаю какое железо подошло бы мне.
>Например, мне нужно измерять PH и получать эти данные на компьютер и смартфон.
Если я не ошибаюсь, то PH это в первую очередь электроды, а во вторую какой-то усилитель и АЦП. Если у тебя нет для этого доступных
>промышленную электронику, датчики и прочее
то на алиэкспрессе продают все это где АЦП с I2C выходом. Не знаю насколько оно нормальное, но продают. Если все что нужно это получать данные, то по минимуму достаточно смастерить переходник USB-I2C. Можно вовсе в HDMI воткнуть, там DDC это I2C и есть. По этому пункту кое-что можно сделать без всяких микроконтроллеров.
Если брать промышленные, то там обычно RS-485, тем более микроконтроллеры не нужны, берешь готовый переходник USB в RS-485 и готово.
>Еще нужно получать температуру и влажность
Аналогично, можно подцепить через I2C, а промышленные также с RS-485 можно взять.
>управлять электромагнитными клапанами и кнопками на разных реле.
С этим может быть по разному, в зависимости от дополнительных требований. Ну, можешь взять ардуину, должно хватить. Также ардуивскую плату вовсе не обязательно использовать со всей этой ардиновской ерундой, это всего лишь плата с атмегой (или еще чем-нибудь).
>нереально из-за дороговизны.
Я бы не сказал что программируемые реле особо дорогие. Если будешь сам такое делать, причем не тяп-ляп, то тот же порядок по стоимости получится. Но программное обеспечение там конечно бестолковое, впрочем, АСУ-шники нахваливают и говорят что только так и надо.
Ты мне предлагаешь подключать напрямую к компу и юзать Linux/Windows API чтобы обрабатывать сигналы в удобочитаемый вид? По любому нужна железка, которая будет интерфейсом между электроникой и компом. Потому что электроники много и потому что так удобнее.
Если "датчики" не промышленные, то из интерфейсов там скорее всего будут I2C, SPI, аналоговый выход, ШИМ может быть, 1-Wire бывает иногда, остальные варианты встречаются реже. Вполне вероятно что получится ограничится одним I2C или SPI. В таком случае достаточно сообразить один универсальный переходник. Как написано выше, такое можно сделать и без микроконтроллеров.
С промышленными железками может быть еще проще, переходников USB в RS485 полно разных на любой вкус.
Или есть какие-то архитектурные особенности, которые не позволяют реализовать ртос на М1 ядре? Если их нету, то можно ли как-то портировать ртос для работы на М1 ядрах? Что для этого нужно?
https://developer.arm.com/documentation/ka001145/latest
Это одно и то же за исключением:
1) В m1 отсутствует энергосберегающая фигня в виде WFI, WFE, SEV;
2) Может отсутствовать SVC.
Первое просто учитываешь и не используешь, а второе в случае отсутствия действительно создает заметное препятствие использованию операционной системы.
Если тебе это применительно 1986ВЕ1Т, то SVC там есть, но есть еще и еррата применительно к SysTick. Оно просто не работает нормально на высоких тактовых частотах, причем это вроде как не исправили в новых ревизиях. В результате так просто оно не заработает, нужно менять SysTick на другой таймер. И вообще этих 1986 может больше не быть никогда.
Да и зачем тебе FreeRTOS? Мне как-то не требовалось, в том числе с TCP/IP без всего этого обошелся.
>Это одно и то же за исключением:
То есть м0 и м1 это одно и то же за небольшими исключениями. м3 уже заметно отличается.
Удивлен, как точно ты определил контроллер. Да, работаю с 1986ВЕ1Т, про еррату знаю, для начала хотя бы потестить все и запустить на частотах до 25МГц, когда системный таймер нормально работает. Я вкатываюсь только, вот и интересно ртос пощупать, и возможно текущие проекты в будущем под нее переписать.
Если ты уже работал с этим контроллером, ты случайно не работал с SPI или контроллером DMA?
Сейчас осваиваю их и есть вопросы по этим блокам, хотя и по всему остальному тоже много чего не понятно, а местный локальный форум, где более-менее все объясняли, прикрыли после известных событий. Как раз когда я начал вкатываться.
Короче, я могу просто скачать ртос с оф сайта для СМ0, открыть Quick Start Guide и попытаться настроить это все под СМ1?
>Удивлен, как точно ты определил контроллер.
С этим не так много вариантов.
>SPI
Используется такое. Только скорее в прошедшем времени.
>DMA
Было дело. Но оно там тормозное, зато у кучи периферии есть FIFO довольно большого объема, поэтому обычно не особо оно там нужно.
>Короче, я могу просто скачать ртос с оф сайта для СМ0, открыть Quick Start Guide и попытаться настроить это все под СМ1?
Вероятно все так.
>Как раз когда я начал вкатываться.
Тут выкатываться пора уже. Только куда?
Если имел дело с SPI, не знаешь как на этом контроллере рассчитать частоту SPI грамотно? Работаю с fatfs, там у SPI есть максимальная и минимальная частота, она рассчитывается в зависимости от частоты ядра. В документации вроде написано, но я так и не понял как её рассчитать, ибо там в формуле значения откуда-то с потолка взяты.
А по DMA сейчас больше всего беспокоят 2 вопроса:
- при вызове прерывания, как определить какой канал DMA это прерывание вызвал? (сейчас я проверяю ControlTable каждого используемого канала);
- как грамотно выйти из прерывания по окончанию работы канала DMA? Не понятен порядок действий, которые надо сделать после переинициализации канала, чтоб грамотно выйти из прерывания.
Ну а по поводу вката, тут я ничего поделать не могу, если на работе в основном только такое используется. Мне еще повезло с этим работать так как там есть намного хуже и древнее вещи. А по поводу нехватки или отсутствия микропроцессорной комплектухи пока тревогу вроде не бьют.
чел, если ты правда работал с этим и не против если тебя периодически будет заебывать вопросами студентота в моем лице, я бы перекатился в телегу, если конечно ты не против
>Если имел дело с SPI, не знаешь как на этом контроллере рассчитать частоту SPI грамотно?
В документации разве в этом месте ошибочно написано? Прям формула есть, если ты про частоту тактового сигнала.
>А по DMA сейчас больше всего беспокоят 2 вопроса:
Не помню уже. На деле вся эта хрень с периферией не так много времени отнимает, по сравнению с остальным.
>А по поводу нехватки или отсутствия микропроцессорной комплектухи пока тревогу вроде не бьют.
А надо бы задуматься.
> В документации разве в этом месте ошибочно написано?
Ну я нихрена не понял, что мне надо сделать, если у меня частота 80 МГц и SSP(SPI) в режиме мастера?
> по сравнению с остальным
Например?
> А надо бы задуматься
Так тревогу не бьют потому что уже есть запасные варики и сама компания пишет что пока все норм.
>что мне надо сделать, если у меня частота 80 МГц и SSP(SPI) в режиме мастера?
Ничего. На этой странице написано что тактовая частота контроллера SSP должна быть в два и более раз больше чем частота клока на выходе SPI. Нижний предел тоже ограничивается. Тактовая частота (HCLK) на модуль SSP идет через делитель, который задается в регистре SSP_CLOCK, при особой необходимости можно поделить им.
По самому значению тактовой частоты смотри следующую страницу.
>Например?
Слежение за целью с обработкой изображений, сопутствующие задачи.
>Так тревогу не бьют потому что
Потому что всем пофигу может быть?
>уже есть запасные варики
Особенно когда уже проведены почти все испытания с 1986 и кучей остального отвалившегося, заказчик уже почти все принял, вот-вот серия...
>и сама компания пишет что пока все норм.
Ну это логично. Как в анекдоте.
> тактовая частота контроллера SSP должна быть в два и более раз больше чем частота клока на выходе SPI
Я несколько раз уже прочитал эту строчку и не могу понять что тут написано. Контроллер SSP должен работать на частоте, в 2 раза превышающей его собственную? Это как?
Что есть что? Все что у меня есть – это тактовая частота HCLK и этот делитель SSPCLK, который в регистре CR0 находится, что описано на след странице.
А как вход и выход посчитать? Из чего формируется Fsspclkout и Fsspclkin?
И по каким критериям надо делитель SSPCLK подбирать?
На данный момент я подобрал частоту методом тыка для 16МГц и все работает. Но сейчас 16МГц не хватает, а при повышении частоты контроллера (и пропорционально частоты SSP офк) SD карта перестает отвечать на команды и не хочет инициализироваться, причем только после выключения питания. До этого момента она работает.
>Контроллер SSP должен работать на частоте, в 2 раза превышающей его собственную?
Частота SSP_CLK это от которой тактируется модуль SSP.
А частота SSPCLK это то что идёт с ножки микроконтроллера, если он ведущий. Возможно тебя это запутало.
>делитель SSPCLK,
Лучше не делить.
> Частота SSP_CLK это от которой тактируется модуль SSP.
Он может тактироваться от чего-то, кроме частоты CPU? По сути ведь в моем случае обе эти частоты равны? У них ведь одинаковый источник частоты? Просто в каких-то случаях я могу что-то из этого делителем менять.
А что за Fsspclkout и Fsspclkin? Откуда брать их значения?
В моем случае есть 2 варианта частоты SSP:
FCLK_FAST и FCLK_SLOW. На низкой частоте идет инициализация SD карты, на высокую частоту SSP пепеключается когда SD карта вышла в рабочий режим. Но какие они должны быть я так и не пойму.
>Он может тактироваться от чего-то, кроме частоты CPU?
Оно тактируется от HCLK, деленной на делилку из регистра SSP_CLOCK. Но делить ни к чему и лучше не делить.
>А что за Fsspclkout и Fsspclkin?
Это частота SSPCLK, того что идёт с ножки микроконтроллера. Out это когда микроконтроллер ведущий и сам даёт сигнал на эту ножку. In - когда микроконтроллер ведомый. Там у этой формулы в скобках же все это написано.
Вроде разобрался, по крайней мере с минимальной частотой, благодарю.
А ты когда под 1986 писал юзал SPL? Если да, то какой версии лучше пользоваться? Там просто есть какие-то паки от сообщества, а есть официальные.
>писал юзал SPL?
Да, конечно. Нет никакого смысла не использовать.
>Там просто есть какие-то паки от сообщества, а есть официальные.
Официальные к сожалению не работают с gcc. Поэтому использовал https://github.com/eldarkg/emdr1986x-std-per-lib В качестве IDE со всякими микроконтроллерами использую Qt Creator вместе с симейком.
Сейчас пользуюсь тем же самым, но поставил ещё это https://github.com/StartMilandr/MDR_Pack_v6
Что можешь сказать по этому паку? Мне после прошлого вообще неудобно этим пользоваться, да и документации нету к этому паку, одному автору понятно что там как.
>Что можешь сказать по этому паку?
В первый раз вижу. Подозрительно выглядит. Действительно, хотя бы доксигеновскую пародию на документацию можно было изобразить.
Зато emdr1986x-std-per-lib это всего лишь адаптация официальной библиотеки под gcc.
А еще, паки это же про кейл? Этот момент в кейле как-то не здорово выглядит. Что мешает подрубить в свой репозиторий нужные библиотеки как субмодули? Ну или просто руками все скопировать.
Паки про кейл, да
> Что мешает подрубить в свой репозиторий нужные библиотеки как субмодули
Я пока вообще не разбираюсь в теории компиляции и просто в этом. Юзаю кейл так как там есть еще и пошаговая отладка, ну и до этого по учебе им пользовался.
> Что мешает подрубить в свой репозиторий нужные библиотеки как субмодули
Что можно почитать по этой теме, чтобы понимать как это сделать?
>пошаговая отладка
Оно очень редко нужно. Так-то оно во всем есть, что может в gdb, но всякое специфичное для микроконтроллеров есть не везде. Ну можно для отладки отдельно от IDE использовать Ozone от сеггера, там все есть.
>Что можно почитать по этой теме, чтобы понимать как это сделать?
Это я про субмодули git. Конечно не обязательно их использовать, но по моему оно тут было бы уместно. Также весьма желательно использовать хоть какую-нибудь систему контроля версий. И бэкапы всего этого делать, хотя бы на отдельный комп. Не знаю на счет тебя, но в конторах, занимающихся 1986ВЕ1Т, всем этим часто пренебрегают и не от большого ума.
Моя контора не исключение, гит появляется уровнем повыше.
Я пока вообще не представляю как что-то писать под контроллеры без IDE. Пользовался компилятором и гдб только по учебе когда консольные приложения писал. Для меня даже мейк файл проблематично сделать. Самое главное – хз как искать инфу по этой теме.
>производители отечественной продукции
https://mniirip.ru/node/4188 Тут перечень всей продукции, ну почти всей. Кое-где можно скачать бесплатно.
А если ты про то что не для военного применения, то не нужно оно.
Мда, не густо у нас, особенно с модулем ethernet вообще буквально несколько штук.
В демках смотрю - там таймеру дается самый маленький приоритет, но почему? Если у SysTick'a по умолчанию приоритет - 1 (почти самый высокий в Cortex-M0, дальше только исключения Hardfault и NMI).
Миландр (1986) - самый крупный и адекватный производитель, фаблесс, производил чипы на X-Fab или TSMC, сейчас распродают остатки. Возможно, переедут на Микрон или в Китай, но на это нужна пара лет. Могут слиться, микросхем у них много, весной там какая-то нездоровая хуйня происходила, вроде как директор свалил. Если у кого есть инсайды, поделитесь.
Микрон - RISC-V МК32 Амур, бескорпусной чип на большой плате, свое производство, первые будут в октябре-ноябре, обещают небольшую стоимость. Инфы мало, обычно работают с крупными заказчиками.
У одного деда на сайте есть распиновка.
НИИЭТ - 1921ВК и 1946ВК, cortex-M4. Скорее всего фаблесс и тоже будут переезжать. Работали с ними из под iar, адекватные МК, есть репозиторий на bitbucket.
Еще есть куча 8031, 8051 и mcs-96 в металлокерамике, возможно, какие-то делают у нас.
Ангстрем - старый 8-битный 1867ВЕ1, свое производство.
НИИМА прогресс - аналоги stm32 в bga, даташитов нет, не знаю, где производятся.
Можно еще на ecworld.ru покопаться, там почти все есть.
Я бы рассчитывал на Микрон и НИИЭТ в следующем году, и закладывал китайские кортексы как запасной вариант. Там их хуева гора - chipsea, wch (говорят, что аналог stm по регистрам), artery (m4), cw32, mm32, linko, zetta, vango. Стоят в разы дешевле stm/nxp, многие прямо сейчас выкатывают свои ide.
>>500447
О, я тоже с ним работал, только для iar. Скачай прогу milandrPLL и посмотри примеры. Еще был сайт startmilandr, он закрылся, но на странице автора есть бэкап.
> весной там какая-то нездоровая хуйня происходила, вроде как директор свалил
Типа того, только не понятно, как это мешает дальше выпускать продукцию. Странная проблема какая-то, перекрытие поставок из Тайваня кажется куда более серьёзной проблемой.
Есть ещё НИИСИ – Комдив-МК, у них вроде тоже свое производство.
Тоже рассчитываю на НИИЭТ с их 1921ВК, на неделе наверное позвоню им и узнаю что к чему.
Нормальный ли у этого 1921ВК функциональный аналог? Там LM4F132 от TI, но инфы по нему маловато.
>CubeIDE
Это эклипс с довеском, а компилятор там обычный gcc, не путай. Мейкфайлы пиши лучше.
>RTOS
А смысл? Так ли оно нужно?
>Си есть си, если там ничего не нахуеверчено
Сколько себя помню, при портировании из кейла всегда какая-то задница да всплывет, так что спросил заранее в надежде что уже есть готовые решения.
>Protothreads не хватит?
Вполне возможно что и хватит. Спасибо анон. Хабр еще подсказывает Tasklet и Workqueue.
>А смысл? Так ли оно нужно?
Опыт говорит что если надо делать хотя бы три-четыре задачи параллельно, то лучше сразу ставить ртос и не ебать себе мозг в будущем с сопровождением и прикручиванием новых перделок.
Кто-нибудь работал с китайскими mindmotion (mm32)?
Или с чем нибудь другим - geehy (apm32), wch (ch32), chipsea (cs32), vango, cw32, etc?
Чо молчите как в рот говна набрали? В чом погроммировать ети камни? SDK какое есть? Примеры, ходы?
Ты дурак? Иди нахуй отсюда.
>по архитектурам и паттернам embedded приложений?
лапша во всю ивановскую. Железячники не особо часто на самом деле умеют нормальный код писать.
вкуривай обычный C. Из того, что повсеместно распространено в эмбедщине и не особо в обычном софте - volatile, weak функции, ассемблерные вставки.
У эмбеддера два союзника - конечный автомат и очередь событий. Задрочишь эти два паттерна, научишься их применять в разных ситуациях и будешь великолепен.
СТМо-тред ушёл вообще хз куда, потому пишу тут.
Отправляю в USART по DMA и хочу получить прерывание от DMA по передаче всех байтов от DMA. Код тут https://pastebin.com/kaBQX3VH .
Байты уходят, в терминале "Transmitted_by_DMA\n", но прерывания нет. Приэтом бит в ISER0 стоит, в ISPR0 стоит, флаг события в ISR самого DMA стоит, но прерывания не происходит. ЧЯДНТ?
Сап, радиолухи. Я снова с ADuC7061. Я правильно понял, что для погроммирования необходим J-Link\ULink\etc?
Почему STM-овцы не сделали свой программатор универсальным для всех армов?
>Почему STM-овцы не сделали свой программатор универсальным для всех армов?
вот делать им нехуй больше. Тебе ж может придти в голову мысль попробовать чото кроме stm тогда.
кетайский stlinkv2 спокойно перешивается в jlink, есличо.
>stlinkv2 спокойно перешивается в jlink, есличо
Где ты был раньше? Я уже заказал у китайцы jlink10 за 1300. Приедет к середине ноября. А я пока либы буду пытаться скочать с AD. А то они со штатным впн от огнелиса, пишут, шо - ХУЙ ВАМ ПО ВСЕЙ РОССИЙСКОЙ МОРДЕ, А НЕ ВОЗМОЖНОСТЬ СКАЧАТЬ!!! АЗАЗА!!
Я бы не связывался с ними, но уж больно охуевший ADC у них встроен в этот чип. А я разжился десятком нормирующих преобразователей от Овна, с ними внутре.
>что хал и прочие библиотеки
Расскажешь как будешь ебаться с битиками когда запилишь что-то сложнее SPI и I2C, хотяб ethernet или USB.
Знаю я таких, подельщиков. Начинают рассказывать про дыры в библиотеках и "что они всё пишут сами, если надо" или "если мне надо будет, могут написать функцию работы с портом, и передавать туда данные по указателю", или вообще "если надо будет работать работать с портом из нескольких функций, я реализую очередь, в котором будут данные складываться и отправляться когда порт будет свободен"
Потом такие ребята ВНЕЗАПНО для себя узнают что очереди уже реализованы в RTOS, драйверы уже есть тоже во многих HAL и LL и даже в тех же RTOS.
Но блядь, я из треда в тред вижу как каждый "собирается" сделать свой SPL/OS/RTOS/SDK/LL/HAL/CMSIS, только через некоторое время зайдешь в его git или спросишь, а на самом деле нихуя нет, наверное дошло.
Лучше иметь 2 программатора. Я серъезно. У меня этих программаторов дохуяллион.
RISC-V уже готов для продакшона? или в больших объёмах ARM НАСТОЛЬКО дороже, что выгоднее налабать SoC на коленке из опенсорцных IP и впихнуть консьюмерам (всё равно сожрут)?
>про секьюрити SoC "Titan"
Это просто микроконтроллер, вполне вероятно что и 8051 для этого было бы вполне.
И так ли оно нужно конечному потребителю в телефоне? Мне как-то без надобности.
>из опенсорцных IP
Как бы RISC-V это не опенсурсные IP, а только общедоступная ISA. А сами IP RISC-V существуют какие угодно.
>со своей оперативой
Это у всех микроконтроллеров должно быть в том или ином объеме.
>хранилищем
Да, это не у всех бывает. Но не меньше чем у половины точно есть.
>и скорее всего RTOS
Будто что-то особое, требующее какого-то особого набора команд.
Так ты макакен, хули с тебя взять. Когда ничего не делаешь и только готовое берешь, это конечно очень легко и всем можно говорить что ты проффессионал, ПОДНЯЛ usb, ethernet, potoki на hal.
Полагаю risc v подходит для кастомных решений, потому что его легко настраивать. Arm все таки нужно лицензировать и согласовывать с барином каждый бит, а эту хуйню масштабируй, режь как хочешь.
Так тебя тоже можно макакеном назвать, хуле ты на АРМы полез, возьми да свой процессор сделай тогда. Пиздец, с какими я долбаебами сижу.
А по факту, я уверень что тут usb, ethernet только полтора анона, и то ради прикола а не в прод. Когда работаешь с ETH протоколами которые уже работают на 1000Гбит, да именно Гбит, то ты полюбому ну не сможешь ты потянуть это в одно рыло, это коллективная работа, т.е. готовые драйверы и ОС, это и есть по сути HAL.
А поднять, так это хуйня на постном масле - так. Диодиком мигнуть чтоль, битик передать? Я такое говно даже в резюме не вписываю если я просто побаловался с каким-то протоколом или периферией.
Спасибо анон. Попробую повкуривать. Хотя скажу честно, препарировать микропитона идея неочевидная для меня.
В меня база это Python. Попросили сварганить платку управления на МК, в итоге как ардуинодебил сделал железку на модулях, а код написал по заветам DRY и SOLID, пришедшие на проект "аксакалы" говорят что не понимают псевдо ООП и ваще бля.
Вы серьезно ебашите все в main.c? Кукуха не едет?
Интересную тему поднял. Но чувствую кончится срачем.
Писал бы на питоне, раз плата управления всего лишь.
Почему псевдо ООП?
>все в main.c
Это те кто пишет в структурной парадигме. У них в общем то и нет необходимости свои объекты и классы создавать, или их не больше трёх, поэтому можно реализовать все на функциях.
Если ты пихаешь ооп там, где оно не требуется от слова совсем – то до тебя правильно доебались.
Ну а в мейне только мейн обычно, остальное раскидано по модулям. Ну если обработчики прерываний короткие, то их тоже в мейне оставляю.
>Если ты пихаешь ооп там, где оно не требуется от слова совсем
Ты либо приводишь конкретный пример, либо идёшь нахуй школьник со своими общими фразами, которые ты не понимаешь.
Мимо
не то чтобы "надо", но ничего этому не мешает так-то. Железячники обычно так себе программисты и не понимают, что во всем остальном ойти конструкции типа ledGPIO.toggle() - околостандарт индустрии, и не просто так.
чо б и нет-то? На плюсах если не хуярить абстрактных классов, оверхеда нет.
> ledGPIO.toggle()
Так это уже ооп чтоли, лол? Ну тогда я ниибаца ооп программист получается, а то я думал что ооп это всякие паттерны и прочая абстрактная залупа.
Вообще, где-то читал, что это не ооп, а написание в объектном стиле. Ну и так щас большинство и пишет вроде, только совсем деды с деменцией не могут привыкнуть
>Так это уже ооп чтоли, лол?
лолда.
>а то я думал что ооп это всякие паттерны и прочая абстрактная залупа.
можно долго разглагольствовать про полиморфизмы хуизмы, но собственно базовая база - объект со свойствами внутри и (изменяющими свойства) методами, торчащими наружу.
>так щас большинство и пишет вроде
среди железячников-то? не-а.
Ну хуй знает, мб от железячника к железячнику, но на моей госпараше примерно каждый молодой спец знает про понятие объекта. Хотя если открыть старые проекты 5-10 летней давности то там пиздец, да. Но там ещё и на чистых сях всё написано.
и вместо while(1) юзают goto
>на моей госпараше примерно каждый молодой спец знает про понятие объекта
если им не надо воевать с дидами по поводу использования сего знания - мое увожение такой параше.
Так-то вещь неплохая. Но зачем мне плодить объекты, если я все равно буду использовать их в единичном экземпляре?
Вот есть у меня объект uart модуля, например. Ну написал я к нему разных методов, но что толку, если у меня всего 1 уарт в контроллере и я буду работать с 1 единственным объектом? С таким же успехом я мог всё это просто в функции обернуть в отдельном файле.
>мог всё это просто в функции обернуть
А если будет два уарта, то объекты точно так же не нужны, можно (и нужно) в эти функции передавать адреса периферии всего лишь.
>Но зачем мне плодить объекты, если я все равно буду использовать их в единичном экземпляре?
>С таким же успехом я мог всё это просто в функции обернуть в отдельном файле.
>Но зачем мне плодить функции в отдельном файле, если я все равно буду использовать их в единичном экземпляре?
>С таким же успехом я мог всё это просто нахуярить функциями в main.c.
>Но зачем мне хуярить функции в main.c, если я все равно буду использовать их только там?
>С таким же успехом я мог всё это просто копипастить по месту применения.
ну ты понел да? Читабельность, структурирование, повторное использование, все дела.
>>512219
> Это я кривожопый и неопытный или ООП насрало мне в штаны?
это. Если ты особо не загоняешься абстрактными классами, то конпелятору пахую на твои классы, объекты и методы, он не будет в рантайме делать ничего сверх необходимого.
для понимания, если ты совсем никак - утрировано, при компиляции вот тот самый ledGPIO.toggle() сначала станет чем-то вроде GPIOClass_T.toggle(ledGPIO), а потом вообще заинлайнится. Все компилируемые языки - синтаксический сахар над ассемблером(с)
>А состояние где хранить?
Ну сделай структуру со всем этим и передавай указатель.
>Допустим индекс строки передаваемой?
А если пока передается предыдущая строка захочешь ещё раз дёрнуть метод передачи строки? Получается нужно ещё внутрь пихать fifo, в который складывать указатели на передаваемые строки. Может лучше сразу все символы в fifo пихать? Тогда ещё и о времени жизни переменных можно не думать.
Необходимости в цпп с классами тут конечно нет и код от классов короче и читабельнее не станет.
Зачем вручную строить объект если можно использовать встроенный?
Твои рассуждения носят субъективный характер.
А где взять последнюю прошивку в виде hex или bin файла?
Запилил такую последовательность при инициализации:
FLASH->OPTKEYR = 0x08192A3B;
FLASH->OPTKEYR = 0x4C5D6E7F;
while (FLASH->SR & FLASH_SR_BSY) __NOP();
FLASH->OPTCR |= 0x0000FF00;
FLASH->OPTCR |= FLASH_OPTCR_OPTSTRT;
while (FLASH->SR & FLASH_SR_BSY) __NOP();
Теперь не могу прошить контроллер, выдает ошибку пикрелейтед.
Че делать? Я запорол камень?
Странно, но все сидят на чистой Сишечке, ну в крайнем случае с небольшой дозой крестиков, А как же Rust, он же "ржавый"?
Да, не спорю, порог вхождения высокий, компилятор наровит анально покарать за любую малую провинность, но зато такие няшные либы в репозитории, одна единая система сборки без плаясок вокруг make c ебанутым синтаксисом, C-совместивая отладка через GDB, Freertos - да позалуйста! Вообщем я плотно подсел на этот кукан.
Слишком большой зоопарк разных микрух, тяжело наверное в каждую завести раст. На той же госпараше кресты только-только появляются.
Я с ужасом предвкушаю, что одним прекрасным январские днём придет ко мне начальник и скажет примерно следующее:
СТМок l433 больше не будет, вообще, никак. Так что живо нашел нам новый скрепный камень и переделал все проекты на него или на мороз, причем вся контора. Выбирай.
Тоже приглянулся раст, но когда попробовал сделать на нем что-то более-менее внятное на стмке, понял что реализовывать проекты хотя бы с обычным сенсорным дисплеем гораздо удобнее и быстрее на обычном C из-под кейла или куба.
Тык ты залочил, теперь оно не может стереть. Нужно анлокать контроллер.
Я делаю это примернго так:
1. запустить openocd с нужным конфигом, удостовериться, что оно подключилось.
2. arm-none-eabi-gdb
`(gdb) target remote :<port>`
`(gdb) monitor stm32f4x unlock 0`
Должно написать что-то вразумительное, типо ок, сделалось.
3. Передернуть питане СТМки и тогда она будет шиться как раньше.
>Тык ты залочил, теперь оно не может стереть.
А почему залочивание ЧТЕНИЯ мешает стиранию (ЗАПИСИ)?
Стоит ли выпаивать попадающиеся на всяких платах частотников, контроллеры RISC/CISC? Или се наладится и снова в Россию хлынут поставки занедорго?
https://mik32.ru/
ждем в этом году.
Писал им, сказали что испытания делают и в середине года будет ясно, тогда на потребительский рынок выбросят
Выглядит неплохо для начала, но больно мало инфы пока и периферии. Не хватает can, mil-std-1553, ethernet, adc/dac хоть каких-то.
Согласен, без CAN выглядит как МК для мелких поделок, во что-то больше, с несколькими платами такой ставить ну такое.
А еще странные пропорции ОЗУ и ПЗУ
>им можно прошить только камни STM32
STM32 + STM8. Впрочем, зависит от прошивки, на китайском говне может быть и без поддержки STM8
>J-link, им шьется любой arm камень
J-link это переходник usb-jtag, не заточенный под конкретный камень, а дальше всё зависит от софта на компе
>если покупать, то лучше сразу взять ST-link
китайской подделки за 200р для начала хватит, а потом сам поймешь, что именно тебе надо
>как его прошивать стлинком, через Cube или ещё как-то
- cubeide, если кодишь сразу тут же и отлаживать, но может ругаться на поддельные камни
- STM32CubeProgrammer для прошивки hex
- flash loader demonstrator для прошивки через uart
если у тебя своя ide, гугли конкретно по ней
Потому что у инструкции str второй операнд это регистр+смещение, причем смещение небольшой разрядности. А ты один только абсолютный адрес туда запихал.
Спасибо за ответ. CPUlator пойдёт для начальной практики на ASM ?
Нажил контроллер i.MX283, хотел скачать футпринт на сайте NXP, а оно не пускает. Говорит, что россиянчикам низзя. Есть кто из дружественной Украины, кто сможет скачать и выложить куда-нибудь?
Возможно, они сотрудники госпараш. Нам вчера от Микрона рассылка пришла как раз про этот контроллер. Больно сырая разработка пока что.
>>519236
Анончик, спасибо огромное за труды, но это он дает скачать без проблем. Интересует https://www.nxp.com/webapp/Download?colCode=IMX28REFSCH&appType=license
Тут необходим зарегестрированный акк. У меня есть, но блокирован из-за российского местонахождения.
Это самое. Внезапно осознал, что в РФ пока можно незадорого (1-2к/шт), прикупить контроллеры ARM9/ARM11 с охуевшими частотами, кучей GPIO и прочими ништяками. Пара трудностей: BGA+многослойная печатка и нихуя не понятно в чем кодить. Пока докопал, что под них пишут на Линупсе или Вин СЕ. А если мне не нужно столь ресурсоемкое? Можно ли как для стм, просто типа FreeRTOS ебашить?
Ау, наносеки? В чом погроммировать эти шикарные контроллеры?
Там же навроде с зажатым ресетом коннектятся как выводы программирования. Хотя могу ошибаться. Кури RM на камень
>Там же навроде с зажатым ресетом коннектятся как выводы программирования.
Я ниче не нажимаю. Ресет никак не соединен с программатором.
>Я ниче не нажимаю.
А надо будет. В ST-LINK Utility выбираешь пункт Connect under reset и коннектишься с зажатым ресетом к своему камню
Приконнектился к ADUC7601 с помощью китайского J-Link. В честно купленном на торрентах Keil µVision3 V3.90 RealView MDK-ARM Version 3.80a, скомпилировал прошивку из честно скачанных на сайте AD примеров и загрузил в микроконвертер.
Завидуете, неудачники?!
Хотел поменять тип elf файла, чтобы в протеусе поиграться, а он ругается. Причем если поставить формат по умолчанию -dawrf-4 он один хер ругается.
Где в STM32CubeIDE 1.7.0 задать формат elf файла понятный протеусу?
Контроллер STM32F103C4Tx
НИИЭТ обещает выкатить 4 risc-v к 2024. У них уже были хорошие cortex-m4f 1921ВК с нормальной периферией.
У этого НИИЭТа только на бумагах все четко, а по факту даже на 1921 проблемы с поставками, наверное сказывается перегруденность, но это пиздец все равно.
Звонил им в Воронеж, у них минимальный срок поставки 180 дней, и это минимальный! Там по факту больше скорее всего будет.
Вы заебали! Скажите уже в чом компилить для ARM926EJ-S?
>gcc написали!
Там же страшная, командная строка!!! Ты предлагаешь мне начать изучать "Make-файлы на селе"?
>ide посоветуйте под stm32.
Qt creator вместе с https://github.com/ObKo/stm32-cmake или можно крякнутый clion вместе с теми же симейеовсуими скриптами.
>До этого только esp-шки в arduino studio гонял.
Тогда можешь продолжать пользоваться той же ардуиной.
О, отлично, просто идеально, я как раз с++ гоняю почти только в qtcreator.
Доброго дня, подскажешь как это настроить?
Я попробовал раза три, выпадают ошибки, который по этой инструкции не подразумеваются, хотя отдельно все компоненты работают (кроме компилятора, который я не могу проверить), вчера на работе вот прям с восьми утра и до отбоя сидел над этим. То на файл ld жалуется, что его таргетом должен быть файл .._name.elf - и не ясно как к нему цель указывать, то (чаще всего) "not able to compile a simple test program"
Я бы сформулировал вопрос как "Какие минимальные действия я должен сделать, что скомпилировать hello world?"
Вот прям один файл из консоли без cmake/make превратить в бинарник. Cmake уже потом доделаю.
Итого за сегодня:
- работает CubeIDE
- работает IAR
- работает Arduino IDE
- не работает всё что угодно с CMake или с этим "arm-none-eabi"
Если не получится, завтра буду разбирать как иде выше компилируют, наверняка там внутри тот же arm-none-eabi
>Вот прям один файл из консоли без cmake/make превратить в бинарник.
Подожди, завтра тебе напишу. Только чем тебя не устраивает Arduino IDE? Тем более оно куда более популярно в /ra/ чем вот это все бессмысленное красноглазие.
>>551694
>наверняка там внутри тот же arm-none-eabi
Не везде, в iar их собственный компилятор.
Буду очень признателен, если напишешь.
>Только чем тебя не устраивает Arduino IDE?
1. В ней без дополнительных действия я не смогу скомпилировать прошивку с работы где почти 40 отдельных файлов - переписать можно, но это я неделю буду делать пытаясь понять как обращения к регистрам переписываются в ардуине, а я во-первых вообще не должен этим заниматься по хорошему (хотя тут и говорят, что мол если надо - сиди делай хоть две недели), во-вторых есть другие задачи, интереснее.
2. Оно постоянно что-то загружает и индексирует в углу какую-то хуету, по 15 минут после любого действия и грузит процессор, ещё и ошибку сыпет. Открыть два проекта по нормальному нельзя. Не уверен что внешний вид настраивается, редактировать там программу больше чем из одного файла очень не хочется.
3. Хочу работать в привычной ide, это и эффективнее, и удобнее.
попробуй конпелировать с помощью arduino-cli
>Подожди, завтра тебе напишу.
Написал минимальный пример. https://pastebin.com/CFrgkvjA
Это для линуксов, для винды будет аналогично, только слэши в другую сторону.
Если нужно, то могу показать пример с симейком.
-c http.sslVerify=false потому что на работе сетевой антивирус.
Для винды нужно дополнительно указать -G "Unix Makefiles" и возможно задать CMAKE_MAKE_PROGRAM
Анон, спасибо огромное, прям от души. Даже захотелось завтра пораньше приехать на работу, настроить там.
Первое заработало сходу, второе через три минуты. Ну, по крайне мере на домашнем ноуте.
А я часами долбил примеры с гитхабов, и всюду возникали ошибки, которых не должно было быть - и решение которых не имело отношения к самой программе со светодиодом и выходило далеко за его рамки, будто там cmake и компилятор на 20 версий отличаются и не совместимы.
В четверг-пятницу тыкнули на другую задачу ездить в другое место (и обратно приезжал на два часа позже вообще без сил), вчера по дому делал что-то, а сегодня только собрался с силами и решил дома в нормальных условиях поразбираться.
Есть один RP2040-mini. Попал в руки час назад.
Попробовал помигать светодиодиком, думая, что он на 16-м пине, как нарисовано в пинауте. Но светодиодик не загорается совсем.
Это потому что я жопорукий или светодиодик дохлый?
Скетчь товно прошилась. Проверочное слово "GOWNO" поступает в ком-порт.
Voprosique-ов стало больше.
Смотреть на даташит на светодиод или даташит на RP2040-mini в том месте, где про светодиод?
Что я там должен увидеть?
Молодец, анон!
Микроконтроллеры STM32 не пропали из магазинов, они есть в наличии. Однако цены на них действительно выросли.
Как я понял есть:
1 - run-mode - обычный.
2 - low-power-run-mode - то же самое что и первое, но с заниженной частотой и с регулятором в режим низкого потребления, что позволяет получить намного лучшее число μA/MHz, чем если просто поставить 60 кГц.
3 - sleep-mode - всё кроме процессора работает, все таймеры и периферия.
4 - low-power-sleep-mode - аналогично 3, но с заниженной частотой, быстрые таймеры отваливаются и надо flash отключить и потом включать.
5 - stop-mode - работает только LSI/LSE, устройство может выйти из этого режима по прерыванию от RTC, LPTIM, EXTI и ещё некоторых. Большая часть периферия не работает.
6 - standby-mode - даже оперативка не сохраняется, по сути устройство выключено и у него полтора с половиной способа проснуться (RTC, IWDG и два пина), механизм чтобы на Марсе передатчик раз в месяц включать на две секунды.
Далее по регистрам и флагам:
PWR_CR_LPSDSR - регулятор в энергосбережающим режиме.
PWR_CR_LPRUN - нужно для low-power-run-mode, вместе с предыдущим флагом и заниженной частотой.
PWR_CR_ULP - отключает опорное напряжение, датчик температуры и прочее в некоторых энергосберегающих режимах. К переключениям режима отношения не имеет, просто настраивает режимы, как
SCB_SCR_SLEEPDEEP - вместо sleep падать в stop-mode (почему это не флаг в регистре PWR_CR и почему в Reference Manual не описан этот регистр?)
PWR_CR_PDDS - вместо stop-mode падать в standby-mode
RCC_APB1SMENR/RCC_IOPSMENR/.. - настройки периферии для sleep-mode/low-power-sleep-mode, можно продублировать RCC_APB1ENR/RCC_IOPENR, можно что-то не включать урезав функционал в sleep-mode?
При вызове __WFI() устройство падает в режим sleep/stop/standby в зависимости от указанных выше флагов.
Пожалуйста, поправьте в каких местах я ошибся?
---
Ещё вот картинка, пробую по прерыванию LPTIM выйти из stop-mode.
В итоге без SCB_SCR_SLEEPDEEP всё работает как надо. А с SCB_SCR_SLEEPDEEP прерывание точно работает (led_red отрабатывает в прерывании и значение lp_time изменяется, но в основной функции __WFI() так и продолжает висеть бесконечно. То есть устройство просыпается, выполняет две строчки кода в прерывании и засыпает снова? При этом есть код пробуждения по RTC, он работает (вместе с кодом LPTIM перестаёт работать, то есть вот то что я написал блочит пробуждение по RTC по непонятным мне причинам)
Ещё я не понимаю смысл регистров RCC_IOPSMENR/RCC_APB1SMENR/.. и других с "SM". У меня LPTIM отлично работает во время __WFI() даже если ничего не писать в RCC_APB1SMENR, хотя это вроде бы режим сна, а вот без флага в RCC_APB1ENR не работает.
Как я понял есть:
1 - run-mode - обычный.
2 - low-power-run-mode - то же самое что и первое, но с заниженной частотой и с регулятором в режим низкого потребления, что позволяет получить намного лучшее число μA/MHz, чем если просто поставить 60 кГц.
3 - sleep-mode - всё кроме процессора работает, все таймеры и периферия.
4 - low-power-sleep-mode - аналогично 3, но с заниженной частотой, быстрые таймеры отваливаются и надо flash отключить и потом включать.
5 - stop-mode - работает только LSI/LSE, устройство может выйти из этого режима по прерыванию от RTC, LPTIM, EXTI и ещё некоторых. Большая часть периферия не работает.
6 - standby-mode - даже оперативка не сохраняется, по сути устройство выключено и у него полтора с половиной способа проснуться (RTC, IWDG и два пина), механизм чтобы на Марсе передатчик раз в месяц включать на две секунды.
Далее по регистрам и флагам:
PWR_CR_LPSDSR - регулятор в энергосбережающим режиме.
PWR_CR_LPRUN - нужно для low-power-run-mode, вместе с предыдущим флагом и заниженной частотой.
PWR_CR_ULP - отключает опорное напряжение, датчик температуры и прочее в некоторых энергосберегающих режимах. К переключениям режима отношения не имеет, просто настраивает режимы, как
SCB_SCR_SLEEPDEEP - вместо sleep падать в stop-mode (почему это не флаг в регистре PWR_CR и почему в Reference Manual не описан этот регистр?)
PWR_CR_PDDS - вместо stop-mode падать в standby-mode
RCC_APB1SMENR/RCC_IOPSMENR/.. - настройки периферии для sleep-mode/low-power-sleep-mode, можно продублировать RCC_APB1ENR/RCC_IOPENR, можно что-то не включать урезав функционал в sleep-mode?
При вызове __WFI() устройство падает в режим sleep/stop/standby в зависимости от указанных выше флагов.
Пожалуйста, поправьте в каких местах я ошибся?
---
Ещё вот картинка, пробую по прерыванию LPTIM выйти из stop-mode.
В итоге без SCB_SCR_SLEEPDEEP всё работает как надо. А с SCB_SCR_SLEEPDEEP прерывание точно работает (led_red отрабатывает в прерывании и значение lp_time изменяется, но в основной функции __WFI() так и продолжает висеть бесконечно. То есть устройство просыпается, выполняет две строчки кода в прерывании и засыпает снова? При этом есть код пробуждения по RTC, он работает (вместе с кодом LPTIM перестаёт работать, то есть вот то что я написал блочит пробуждение по RTC по непонятным мне причинам)
Ещё я не понимаю смысл регистров RCC_IOPSMENR/RCC_APB1SMENR/.. и других с "SM". У меня LPTIM отлично работает во время __WFI() даже если ничего не писать в RCC_APB1SMENR, хотя это вроде бы режим сна, а вот без флага в RCC_APB1ENR не работает.
>Только C/C++, IAR/GCC
Я кстати сгорел от IAR, и кое-как написал Cmake, чтобы из qtCreator или батником компилировать и прошивать (сейчас я пишу в qt, компилирую и прошиваю через IAR/батник, что капец как неудобно). И в общем IAR собирает с максимальной оптимизацией в 36 кб, а с оптимизацией по размеру в 30 кб (в коде куча отладочных snprintf с текстом), gcc собирает с -Os (и всякими specs nano, из-за которых весь код в предупреждениях) в 60 кб, а с -O2 в 140 кб. В наличии всего 64 кб. Очень расстроился, что у gcc лапки и -ffunction-section не помогает, размен бинарника в 4 раза больше это шутка какая-то, учитывая что кода мало и логику работы программы я на одной странице опишу в деталях.
А IAR ещё прям пишет, что dbldiv (деление 64-битных с плавающей запятой) занимает 314 байт, и так по каждой явно или неявно используемой функции. Считаю, что это прям очень полезная информация от компилятора, я 15 кб лишних, увидев что компилятор что-то лишнее имплементирует.
Если кто-то знает как через iarbuild собрать проект - буду очень признателен. У меня из ide компилируется, из iarbuild не видит папку с CMSIS. В идеале вообще сделать чтобы CMSIS лежал во внешней по отношению к проекту папке и цеплялся так же как на gcc через Cmake, но я не знаю как это скормить в IAR ни в самое ide, ни в параметрах iarbuild, вариант где в подпапке проекта лежит 10-15 файлов CMSIS тоже приемлимый.
Ну, или придётся искать где-то лог (я не нашёл) с каким параметрами и как вызывается компилятор IAR, враппер написать, который будет транслировать параметры и логгировать их. Причём qtCreator даже видит компилятор и понимает что это, но я не смог найти описание параметров компилятор и линковщика. По этой части тоже не откажусь от помощи, в общем. В 4 раза разница по размеру - это петрушка.
Номера белым подписанные "стадии" на картинке на 1 сбились походу, только сейчас заметил что там низкий и высокий уровень не совпадает с 0/1. Возможно и собака в этом зарыта, что один раз прерывание всё-таки срабатывает, а я какой-то флаг забываю очистить, например PWR_CR_CWUF записать сбросив PWR_CSR_WUF. Ладно, уже завтра проверю, и так сижу 14 часов с утра над разными штуками, надо поесть хотя бы.
Алсо, есть свои под линейку арм, а под другие мк?
Программатор нужен, чтобы через него залить бинарник на чип. Вроде как без него нельзя похелловордить (только если в симуляторе каком), так как результат не увидишь.
Ты меня не слушай (тут просто нет никого с некоторой вероятностью, лучше хоть я спровоцирую кого-то ещё написать правильнее и более полезный совет), но я посоветую найти пиратку jlink на рутрекере и вот эту приблуду купить по цене двух банок энергетика. Можно писать скрипты для прошивки (и вызывать их из любой ide), указывая как и что перепрошить. Там есть не подпаянный rst-пин (возможно его можно подпаять и он даже будет работать, я пока не пробовал).
Отладкой не пользуюсь, не очень понимаю как она должна работать с прерываниями, но подключиться к плате и выполнять строчки кода по одной или до какой-то требуемой можно. Может быть на оригинальным jlink нормально отлаживаются прерывания или есть ещё какие-то более расширенные функции, не подскажу.
>Программатор нужен, чтобы через него залить бинарник на чип. Вроде как без него нельзя похелловордить (только если в симуляторе каком), так как результат не увидишь.
Это не так. Сейчас наверное во всех микроконтроллерных армах есть бутлоадер, через который можно загрузить как минимум через uart, а где-то и usb.
>jlink на рутрекере
Не стоит. Бинарники патчить там не нужно, а только лишь сгенерировать ключи по серийнику программатора, с чем справляется rdikeygen.exe, а сам инсталлятор целесообразнее взять свежий с сайта сеггера.
Нашёл ещё вот такую таблицу.
Тут сказано что нужно именно любую EXTI линию, а просто прерывание от LPTIM не указано. Я её искусственно вызываю по таймеру. Оба прерывания работают и линию переключают, но __WFI() так и продолжает висеть. Как выйти то из прерываний и продолжить выполнение после WFI?
Формула для периода всё такая же как и в обычных таймерах (частота)х(ARR+1) (вроде бы, явно ни в даташите, ни в RM я её не вижу, просто на частоту смотрел сам), а по какой-то причине ARR равным 0 ставить нельзя именно для LPTIM. На самом деле оно как-то частично работает, прерывания то обрабатываются в нужные моменты, но какая-то часть памяти в кашу превращается, если посмотреть на регистр LPTIM1->ISR, то там все остальные биты включаются, в том числе по выключенным прерываниям. И вот написано, что не надо 0 ставить.
Не самые полезные десять часов жизни, лол. Хотя отчасти наоборот более полезные, чем когда делаешь и всё получается, так что это плюс-минус рутина без нового опыта.
А ещё перебирая код и тестируя от какой строчки кода всё ломается нашёл что ещё поотключать, выиграв ещё 0.03 мА потребления, это почти -20% энергопотребления в среднем.