sdn_ писал(а):
Ничего не мешало микрочипу выбрать любой другой банк для TMR0.
Расстановка регистров по банкам позволяет в подавляющем числе правильно написанных программ практически никогда банки не переключать, оставляя их указатель на нулевом. И расположение TMR0 в этом нулевом тому в помощь. Кроме того, этот таймер входит в число регистров которые ВСЕГДА БЫЛИ и ЕСТЬ в МК этой платформы. То есть даже тогда, когда банков нет вообще. Вспомним про base-семейство с 12 разрядным форматом команд...
sdn_ писал(а): Вам не сложно, а ему будет сложно, если в четырех банках путается.
И тут Вы выдумали. Он не в банках путается, а в способах их переключения. Расположение регистров по банкам ему известно назубок.
Добавлено after 38 minutes 45 seconds:Мурато Мяуконни писал(а):ТMR0 никогда не именовался "системным". Это обычный 8-битный таймер с очень неудобными делителями и без автоперезагрузки счетного регистра. Его можно использовать в качестве системных тиков, но пихать ртос на 16-й пик - упаси боже. Тем более, какой ртос на ассемблере?
Максимум, отсчитывать интервалы. Да и то, коэффициент неудобный, а автоперезагрузки нет.
Во первых, РТОС есть даже под 10-ые ПИКи.
Во-вторых, РТОС изначально написан именно на ассемблере, а в Си Вы его лишь применяете.
В-третьих, автоперезагрузки нет и в TMR1, но никто не мешает ее делать ручками в прерывании с коррекцией на латентность.
В-четвертых, Вы старайтесь думать собственной головой, а не искать шаблоны у чужого дяди... Системным нулевой таймер является по сути и по причине его вполне определенного использования в РТОСе.
Мурато Мяуконни писал(а):Огорчу сразу - в современном мире вам ассемблер не пригодится вообще. Не теряйте времени на его глубокое изучение. Возьмёте другой микроконтроллер из другой серии или поменяете платформу - заново придется учить. Ассемблер - самый низкоуровневый язык, после прямого машинного кода. На современных, особенно ARM-платформах ассемблер нужен только при очень глубокой отладке. Это вам не 35 инструкций, это раз в 7 больше.
Хотите учиться на перспективу - выбирайте перспективные платформы. То, что вы делаете сейчас - не более, чем ознакомительное, для вхождения в тему, надолго останавливаться на этом не желательно. Ассемблер помогает познать аппаратную часть микроконтроллера и его работу. Но в сложных платформах на ассемблере вы основательно завязнете в самом начале.
Снова по пунктам.
1. Ассемблер ДЛЯ СЕРЬЕЗНЫХ ЗАДАЧ необходим еще более, чем для простых, а паче даже больше, чем Си. Последнее потому, что на Си не реализуется как раз самые узкие платформозависимые решения. А именно они позволяют сделать коммерческое решение конкурентным. То есть выиграть в цене/качестве. Писать только на Си - значит получать стандартное решение как у всех и выигрывать конкуренцию только за счет маржинальности проекта.
Тут что кому нравится.
2. Нащщет количества инструкций Вы не в курсе. Базовое их число и в ARM и в иных RISC-платформах невелико и среди них часто используется всего полтора десятка. Остальное - расширение по способам адресации и никак не влияет на запоминание этих команд.
3. Нет никаких "перспективных" платформ. Есть только целесообразные для данной задачи. Ваша сентенция про "перспективность" имеет лишь целью сократить время и трудозатраты на ИЗУЧЕНИЕ. Что для настоящего инженера нонсенс.
Мурато Мяуконни писал(а):КРАМ писал(а): Потому что переносимый код не использует фичи контроллера, а значит не оптимален ни по архитектуре,
Переносимый код в пределах одного семейства сохраняет те свойства, которые были заложены при его написании, в пределах доступности периферии.
Ассемблер вообще предполагает очень и очень зависимый от микроконтроллера код.
В пределах одного семейства АСМ абсолютно переносим. С точностью до ветвления ifdef. А при смене платформы даже у одного производителя Си непереносим настолько, насколько иная платформа дает преимущества над прежней. Переносимый код нивелирует возможности разных платформ и делает переход с одной на другую бессмысленным занятием. Все это особенно заметно в современных архитектурах с независимой от ядра периферии. Работа с такой периферией вообще не дает шансов на переносимость любого кода.
Мурато Мяуконни писал(а):КРАМ писал(а):Гораздо проще, чем найти нужный регистр в структуре периферийного модуля на STM32.

Да ну, что вы! В СТМ-е абсолютно линейное адресное пространство, от 0 до 0xFFFFFFFF, на 4 гигабайта адресов на всё - и на прогу, и на ОЗУ, и на регистры, и никаких банков, для каждого периферифного модуля выделен свой диапазон адресов со стартовым адресом. Остальные регистры находятся по порядку за первым регистром модуля и задаются смещением от первого. Адреса регистров одинаковы ВО ВСЕХ СТМ32 от самого младшего F0xx до топового H7xx. Например, адрес регистра выхода порта А будет одинаков во всех СТМах.
Но на практике, искать адрес регистра не потребуется, в заголовочном файле уже все прописано.
Вы странно пишите НЕ О ТОМ.
Одинаковое расположение регистров справедливо и для младших ПИКов. И писал я совсем не про физический адрес, знать который и для ПИКов нет никакой необходимости. Для них адрес прописан так же в заголовочном файле. Речь шла о том, что в структуре управляющих периферийным модулем регистров нужно найти ИМЯ того регистра, который содержит тот самый элемент управления, который необходим. То есть нужно держать в голове изрядное количество АББРЕВИАТУР, либо шнырять по даташиту в поисках оного.
В завершение. Я сам пишу и на Си и на АСМе. А иногда на смешанном коде. Потому что иначе реализовать задуманное НА ЛЮБОЙ платформе не выйдет. Сигнальные приложения требуют либо очень высокой мощности ядра, что делает МК весьма дорогим, либо специфической для задачи архитектуры, что позволяет достичь целей при умеренной цене,но требует некоторого времени на нестандартное алгоритмическое решение.
В серьезных задачах собственно разработка алгоритма и написание кода занимают слишком мало места в технологической цепочке выпуска нового изделия, чтобы экономить на них. Зато ущерб от такой "экономии" способен обрушить конечный результат, сделав изделие неконкурентным в близкой и среднесрочной перспективе.
Добавлено after 8 minutes 48 seconds:Ser60 писал(а):С часто встречающимся высказыванием, что регистров у Кортексов уйма и в них легко заблудиться не согласен. Да, регистров в них больше, но так могут говорить только те, кто не пробовал, или попробовал лишь в течении часа, или дольше но просто не дано...
Регистров действительно уйма. Но заблудиться в них тому, кто их постоянно использует конечно невозможно. Тем более, что есть даташит. В этом смысле можно любой МК критиковать за объем даташита...
Но Вы же как никто другой понимаете, что этот объем прямо пропорционален возможностям МК.
Просто нужно его изучить.