Comments 18
А до написания программ, автор не пробовал посмотреть например на файл startup_stm32f103xb.s,
поставляемый произодителем (ST Electronics) и являющийся как раз файлом правильной
инициализациеи контроллера на ассемблере?
поставляемый произодителем (ST Electronics) и являющийся как раз файлом правильной
инициализациеи контроллера на ассемблере?
+6
Как выяснилось это было зря, прежде всего потому, что таймеры слишком быстрые для такого рода задач.
Не стоит вводить людей в заблуждение, с таймерами у STM всё отлично, надо внимательно читать даташит. Есть счетчик таймера, есть предделитель. Достичь секунд задержки — запросто.
+4
ещё там есть RTC, то есть таймер часов реального времени
0
Как раз про них я и подумал, что следовало бы настроить прерывания по RTC. Я настроил по TIM2. Возможно что-то настроил не правильно, но добиться задержки в секунду по нему у меня не получилось.
0
Если цель — обучение, лучше попробовать все варианты, узнать фишки таймеров и т.д.
Как уже выше сказали, сделать можно на любом таймере, вот в этом и надо разобраться.
Как уже выше сказали, сделать можно на любом таймере, вот в этом и надо разобраться.
0
спасибо большое за очень хорошую статью!
вот бы мне когда нибудь так кодить на асме!
а не пробовали замахнуться и сделать реальный проект на асме?
например что нибудь полезное и реально нужно всем
что то что может во всю показать силу и практичность использования асма?
например сделать самый шустрый и компактный загрузчик
это очень полезная тема каждому второму микроконтроллерщику.
например вот тут (ссылка) есть интересный проект загрузчика
загрузчик простой, только позволяет обновить прошивку и не более,
делов там такому мастеру как Вы явно на пару дней.
и ещё в нём много минусов которые прямо рождены чтоб показать всю мощь асма:
— он написан на C99 и далеко не самым крутым кодером, да что уж говорить, он там даже switch-case не использовал и не изпользует вызов фукций по номеру из таблицы!!! хотя есть немало команд внутри, и их обработку так и проситься свести если не в таблицу, то в switch-case, одни сплошные ифы, брррр!
— он использует SPL — либу для работы с переферей от производителя, она монстроидальная и слишком абсрагирована
— так же он использует вызовы библиотек языка, тоже ещё тот монстр
тем не менее есть и плюсы:
— этот загрузчик работает в 10 раз быстрее чем штатный для стм32Ф4 а он прошивается реально очень долго.
— сделана неплохая программа для ПК с детализацией всех логов и ответную часть для пк писать не надо
— загрузчик использует механизм гарантированной доставки взятый из TCP с «окнами» инфой о позиции, ретрансмисиями в случае сбоев и способен работать даже если уарт изредка глючит — всегда доведёт дело до конца.
— есть немало людей которые его используют и он очень востребован
— автор с радостью отвечает на вопросы и сделал полный гайд на хабре, включая детальное описание протокола на русском.
— есть исходный опорный алгоритм на я бы сказал очень примитивном си
Я уверен такой мастер как Вы запросто уменьшит размер этого загрузчика в десятки раз! — Что очень актуально особенно например для младшей серии STM32F100 например. АСМ сила!
вот бы мне когда нибудь так кодить на асме!
а не пробовали замахнуться и сделать реальный проект на асме?
например что нибудь полезное и реально нужно всем
что то что может во всю показать силу и практичность использования асма?
например сделать самый шустрый и компактный загрузчик
это очень полезная тема каждому второму микроконтроллерщику.
например вот тут (ссылка) есть интересный проект загрузчика
загрузчик простой, только позволяет обновить прошивку и не более,
делов там такому мастеру как Вы явно на пару дней.
и ещё в нём много минусов которые прямо рождены чтоб показать всю мощь асма:
— он написан на C99 и далеко не самым крутым кодером, да что уж говорить, он там даже switch-case не использовал и не изпользует вызов фукций по номеру из таблицы!!! хотя есть немало команд внутри, и их обработку так и проситься свести если не в таблицу, то в switch-case, одни сплошные ифы, брррр!
— он использует SPL — либу для работы с переферей от производителя, она монстроидальная и слишком абсрагирована
— так же он использует вызовы библиотек языка, тоже ещё тот монстр
тем не менее есть и плюсы:
— этот загрузчик работает в 10 раз быстрее чем штатный для стм32Ф4 а он прошивается реально очень долго.
— сделана неплохая программа для ПК с детализацией всех логов и ответную часть для пк писать не надо
— загрузчик использует механизм гарантированной доставки взятый из TCP с «окнами» инфой о позиции, ретрансмисиями в случае сбоев и способен работать даже если уарт изредка глючит — всегда доведёт дело до конца.
— есть немало людей которые его используют и он очень востребован
— автор с радостью отвечает на вопросы и сделал полный гайд на хабре, включая детальное описание протокола на русском.
— есть исходный опорный алгоритм на я бы сказал очень примитивном си
Я уверен такой мастер как Вы запросто уменьшит размер этого загрузчика в десятки раз! — Что очень актуально особенно например для младшей серии STM32F100 например. АСМ сила!
-1
Спасибо за лестный отзыв :) Но я боюсь Вы переоценивайте мои способности. Я с ассемблером познакомился только пол года назад и сейчас крайне сомневаюсь что моих знаний хватит чтобы потянуть чего-то серьезное. Пока хочу сосредоточится на обучении. Когда-нибудь я планирую разобраться с загрузчиками, но пока я к этому не готов.
-1
То, что работает в 10 раз быстрее, обычно умеет в 10 раз меньше.
Если есть люди, которым он очень востребован — в чем дело найти спеца на фрилансе, заплатить за пару вечеров и получить изделие?
Если есть люди, которым он очень востребован — в чем дело найти спеца на фрилансе, заплатить за пару вечеров и получить изделие?
+1
Тонко )
0
Процесс обучения пойдет быстрее, если в том же KEIL, в режиме отладки, смотреть, что же он там генерит на макро.
-1
По мне, так это хороший пример того, как НЕ надо писать на ASM для STM32 и прочих микроконтреллеров. Вопрос к автору, что будет, с мейном, если я дефайны не установлю для включения отдельных «модулей»?
+3
Полностью согласен с тем, что то что сейчас получается не является хорошим примером кода на ассемблере. Эта тема для меня абсолютно не знакомая и сейчас я пытаюсь понять как это работает. Естественно на людей которые знакомы с темой эти попытки производят ужасающее впечатление :) Но информации по данной теме не так много по-этому я решил написать о том что получилось. По поводу дефайнов, если их не устанавливать в мейне, то все будет работать. Но если модули включить в других модулях и в мейне, то компилятор попытается сгенерировать один и тот же код дважды и вылетит с ошибкой.
-1
Как по мне, для того, чтобы проникнуться тем, как работает процессор, лучше попрограммировать на ассемблере AVR или MSP430 — их ассемблер очень приятен, логичен и прост. Ассемблер ARM по человекочитаемости так себе; лучше предоставить его генерацию компилятору. Тем более, что писать на нем критичные по времени участки кода (например, драйвер 1-Wire) все равно нет смысла, потому что хитрый конвейер ARM все испортит. Я даже не уверен, что здесь поможет использование инструкций data memory barrier после каждой команды…
Если есть желание отринуть Ардуино и погрузиться в настоящую разработку, достаточно просто отказаться от использования библиотек для гуманитариев и попробовать писать с настройкой периферии через регистры. Так получается, во-первых, эффективнее, а, во-вторых, дидактический эффект присутствует во всей красе — вы будете достаточно детально знать, как и что работает внутри контроллера. Но готовьтесь всерьез изучать Reference Manual на используемый чип.
В качестве среды разработки под STM32 могу порекомендовать EmBitz (сборка Code::Blocks + ARM-GCC). Очень удобная штука, при этом с умеренными системными требованиями.
Если есть желание отринуть Ардуино и погрузиться в настоящую разработку, достаточно просто отказаться от использования библиотек для гуманитариев и попробовать писать с настройкой периферии через регистры. Так получается, во-первых, эффективнее, а, во-вторых, дидактический эффект присутствует во всей красе — вы будете достаточно детально знать, как и что работает внутри контроллера. Но готовьтесь всерьез изучать Reference Manual на используемый чип.
В качестве среды разработки под STM32 могу порекомендовать EmBitz (сборка Code::Blocks + ARM-GCC). Очень удобная штука, при этом с умеренными системными требованиями.
0
На счет MSP430 не знаю, по поводу AVR ассемблера согласен, он значительно проще чем ARM. На C сейчас программировать не хочу, ассемблер на мой взгляд более наглядно демонстрирует устройство микроконтроллера. Сейчас я хочу именно понять как работает различное железо. Хотя если вдруг возникнет идея сделать конкретный проект то я предпочту С. Глобальный план сейчас посмотреть в общих чертах как работает Cortex-M и перейти к Cortex-A. На Cortex-A хочу остановиться более подробно.
0
Sign up to leave a comment.
Мигаем светодиодом в STM32 на ассемблере