ptr128 писал(а):
Сизифов труд - заниматься самостоятельной поддержкой для всех используемых архитектур аналога libc, который вообще без усилий разработчика поддерживается разработчиками компилятров для всех поддерживаемых архитектур.
Но мне не нужно «поддерживать все используемые архитектуры». Вполне достаточно АВР. Здесь есть и библиотека, и отработанные решения, и знание всяческих тонкостей. Отрабатывать всё это на новом семействе МК пока не вижу смысла — большие затраты времени — и для чего?
AQ29 писал(а):часто важна скорость, что хорошо реализуется в макроассемблере.
ptr128 писал(а):Что значит часто? По мне, когда она нужна - тогда и делаем ассемблерную вставку. Получается ~1-2% всего кода, если, конечно не весь проект из сотни строк.
Не всегда получается 1-2%. Знакомый, умеющий писать на СИ, довольно большую программу писал на АБ — скорость нужна была. Причем что-то серьёзное, для военных. У себя я, естественно, процент не считал, хотя были разные случаи.
Но это, конечно, несущественное замечание.
Основная проблема — удобство написания. Конечно, СИ лучше ассемблера, а вот сравнение с макроассемблером - вопрос.
На мой взгляд, метод программирования в АБ лучше подходит для МК. Но, наверно, автору АБ для зарабатывания денег надо было после существенного усовершенствования новую версию продавать по дополнительной цене. Кто «подсел» на АБ — купит.
Нужна, конечно, отработанная библиотека. Чтобы окупить затраты на создание мощных библиотечных элементов их можно продавать отдельно. Ежели 1000 пользователей, да за 1000 рублей, то тут хорошая сумма получается. Но я тут совсем не специалист.
ptr128 писал(а):
AQ29 писал(а):Не вижу проблем в поддержке и контролировании кода на макроассемблере.
Расскажите. Я действительно не в курсе. Для C я знаю множество автоматизированных средств контроля за надежностью и безопасностью кода. Наиболее распостранены MISRA, PVS, ITS и т.п.
С поддержкой тоже не понятно. Разве 10 библиотек для 10 архитектур менее проблематично поддерживать, чем одну C библиотеку для этих же 10 архитектур?
Для АБ, насколько знаю, нет автоматизированных средств контроля.
Насколько представляю, средства контроля для СИ проверяют правила написания программ для сложного компилятора. В ассемблере сложного компилятора нет.
Что должны делать средства контроля для ассемблера?
Надёжность кода — большая тема.
Для надёжности кода, во-первых, соблюдение ряда правил при написании, во-вторых, тестирование.
Правила при написании простые, например:
- Никаких «боковых» выходов из вызываемых подпрограмм. Только стандартный выход, при необходимости устанавливается флаг.
- Минимум действий в прерывании. Практически почти во всех случаях в прерывании только устанавливаю программный флаг. Флаг из-за специфики АБ выбирать в регистрах РОН.
- Обеспечение выхода из возможных точек зависания.
И т.д.
Неплохо бы, чтобы какая-нибудь программа контролировала выполнения правил, но это малосущественно, правила простые и легко автоматически выполняются при некотором навыке.
Программирование упрощается. Скажем, подпрограммы деления или логарифма в примере можно просто вызывать в любом участке программы не думая о регистрах, о возможности наложения переменных и т. д.
Тестирование — тоже большая тема. Скажем, в программе есть обработки дефектов в работе и аварийных ситуаций. Для проверки надо имитировать такие ситуации, а это канительно и иногда неясно, как сделать. Как имитировать воздействие помехи на кабель, по которому обмениваются два МК? Не знаю, может быть есть специальные генераторы помех, поднёс к кабелю и проверяй.
Тестирование проводят испытатели. Затем аппараты передаются в опытную эксплуатацию пользователям, скажем, на год. После отработки замечаний, вроде как, должно надёжно работать.
Библиотека у меня, как уже писал, только для АВР. Что-то иногда добавить по мелочи или подкорректировать - это не проблема.
Вот когда понадобится мощный библиотечный элемент, а его у меня нет, тогда, конечно, того...
Но, во-первых, такое бывает редко, во-вторых, думаю, такой созданный элемент будет более оптимален для решаемой задачи, в-третьих, создание элементов — увлекательное занятие.