Ассемблер (ASM) для AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
Ответить
Друг Кота
Аватара пользователя
Сообщения: 15778
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Все таки вернее будет вести речь о конечной обработке внутренним автоматом в МК, а не программно-аппаратной начинкой программатора.
Мы ведь конкретно не знаем о том, какие мысли у разработчиков были насчет планировки областей доступа и применяемых там форматов.
Да и побайтовая запись при общем постраничном режиме более подходит к области ЕЕПРОМ, чем к ПЗУ. Излишне создавать два различных аппаратных механизма для записи в ПЗУ ради нескольких байт.
Пока что это лишь наши предположения с частичным экспериментальным подтверждением "методом научного тыка".
Штука конечно интересная, но пока "на стадии эксперимента"...
:roll:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="BOB51",url="/forum/viewtopic.php?p=4497330#p4497330"]Пока что это лишь наши предположения с частичным экспериментальным подтверждением "методом научного тыка".
Штука конечно интересная, но пока "на стадии эксперимента"...
:roll:[/uquote]
:facepalm:
Вы можете отвлечься от своего шаблона?
Нет никаких экспериментов. Все о чем я тут сказал строго соответствует мануалу программирования для АВР.
При программировании ЛЮБОГО байта (программного флеша, флеша данных, фьюзов и локов) формат данных ИДЕНТИЧЕН.
Всего засылается ЧЕТЫРЕ БАЙТА. Первый определяет направление передачи и область (программа младший байт, программа старший байт, еепром, фьюзы или локи). Два последующих - адрес внутри области. И последний - данные для прошивки.
Таким образом, первый байт с определенной маской будет тем самым старшим байтом ОБЩЕГО АДРЕСА.
Вот и все.
Таким образом, КОМПИЛЯТОРОМ в хексе для каждой области выбирается виртуальный адрес, который контроллером ПРОГРАММАТОРА преобразуется в маску для первого байта. Так работает пиккит4 вместе с мплабх.
Работа автомата внутри таргета вообще не имеет никакого значения. Все заканчивается на протоколе заливки.
Реклама
Модератор
Аватара пользователя
Сообщения: 19100
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

КРАМ, возьмем, к примеру, EEPROM.
для чтения первый байт равен 10100000. а для записи первый байт равен 1100 0000.
какая маска из общего адреса может сделать такие разные 2 байта?
и по фьюзам ты не прав. у фьюзов нет 2-х байт адреса. какие фьюзы писать или читать, определяется первыми двумя байтами. третий байт - "пустой".
и тут опять такой же вопрос - как из общего адреса маской можно получить 2 байта конкретных фьюзов? причем, совершенно разных 2 байта и для записи и для чтения?
лично я так тебя понял, что пиккит4 вместе с мплабх пользуется не масками, а тот виртуальный адрес заменяет на правильные байты для каждого действия.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4497409#p4497409"]для чтения первый байт равен 10100000. а для записи первый байт равен 1100 0000.
какая маска из общего адреса может сделать такие разные 2 байта?[/uquote]
Прикольно наблюдать, как народ фантазирует по мотивам собственной профессиональной деформации... :)))
То есть представить себе маску на адрес 0b10011111 очень сложно?
А кроме того, смещение адреса может быть разным для чтения и записи.
Старичок, внутренняя структура дешифраторов адреса должна носить нетактируемый характер. То есть это просто логические вентили, а не условия if-then...
И таки все без исключения посылки являются четырехбайтными - "пустых байтов" не бывает. Они всегда имеют значения (даже нулевые), а значит могут быть адресом в линейном пространстве адресов.
Реклама
Эиком - электронные компоненты и радиодетали
Модератор
Аватара пользователя
Сообщения: 19100
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

