Кто любит RISC в жизни, заходим, не стесняемся.
Чт янв 30, 2020 11:50:34
Недавно начал изучать ARM, в связи с этим возник вопрос - совместимы ли средства отладки одного производителя с чипами другого?
К примеру, у меня имеется в наличии программатор/дебагер Atmel ICE, который позволяет работать с ARM чипами Atmel (Ну, теперь уже Microchip)... А подойдет ли он для ARM чипов скажем STM или NXP?
Я как бы хочу все унифицировать и по возможности уйти от ПО и средств разработки производителей и использовать их только как вспомогательные средства. В данный момент использую GNU Toolchain для ПО. А вот как быть с железом? Не покупать же под каждого производителя свой программатор/отладчик... Или придется?
Чт янв 30, 2020 12:23:59
Недавно начал изучать ARM, в связи с этим возник вопрос - совместимы ли средства отладки одного производителя с чипами другого?
К примеру, у меня имеется в наличии программатор/дебагер Atmel ICE, который позволяет работать с ARM чипами Atmel (Ну, теперь уже Microchip)... А подойдет ли он для ARM чипов скажем STM или NXP?
Встречный вопрос: зачем начинающему сразу армы от Atmel, STM и NXP? Тем более если у тебя уже есть AVR и STM8, причем этот STM8 подключен к полтора баксовому ST-Link(что видно на скрине в твоем старом сообщении) поддерживающем и STM32... А вообще даже этот ST-Link поддерживается не во всех средах разработки под STM32, так что хотя аппаратно отладчики от Atmel должны уметь работать с любыми кортексами, но в большинстве сред, если не во всех, они все равно работать не будут.
Чт янв 30, 2020 13:45:30
PombI4 писал(а):Не покупать же под каждого производителя свой программатор/отладчик...
У вас не найдется 100 рублей на ST-Link?
https://aliexpress.ru/wholesale?SearchT ... =price_ascPombI4 писал(а):В данный момент использую GNU Toolchain для ПО.
Без IDE? Чем шьете и отлаживаете? Или только собираетесь? На хабре недавно вышла статья, посмотрите если хотите.
https://habr.com/ru/post/485514/В ней про прошиватель и отладчик. Но нужен ST-Link.
Чт янв 30, 2020 14:26:39
Я не писал, что я начинающий. Я написал, что начал изучать ARM. Это как бы слегка разные вещи
...
Давно на работе кодил под Freescale'овский проц, под Freescale'овским же IDE. Но то было давно.
Дома накопилось много чего от AVRок, в т.ч. тот же Atmel Ice. Но Атмел стал негуманен по цене.
Поэтому решено было переключить внимание на STM. В т.ч. и на ARM. Соответственно есть кое что и для него. Но поддерживать знания в актуальном состоянии для нескольких разных IDEшек, это накладно. Хочется золотой середины и универсальности.
То же самое и с железом.
Вопрос не в 100 рублях, а в обилии платохлама на столе и в шкафу. Зачем использовать разные инструменты, если можно пользоваться одним.
В качестве IDE использую Eclipse. Всякие конфигураторы/профилировщики от производителей по возможности. Но есть желание минимизировать их.
В качестве доступного железа экспериментирую пока на Raspberry без ОС. В шкафу лежит Arduino Due и STM Nucleo F413ZH...
Чт янв 30, 2020 15:36:03
PombI4 писал(а):В качестве IDE использую Eclipse.
Наверное уже привыкли к неспешности IDE?
Чт янв 30, 2020 16:05:03
Есть микроконтроллер gd32f130c8t6, как понял под них можно писать в любой среде для stm32. Проект конфигурирую в кубе обычно. Как быть с gd32? Какие есть подводные камни при работе с gd32?
Чт янв 30, 2020 16:18:39
daaar, прошить его st-link'ом при помощи утилиты st-flash точно не удастся без патча утилиты. Я уже пытался и с GD32 и с CS32 (подсунул, зараза, китаец в "синей таблетке" вместо STM32 эту дрянь). В итоге плюнул, выпаял и выкинул гадость, а вместо нее впаял STM32.
Чт янв 30, 2020 17:48:37
Там вроде какие-то резисторы со 100 кОм меняют на поменьше и все начинает прошиваться... ? Где-то читал про это.
Чт янв 30, 2020 18:33:11
я столкнулся (c CS32) только с тем что памяти в нём ровно столько, сколько заявлено (а не в 2 раза больше как у стм32ф103с8т6) хотел в паяльник вставить его - код считанный с STM в CS не влез... (шил штатным стлинком) прошиться прошился, но верификация не прошла (выше заявленной памяти закономерно читаются нули).
Пт янв 31, 2020 21:28:30
То есть танцы с бубном не обязательны?
Пн фев 03, 2020 22:46:03
STM32F103 вопросик по таймеру TIM1
может кто объяснить такой момент с таймером TIM1 - RM0008 стр.328 Figure 95
сигнал на линиях OC1,OC2,OC3 показан пачками - откуда берется эта "нарезка", начало и завершение импульса(пачки) - вроде понятно от куда, но почему импульс "нарезан", почему не такой же как OC1N,OC2N,OC3N ?
поспешил с вопросом
прочитал свой же вопрос - и кажется сообразил: "нарезается" содержимым ARR и CCR1 таймера TIM1.
ну вот и зацепочка, голову ломаю - как выводить определенное кол-во импульсов (больше 255).
- Вложения
-
- F95.jpg
- (85.78 KiB) Скачиваний: 174
Вт фев 04, 2020 23:18:02
Обьясните неопытному. Я до этого только в иаре работал, там с режимом все было проще - включаешь С или С++ и оно весь проект компилит в выбраном режиме.
Но в эклипсе все не так. Ситуация такова, что мейн у меня .с, а поскольку до этого проект в иаре писался с использованием с++ классов, то работу с ними, в часности инициализацию, пришлось вынести в отдельную функцию в отдельный .срр файл.
Так вот - программа из мейна переходит в с++ инит, а вот назад вернуться не может - после ретурна исполнение улетает черт знает куда.
Думал дело в коде - закоментил все, осталась пустая функция, и ситуация повторяется.
Ср фев 05, 2020 00:24:00
А в хидере с определением cpp-шного init-а, который подключается в main.c, есть extern "C" сотоварищи?
Ср фев 05, 2020 06:45:02
у срр-шного файла есть hpp-шный файл, где объявления функций обрамлены extern "C". этот хидер уже подключен в .с файл.
я этот прием линковки и не применял никогда: видел, но иару было фиолетово - он не смотрит на расширение файла и компилит все в С++, а куб себе спокойно работает с .с файлами. А тут с эклипсом все по взрослому. Я в начале и не обрамлял ничего и у меня не хотело собираться. Потом вспомнил про эту штуку, по шаблону добавил - собралось, думал все ок, но не заработало. Вчера вечером уже начал изучать вопрос, но после командировки глаза слипались. Если дело определенно в этой стороне, ну ок тогда - подтяну теорию, глядишь разберусь.
Ср фев 05, 2020 07:14:11
Не страдай ерундой. Переводи весь проект в .сpp. С++ компилятор чисто С-ный код скомпилирует в лучшем виде. Стартап можешь в .с оставить, тогда перед обработчиками прерываний extern "C" поставишь да и всё..
ЗЫ: достаточно легко сделать, чтобы всё компилировалось и gcc, и iar, и даже keil.
Ср фев 05, 2020 17:57:28
А со стеком все в порядке? А некоторые системы под стек дефолтно дают мало места...
Ср фев 05, 2020 23:02:12
та на стеке и не хранится ничего. все данные глобальные - либо буфферы, либо экземпляры класов. да и функция пустая. не должно переполняться. я к тому же пока не разбирался как здесь заполнение стека проверять (в иаре то попроще с этим - и граф шкала есть, да и предупреждение он выдает).
по совету знакомого, я сделал пустой проект с простенькой програмкой и смоделировал похожую ситуацию вызова внешней .срр функции - ничего не вывалилось. значит линковщик таки работает правильно и причина в чем-то другом.
проверял на дискавери, оригинальная железяка дома, к семи доберусь и буду ставить эксперименты.
Добавлено after 4 hours 41 minute 53 seconds:
ну я хз котаны - вместо того чтобы делать новый проект из кубовского файла, я создал чистый прямо в куб-идэе и руками перезабил всю инфу. сгенерил код, перенес все те же юзер файлы, скопипастил куски юзер кода и оно не падает.
пока что спортивного интереса копаться в чем же разница между проектами нет - может косяк в их коде, может у меня что-то было. Если повторяться не будет то и хрен с ним, а если будет то потрачу денек.
Чт фев 06, 2020 07:34:56
Ярослав555 писал(а):сгенерил код, перенес все те же юзер файлы, скопипастил куски юзер кода
Я в кубическом main() держу ровно две строчки (чтобы меньше копипастить).Между /* USER CODE BEGIN Init */ и /* USER CODE END Init */ вписываю что-то вроде My_Init(); и, между /* USER CODE BEGIN 2 */ и /* USER CODE END 2 */ - My_main(); причем, не уведомляя кубики, что из этого My_main() я не вернусь.
А, нет, три: еще между /* USER CODE BEGIN Includes */ и /* USER CODE END Includes */ ставлю #include "My_Header.h", в котором, в частности, описаны и My_Init(); и My_main();
И все. сгенерив новый кубический проект, по-простому, добавляю эти три строчки, и моя разработка подключена. А кубики - они такие. Однажды, после очередного обновления, посыпались какие-то ошибки. Перегенерил проект - все ОК. Оказалось, новый CubeMX криво воспринимал проект из-под старого. Еще что-то было... Да и перенести проект на новый камень - это самое простое решение - генеришь его заново, добавляешь эти самые 3 строчки, и вперед! Да, пару раз понадобилось что-то дописать куда-то в прерывающие программы, тоже вызовы своих программ. Чаще всего у кубических программ обслуживания прерываний заявлен коллбэк и его хватает, но где-то его не оказалось.
Добавлено after 22 minutes 14 seconds:Да, и где-нибудь на видном месте (например, в начале My_Header.h), надо указать комментарием, в какие кубические файлы надо вписывать свои вызовы.
Чт фев 06, 2020 08:56:26
А вся инициализация периферии, обработчики прерываний - тоже свои, или сгенерированные?
P.S. А, сразу не увидел оговорку про прерывания. Точек связи сгенерированного кода со своим всё же больше трёх.
Чт фев 06, 2020 11:25:11
Точек связи сгенерированного кода со своим всё же больше трёх.
Почему? Колбеки редефайнятся в своем файле и возможно даже править не приходится.
По поводу мейна - у меня как-то сложилось что в мейне только начальная инициализация и запуск системного таймера. Дальше все остальное происходит через вызовы этого системного таймера. Мои объекты имеют функцию poll - в ней находится большой свич с описанием действий и переходов, рискну назвать это машиной состояний. Иногда даже две таких функций - быстрая и легкая (например простое сравнение) и медленная (математически нагруженная). Такая архитектура позволяет асинхронную работу частей программы, никто никого не ждет - есть состояние значит переход на новое состояние, нет - ретурн. Разные обьекты ставятся на разные таски - кто-то на 1 мС, кто-то на 100 мС.
Максимум что попадает в цикл мейна - мигание светодиодом, причем в последнее время я туда пакую софтверный шим для этого светодиода. По плавности мигания можно увидеть насколько ровно идет программа. Главный цикл имеет наинизший приоритет и если ему совсем времени не остается, значит и какой-то таск может захлебнуться. Для моих задач хватает, не атомные реакторы строю.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.