Post:#507563 Date:10.09.2016 (18:55) ... Тема посвящена микроконтроллерам с архитектурой ARM Cortex-M.
Они стали "убийцами" 8-разрядных микроконтроллеров, так как они 32-разрядные, дешёвые, производительные, нафаршированы мощной периферией, например, 16 разрядными таймерами(есть модели с 32-разрядными таймерами), 12-разрядными АЦП (как правило), 12-разрядными ЦАП (как правило), различными приёмо-передатчиками.
Их изготавливают многие производители. Выпускаются множество недорогих ознакомительных плат со встроенными отладчиками и программаторами.
Есть свободные среды разработки, что тоже важно.
dedivan Пост: 516043 От 17.Nov.2016 (10:24)
Вообще это архитектура старая и распространенная- от еще ламповых наших М20 до Эльбрусов и комплексов С-300 С-400 и у буржуев начиная с микрочиповских ПИКов-
даже на 8 разрядных похожая идеология.
дед это получается что на атмеле самое правильное это АСМ? а любой язык приведет к замедлению выполнения програмного цикла? за счет особеностей камня?
neama Пост: 516045 От 17.Nov.2016 (10:31)
получается что на атмеле самое правильное это АСМ?
Да. особенно учитывая всего несколько килобайт кода- любой ЯВУ не даст преимуществ. ЯВУ хороши при мегабайтах кода. Ну и для начинающих, поскольку компиляторы оптимально выполняют распространенные функции.
Хотя ни один ЯВУ не сравнится с кодом написанным профессионалом на АСМЕ.
psih Пост: 516044 От 17.Nov.2016 (10:29)
...Тут главное принцип
Так давай дальше- Вот у тебя РЛС- пришел отраженный сигнал.
Нужно принять его, а ты молотишь свой цикл- нужно сохранить его контент и принять сигнал с АЦП, обработать. тоже сохранить и вернуться к своему циклу.
Обработка допустим самая простая- накопление- сложить с предыдущим значением.
Так давай дальше- Вот у тебя РЛС- пришел отраженный сигнал.
Нужно принять его, а ты молотишь свой цикл- нужно сохранить его контент и принять сигнал с АЦП, обработать. тоже сохранить и вернуться к своему циклу.
Обработка допустим самая простая- накопление- сложить с предыдущим значением.
Я не буду прерывать свой цикл, приемом сигнала с ацп. Я ДМА запрограммирую, чтобы он сложил данные в 10-килобайтовый буфер. Затем обработаю своим очередным говноциклом сразу весь буфер
Пока ты складываешь самолетик уже отбомбится по тебе.
Реалтайм требует строгого реагирования. Значение отсчета превысило порог- сразу чего то делать надо.
И вот импульсы приходят допустим через каждые 50 тактов.
48 ты тратишь на переключение задач и успеваешь выполнить всего одну итерацию из своего цикла. Итого твои 1000циклов будут выполнятся 50000 тактов.
dedivan Пост: 516055 От 17.Nov.2016 (11:05)
Пока ты складываешь самолетик уже отбомбится по тебе.
Спасибо дедиван. Теперь я понял, на каких задачах MIPS будет лучше. А то непонятненько было. У тебя в объяснениях общие замечания. Быстрее и все!
Только отмечу по данной задаче. Ты не обрабатываешь кадр попиксельно с веб-камеры. Ты получаешь готовый кадр в виде масива данных. Потом колбасишь его процом. ЦЕЛЫЙ кадр. Не получаешь прерывания попиксельно!
В чем здесь будет преимущество данной архитектуры?
psih Пост: 516058 От 17.Nov.2016 (11:12)
на каких задачах MIPS будет лучше.
А вот тут уже начинается экономика.
Ты должен делать шустрые процы. чтоб тебя не разбомбили, и народу нужно что то дать. Разрабатывать новый дешевый проц?
А может увеличить тиражи шустрых и уменьшить из стоимость?
Можно посчитать на каких тиражах это будет выгоднее.
Или вон давеча разговор зашел- ребята делают военные ноуты. Крепкие, ими и прибить можно диверсанта. если что. Но дорогие.
Вот они говорят - а как мы перейдем на ширпотреб- у нас все детали крепкие. А им отвечают- дураки. у китайцев широтреб будет всегда дешевле, увеличивайте свои тиражи, уменьшайте стоимость и ващи крепкие ноуты найдут своих покупателей без конкуренции с китайцами.
У АРМ 16 регистров общего пользования. При входе в функцию или прерывание нужно сохранить все эти 16 регистров. Это 16 тактов.
Потом наполнить регистры контентом- еще 16 тактов и после выполнения функции, которая может состоять всего десятка тактов. опять возвратить из стека старые регистры- еще 16 тактов. Итого 48 лишних такта на 10 рабочих.
У МИПС это же переключение происходит за один такт- переключается на новый набор регистров, или сохраненный контент, возврат тоже соответственно за один такт. Итого 12 тактов вместо 48+10.
Во сколько раз выигрыш на одной и той же частоте?
Специально погуглил, никогда такой фигнёй не заморачивался:
ARM Cortex-M3: 35 clock cycle context switch[ссылка]
MIPS PIC32: 32 clock cycle context switch[ссылка]
Если ничем, кроме переключения контекста не заниматься, то выигрыш < 10%
48 ты тратишь на переключение задач и успеваешь выполнить всего одну итерацию из своего цикла. Итого твои 1000циклов будут выполнятся 50000 тактов.
Это если только в случае если за этот комп деда посадить флудить на скифе В реале если задача одна, то очевидно ничего переключать не нужно.
А в реале для свёртки сигнала с РЛС, например, или кодирования изображений/видео, ARM лучше, т.к. у него есть набор инструкций NEON, который на этих задачах в несколько раз даёт реальный, а не теоретический прирост. [ссылка]
Скорее всего поэтому армы нагнули мипсы в мобилках - там нужно шустро кодировать/декодировать мультимедиа разных форматов и в большом разрешении.
У кривого проггера с кривым компилятором, который не знает про архитектуру и гоняет регистры через стек , так все и будет.
И это кривой проггер даже вопросом не задается- а почему так? Не должно же быть. Компилятор то знает что банки регистров можно переключать?
Или по наезженному делает?
И у кривого ярстона тоже этот вопрос не возник.
Это у компиля что то не так или у ярстона или у обоих?
dedivan Пост: 516104 От 17.Nov.2016 (15:38)
У кривого проггера с кривым компилятором, который не знает про архитектуру и гоняет регистры через стек , так все и будет.
И это кривой проггер даже вопросом не задается- а почему так? Не должно же быть. Компилятор то знает что банки регистров можно переключать?
Или по наезженному делает? И у кривого ярстона тоже этот вопрос не возник. Это у компиля что то не так или у ярстона или у обоих?
Ну давай, приведи пример кода, который gcc криво скомпилил или балабол. Высер в мою сторону пожалуй проигнорирую, меня ценят не за переключение банков процессора. Я Android developer, то что я делаю за час, "переключатель" на ассемблере будет месяц делать, если вообще сделает, а разницы пользователь не увидит.
Ты сам-то кто по професии?