да, я не могу представить, как из одного числа адреса можно получить разные значения первого байта. и уж тем более, получить два управляющих байта для фьюзов.
вот ты увидел в мплабх конкретные числа адресов, и начались домыслы про какие-то маски.
а мои домыслы, как я уже сказал выше, что мплабх тот адрес заменяет на правильные байты для каждого действия.
так возьми даташит, хотя бы, на АТмега8, и увидишь для фьюзов "пустой" третий байт, который в таблице обозначен "хххххххх", то есть, его значение произвольное.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4497518#p4497518"]возьми даташит, хотя бы, на АТмега8, и увидишь для фьюзов "пустой" третий байт, который в таблице обозначен "хххххххх", то есть, его значение произвольное.[/uquote]
У меня открыта аппнота по программированию... :tea:
Произвольное значение разрядов говорит лишь о множественном доступе и более ни о чем.
Мы с тобой имеем совершенно разное понимание сущностей в программировании.
Реклама
Модератор
Аватара пользователя
Сообщения: 19100
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

ну и ладно, ну и пусть...
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб июл 30, 2011 21:00:24

Сообщение AQ29 »

[uquote="BOB51",url="/forum/viewtopic.php?p=4497043#p4497043"]Вроде как определенная область адресов ПЗУ позволяет сие сделать.
Я просмотрел документацию на имеющиеся у меня образцы АВРок и нигде намека на адрес байта конфигурации не заметил. Хоть для режима параллельного программирования, хоть для ISP…[/uquote]
Скорее всего, пустым делом занимались, нет в МК секретных адресов доступа. Как я понял, «виртуальные адреса» в файле – это, фактически, просто указание на тип данных в файле. Программа программатора распознаёт тип данных и посылает их в МК, расположенный в программаторе. А тот программирует стандартным образом.
Плюсом такого решения – все данные в одном файле, а так приходится хранить 3 файла.
Правда, неясно, как хранится информация о том, надо или нет, например, программировать фьюзы при запуске программирования.
В моём случае в загрузочном файле кроме информации о битах фьюзов есть еще данные, будут ли они программироваться или нет.
Вообще полное программирование за раз почти никогда не использовал. Такое удобно при программировании отдельного МК.
Всегда запаивал МК в печатную плату, а там есть разъём программирования, не нужны разные сокеты.
В этом случае лучше программировать по отдельности.

Just_Fluffy, считывание переменной из МК – это понятно.
Но переменная в разных точках программы принимает разные значения. Как при отладке проводится привязка считывания к точкам программы?
JTAG не пользовался, на мой взгляд неудобен. Он присутствует не во всех МК и использует 4 вывода МК.

При объявлении переменных в RON объём программы, а главное, скорость выполнения значительно возрастает. Это очень существенно при управлении скоростными процессами, надо успеть, а тактовая частота МК – не гигагерцы.
Насколько слышал, у СТМ32 тоже небольшое число RON – всего 12 штук, правда, они 4-хбайтные.
Интересно узнать максимальный размер переменных и их видимость.
Друг Кота
Аватара пользователя
Сообщения: 6347
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="AQ29",url="/forum/viewtopic.php?p=4498445#p4498445"]При объявлении переменных в RON объём программы, а главное, скорость выполнения значительно возрастает.[/uquote]
имелось в виду: "объём программы уменьшается" ? Ведь в этом случае адрес операнда - в слове самого кода и не требует отдельного слова для адреса. По крайней мере, так в АВР.
Изображение
Вымогатель припоя
Аватара пользователя
Сообщения: 555
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

Да простят меня модеры, ибо это тема ассемблера АВР и все нижесказанное будет оффтопиком.
AQ29, самая простая "народная" СТМка - F103C8 - имеет тактовую до 72 МГц. Китай-клоны - до 108 МГц... Вам мало?
AQ29 писал(а):Но переменная в разных точках программы принимает разные значения. Как при отладке проводится привязка считывания к точкам программы?
Хммм.... Вы внутрисхемной отладкой программы в МК пользовались хоть раз?
Есть такое понятие как точка останова. Брякпоинт. Breakpoint. Вы в окне с текстом программы выставляете эти точки останова там, где вам нужно. И запускаете выполнение программы. Выполнение не в эмуляторе, а в железном МК, подключенном через отладочный интерфейс.
И при достижении точки останова выполнение программы в МК останавливается. В окне с программой выделение стоит на той строке программы, где в данный момент остановлено выполнение программы МК.
Наведя мышью на переменную в строке программы вы видите значение этой переменной в данный момент.
По F7 можно шагать по одной строке программы и смотреть, как меняются переменные, регистры периферии и прочее.
В соседнем окне можно просмотреть другие локальные переменные текущего блока программы. Можно просмотреть глобальные переменные, изменять их значения, поиграться с периферией. Это все работает, пока МК остановлен.
Можно настраивать, будут ли в режиме останова продолжать считать таймеры или тоже остановятся...

Jack_A, у СТМ флеша и оперативки обычно больше, нежели у простых АВРок. И экономить объем программы, загоняя какие то переменные в РОН - в большинстве случаев нет смысла. Равно, как и писать программы на ассемблере. Сейчас вообще тенденция максимально огородить программиста от МК, предоставив ему максимально универсальные обертки железа и кодогенераторы для стандартных применений периферии.
В нашей с GoldenAndy игровой консольке стоит СТМка - 512 кб флеша, 128кб ОЗУ.
И в этой СТМке поместился полноценный компилятор бейсика в байт-код и выполнятор этого байт-кода. И шустренькая консолька вышла. И, кстати, еще куча места в СТМке осталась. Цена вопроса - 4 бакса за СТМ на отладочной платке. (Ну я так покупала у китайцев).
И на ассемблере писать под такие объемы - увольте. Последние мои проги на асме закончились на тиньке2313 и меге8 на момент изучения платформы. Скорость разработки на ЯВУ несоизмеримо выше. Да, за это надо платить размером программы. Но как утверждают в интернете знающие люди - грамотно написанная программа на Си дает прирост объема кода 20-30% против грамотной программы на асме.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="AQ29",url="/forum/viewtopic.php?p=4498445#p4498445"]Плюсом такого решения – все данные в одном файле, а так приходится хранить 3 файла.
Правда, неясно, как хранится информация о том, надо или нет, например, программировать фьюзы при запуске программирования.
В моём случае в загрузочном файле кроме информации о битах фьюзов есть еще данные, будут ли они программироваться или нет.
Вообще полное программирование за раз почти никогда не использовал. Такое удобно при программировании отдельного МК.
Всегда запаивал МК в печатную плату, а там есть разъём программирования, не нужны разные сокеты.
В этом случае лучше программировать по отдельности.[/uquote]
Не вижу никакой связи между внутрисхемным программированием и программированием фьюзов вместе с кодом.
В производство выдается файл для прошивки с защитой кода, а при разработке защита кода закомментирована.
Но МК всегда впаян в схему. Зачем его программировать до монтажа? :dont_know:
Более того, в коде может быть условная компиляция, которая позволяет генерировать разные версии кода по объявленным в хедере переключателям.
В этом случае и фьюзы и еепром могут стать объектом такого управления трансляцией.
[uquote="AQ29",url="/forum/viewtopic.php?p=4498445#p4498445"]При объявлении переменных в RON объём программы, а главное, скорость выполнения значительно возрастает. Это очень существенно при управлении скоростными процессами, надо успеть, а тактовая частота МК – не гигагерцы.[/uquote]
"Гигагерцы" тут не причем. Для МК с "гигагерцами" скорость исполнения кода так же важна. Иначе зачем нужны эти "гигагерцы"? :)
Тут все дело в том, что и AVR, и ARM являются RISC-архитектурами, а значит система команд ограничивает всю арифметику АЛУ регистровыми операндами. То есть работа с ОЗУ происходит только через инструкции LOAD/STORE. В отличии от CISC, где РОНов обычно немного, но имеются инструкции арифметики прямо с содержимым ОЗУ. Среди МК к этой архитектуре относятся PIC-и и dsPIC-и, причем в 16-разрядных их представителях РОН-ов достаточно много (целых 16), но почти вся арифметика разрешает работу АЛУ с первыми 8К байт ОЗУ одним из операндов (непосредственная адресация).
ЗЫ. Стесняюсь спросить, а почему вы называете регистры общего назначения через латинскую транслитерацию? Что означает RON? :)))
Вообще то они называются GPR - general purpose registers. :tea:
[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4498474#p4498474"]Скорость разработки на ЯВУ несоизмеримо выше.[/uquote]
И тем не менее, работать на АСМе порой очень даже целесообразно. Например на критических участках кода. Или когда архитектура имеет ненативные для Си (или другого ЯВУ) инструкции. И эти инструкции дают значимые для кода и изделия ништяки.
Не нужно относится легкомысленно к объемам памяти в ARM-ах. Нужно помнить, что скорость выборки инструкций из флеша ограничена частотой 25...40 МГц. А это означает, что к высокой скорости ядра в ARM нужно относится очень осторожно, обращая особое внимание на величину WS (waite state) в чипе. И чтобы обойти этот неприятный нюанс порой нужно выгружать исполняемый код в ОЗУ. Правда, в некоторых МК это делается автоматически и прозрачно. Иногда есть выбор между такой автоматической загрузкой и применением ОЗУ по прямому назначению и тогда WS не равен нулю... :)
Вымогатель припоя
Аватара пользователя
Сообщения: 555
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

КРАМ писал(а):И тем не менее, работать на АСМе порой очень даже целесообразно. Например на критических участках кода. Или когда архитектура имеет ненативные для Си (или другого ЯВУ) инструкции. И эти инструкции дают значимые для кода и изделия ништяки.
Ну я же не утверждала, что всегда... Я написала - в большинстве случаев)))))
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Друг Кота
Аватара пользователя
Сообщения: 6347
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

[uquote="Just_Fluffy",url="/forum/viewtopic.php?p=4498474#p4498474"]Jack_A, у СТМ флеша и оперативки обычно больше, нежели у простых АВРок. И экономить объем программы, загоняя какие то переменные в РОН - в большинстве случаев нет смысла.[/uquote]
Я не говорил о целесообразности - речь шла о бесспорном, IMHO, факте, что код с использованием РОН короче, чем с памятью. По крайней мере, для AVR.
В нашей с GoldenAndy игровой консольке стоит СТМка
Я к СТМ - никаким боком. :) К сожалению. :(
----------------------------
Спойлер"Бесспорно" - Word считает, что правильно писать : "Бес с порно". А "мультиканальный" - "мультик анальный"
Изображение
Вымогатель припоя
Аватара пользователя
Сообщения: 555
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

Jack_A, Для маленьких проектов - да. Для больших - РОНов не напасёшься.
Кстати (опять же, оффтоп для данной темы) - сишный компилятор локальные переменные (счетчики циклов и т.д.) старается по возможности в регистры упихать. А уже что не влезло - уносится на стек.
А то, что "Никаким боком к СТМ" - в этом прелесть ЯВУ. Вы пишете, невзирая на то, какой у вас МК. Единственное зависимое место - взаимодействие с периферией. Оно железозависимо. А логика программы - она должна быть абстрактная. Хотя абстракция - это некий объем доп.кода.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Грызет канифоль
Сообщения: 262
Зарегистрирован: Сб июл 30, 2011 21:00:24

Сообщение AQ29 »

Just_Fluffy, насчёт отладки.
На мой взгляд, при отладке с точками остановок есть недостатки.
Иногда нельзя останавливать МК, потеря управления может привести к тяжёлым последствиям, скажем, система пойдёт в разнос.
Кроме того, вы смотрите данные только в одной точке.
Для меня это старая отладка из прошлого века.
Давно использую следующую отладку.
В нужных точках программы ставятся команды, выводящие в программатор номера точек и интересующие переменные.
При пуске МК на компьютере появляются номера точек и значения переменных.
Такая отладка, на мой взгляд, намного удобней. Можно проконтролировать ход выполнения программы и значения переменных в реальном режиме и без остановки МК.
Недостаток – используется пара выводов МК (реально обычно один) и вывод переменных занимает некоторое время. В основном, это несущественно.
Такой программатор недорогой, комплектация – Atmega8 и немного периферии.

«...Для больших – РОНов не напасёшься...»
Почему не напасёшься?
Есть же определённые правила программирования.
Большей частью программа состоит из вызовов подпрограмм (Sub и макросы). Подпрограммы решают небольшие задачи.
В подпрограммах в РОНах объявляются локальные переменные, их там обычно относительно немного.
Какие переменные объявить в РОН, какие в SRAM, решает разработчик. После компиляции можно посмотреть число вызовов той или иной переменной. Много вызовов – объявить в РОН, мало – в SRAM.

«…грамотно написанная программа на СИ на 20-30 % больше…»
Сильно сомнительно, что в СИ код возрастает только на 20-30 %.
Кто утверждает, как сравнивали? Возможно, взяли небольшую программу, неплохо написанную на СИ, и получили такой результат.
Скорее всего, в серьёзных программах всё гораздо хуже.

«…независимость от МК – в этом прелесть ЯВУ…»
Не вижу в этом прелести. Выигрыш почти никакой, а потери большие. Возрастание объёма, может быть, не очень существенно, а вот скорость работы может быть очень критична.
Сталкивался с плохо работающей следящей системой, СИ-шник писал.
На форуме описывали случай, когда «медленный» МК вообще привёл к смертельному случаю.

На мой взгляд, описание работы на СИ уместно, поскольку идёт сравнение с ассемблером.

[uquote="КРАМ",url="/forum/viewtopic.php?p=4498533#p4498533"]Стесняюсь спросить, а почему вы называете регистры общего назначения через латинскую транслитерацию? Что означает RON? :)))[/uquote]
Отчего стал применять аббревиатуру RON, сейчас уже не вспомнить. Скорее всего, где-то в программе, где только английские буквы, надо было использовать такую переменную, GPR показалось неблагозвучным.
Конечно, здесь на сайте надо было использовать общепринятое обозначение, а не «самодельное», заметили правильно.
Какая аббревиатура на английском общепринятая – для меня вопрос. На мой взгляд, GPR не подойдёт.
В новых МК АВР в регистрах ввода/вывода есть регистры общего применения, которые также называются. Причём это официальная документация, так что такая аббревиатура уже занята. Похоже, эти регистры удобно использовать для флагов, поскольку с ними работают команды SBI и другие.
В документации ещё указывают, что РОН это ещё и рабочие регистры, но про аббревиатуру GPWR я ничего не слышал.

По поводу полемики о фьюзах.
В новых МК АВР фьюзы действительно расположены в общем адресном пространстве данных, адрес &H1050. Однако записать фьюзы можно также только программатором UPDI, через CPU невозможно.
Если кому интересно, в даташите на МК AVR32DA32 в разделе 7 есть таблица 7-5, где указано, что можно программировать через программатор, что через CPU.
Вымогатель припоя
Аватара пользователя
Сообщения: 555
Зарегистрирован: Ср июн 29, 2022 16:25:45

Сообщение Just_Fluffy »

AQ29, Я не собираюсь вам что то доказывать или уговаривать.
Если вы, как программист и разработчик, решитесь в критичной секции поставить точку останова - ну так это ж вы решили осознанно и прекрасно понимаете последствия. Ну а если не осознаете , то ССЗБ увы...
Отладка критичных секций логированием тоже имеет место быть. Но это разные случаи и один другой не заменяет. Скорее, дополняет.
Касательно смотреть значение только в одной точке - я смотрю значения именно в тех точках, где мне нужно. И пошагово прохожу по коду, при необходимости. Причем эти точки могу расставлять и убирать на лету.
А еще - я ответа на свой вопрос "Вы внутрисхемной отладкой программы в МК пользовались хоть раз?" так и не увидела.

Касательно абстракции.
Просто скажу, что мне приходилось пару раз проекты переносить с одной платформы на другую. И это было вообще безболезненно для логики работы программы. Менялся только блок взаимодействия программы с периферией, вынесенный в отдельный файл.
А внутри семейства вообще перенос безболезненный.

И да, позор тому программисту, у которого абстракция снизила производительность на ощутимом уровне.

И, кстати, в пользу ЯВУ.
Большинство операций с периферией, вынесенные в простые процедуры в блоке взаимодействия с железом, превращаются оптимизатором компилятора в обычные обращения к периферии, без накладных расходов в виде вызова процедуры.
В частности, установка/сброс бита в порту, загрузка/чтение регистров периферии - прекрасно оптимизируются.

Засим позвольте откланяться, постараюсь в теме ассемблера больше не оффтопить.
Белая и Пушистая
Я не ИИ, поэтому могу ошибаться.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="AQ29",url="/forum/viewtopic.php?p=4503209#p4503209"]Какая аббревиатура на английском общепринятая – для меня вопрос. На мой взгляд, GPR не подойдёт.[/uquote]
А ваш взгляд никого не интересует.
Это общепринятая аббревиатура. Русский РОН суть есть дословный перевод - General Purpose Register.
Модератор
Аватара пользователя
Сообщения: 19100
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

Сообщение Starichok51 »

AQ29 писал(а):«…грамотно написанная программа на СИ на 20-30 % больше…»
Сильно сомнительно, что в СИ код возрастает только на 20-30 %.
Кто утверждает, как сравнивали?
видимо, сравнивали те программисты, которые на ассемблере пишут по тем же принципам, по каким работает сишный компилятор.
если писать на ассемблере грамотно и не зная принципов сишного компилятора, то ассемблерный код может быть даже в несколько раз меньше, чем после сишного компилятора.
приведу пример.
у меня разработаны собственные подпрограммы (функции) работы с плавающей точкой. я в сишной программе посмотрел дизассемблерный код стандартных функций умножения и деления.
так вот, умножение у меня примерно имеет примерно в 1,5 раза меньше строк. а деление там разбросано на несколько подпрограмм-"кусков". я даже не стал прикидывать общий размер функции деления, но на вскидку у меня объем подпрограммы деления (в строках) в несколько раз меньше.
но больше всего меня в стандартной библиотеке интересовал вывод числа с плавающей точкой в строку. и я нашел нужную мне функцию - strtod. она работает быстро за счет использования табличного метода при любом значении числа типа float. поэтому я её заимствовал себе в мою "библиотеку".
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Друг Кота
Аватара пользователя
Сообщения: 25862
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

[uquote="Starichok51",url="/forum/viewtopic.php?p=4503688#p4503688"]программисты, которые на ассемблере пишут по тем же принципам, по каким работает сишный компилятор.[/uquote]Как программист, который примерно лет 15 писал практически все на АСМе, могу возразить по существу.
1. Писать по принципам работы компилятора невозможно. Можно писать "как на Си". Компилятор тут вообще не причем.
2. На Си можно писать что угодно и как угодно. Поэтому сравнивать плохо написанный код на Си с АСМом как то несерьезно.
3. Строить программу на АСМе аналогично построению программ на Си позволяет соединить читабельность Си и эффективность АСМа.
4. Размер кода не является критерием сам по себе. Есть разный подход к оптимизации кода. В общем случае компактный код работает медленнее.
OKF
Это не хвост, это антенна
Сообщения: 1452
Зарегистрирован: Вт июн 07, 2011 08:03:18

Сообщение OKF »

Я бы добавил, что основным преимуществом Си является переносимость кода. При элементарно аккуратном написании, исходники с минимальными правками (только в хедерах) переносятся не только внутри семейства, но и между платформами (типа PIC, AVR, X51...). Зачастую нужно только пины назначить и всё. При этом не важно какое семейство и какая платформа.
Ну или взять Ардуино. Там о железе ВООБЩЕ можно не думать и не знать!
Ответить

Вернуться в «AVR»