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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

AQ29 писал(а):Макроассемблером условно называю язык АБ (Algorithm Builder), в котором широко используются макрокоманды и подпрограммы с параметрами.

Не вижу никаких отличий от любого макроассемблера, включая те, с которыми работал в 80-е годы прошлого века.

ptr128 писал(а):IMHO, если планируете профессионально программировать МК, то учите С, а макроассемблеры оставьте в покое. Даже несмотря на то, что использование asm в С требует несколько большей писанины, чем написание модуля на макроассемблере.
В итоге, оно окупается сторицей на всех этапах жизненного цикла ПО

AQ29 писал(а):На мой взгляд, на макроассемблере АБ будет не «несколько меньше писанины», а глобальное упрощение программирования.

Мне пришлось полностью свою фразу отквотить, чтобы Вы могли ее еще раз внимательно прочитать. Сизифов труд, заниматься математикой на ассемблере. "учите C".

AQ29 писал(а):Более того, для производителей МК будет ещё и убыток, ведь объём написанных программ будет значительно меньше, значит, будут покупать более дешёвые МК.
Капиталисты деньги считают.

У Вас первая фраза противоречит последней. Для примера, час работы даже низкоквалифицированного программиста обходится не менее, чем в $20 (я не говорю, что этот индус столько получит на руки - если интересно, расчет могу привести). МК с бОльшим объемом флеш, если оно и потребуется, будет стоить, от силы, на полдоллара дороже. Отсюда получаем, что день работы индуса, в теории, имеет шансы окупиться только на тираже свыше нескольких сотен экземпляров. Проблема в том, что на нескольких сотнях дополнительный флеш станет стоить десяток центов. И мы так итерационно прийдем к тысячным тиражам. А если оценить шансы (когда памяти для C не хватает, а ассемблером можно еще вписаться) и учесть то, что поддерживать и контролировать ассемблерный код в разы дороже, то написание всего проекта на ассемблере не окупится вообще никогда. Именно поэтому, при производстве ПО, на ассемблере пишут программисты себестоимостью от $50 в час и только очень незначительную часть кода всего проекта, где использование ассемблера действительно необходимо. А при таком подходе, понятно, что использование ассемблера в виде ассемблерных вставок на C очевидно выгодней.
На мой вгляд, целиком на ассемблере сейчас проекты пишут только два типа людей:
1. Те, для кого ассемблер просто хобби. Ради фана, при наличии свободного времени.
2. Безработные, которым время все равно девать не куда.

Безусловно, для проектов на МК умение программировать на ассемблере желательно. Но уже давно это умение не является необходимым. А вот умение программировать на C, IMHO, необходимо любому программисту.
Другое дело, что народ из крайности в крайность бросается, начиная городить объектно-ориентированные модели на МК. Но это уже из другой оперы. Я о C++ вспоминаю, только если у меня памяти заведомо больше, чем может потребоваться проекту даже в дальней перспективе.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
Andrew Martin
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Вт июн 25, 2013 18:45:07

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

Сообщение Andrew Martin »

trofim2 писал(а):Да....
Таким образом можно любой макроассемблер приспособить.


Ну-ну :))) fasmg это есть очень навороченный препроцессор без конкретной "специализации", а поддержка различных процессоров осуществляется исключительно макросами.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Ладныть...
Усе хорошо в меру умеренного потребления и для соответствующего места (иначе потравиться и лечебным препаратом можно).
По вопросу ассемблера...
Когда делается небольшая самоделка (полностью на своей схемотехнике) без такового не обойтись.
Когда используется уже кем-то разработанное устройство то для сокращения времени разборов с конфигурацией и прочими наворотами предпочтение высокоуровневому языку (а то, что какой-то разработчик ранее позаботился о создании библиотек,
БИОС и прочего для данного блочка нас вобщем уже не интересует).
НО... стоит только отступить от "стандартных правил использования" или попытаться намутить "отсебятинку" как в большинстве случаев у "начинающих" появляется призрак бело-пушистого... (не котейки!)...
Теперь про библиотеки-макросы в применении к ассемблеру от Атмел (студио 4.19 и проччее...)...
Библиотечные решения хороши для абстракций, отвлеченных от железа - математика, всяческие преобразования - то, что основано на ядре и системе команд, но не касается прикладных аппаратных модулей.
Макрос - больше как создание "недостающих" микрокоманд, возможно целевых блоков программной конфигурации аппаратных средств (своеобразный базовый БИОС для конкретного кристалла).
И при всем прочем раскидаем проект по разным файлам, имеющим соответственные задачи.
Воть как-то так...
:dont_know:
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

BOB51 писал(а):По вопросу ассемблера...
Когда делается небольшая самоделка (полностью на своей схемотехнике) без такового не обойтись.

В общем случае, без ассемблера на любой платформе не обойтись. В ядре любой ОС есть ассемблерные вставки. Ведь даже в том же C нет операторов ввода-вывода. Я призывал не увлекаться ассемблером, так как этим не только увеличиваете трудозатраты, но и понижаете надежность и безопасность кода.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

BOB51 писал(а):По вопросу ассемблера...
Когда делается небольшая самоделка (полностью на своей схемотехнике) без такового не обойтись.

От АСМа сейчас толку не больше, чем от применения коммутаторных лампочек вместо светодиодов.
Это некоторые не могут обойтись, а другие обходятся и вполне успешно. Для новичков АСМ вообще неподъёмный груз, а профи его практически не юзают.
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

scorpi_0n писал(а):От АСМа сейчас толку не больше, чем от применения коммутаторных лампочек вместо светодиодов.
ptr128 писал(а):Ведь даже в том же C нет операторов ввода-вывода.

Объясните, пожалуйста, как на C можно что-то вывести в порт или прочитать из порта, если вдруг архитектура не позволяет обратиться к порту через адресное пространство памяти? (например, x86)
Так же очень интересно было бы увидеть код на C, останавливающий выполнение команд (sleep), обеспечивающий задержку на 1-2 такста, запрещающий и разрешающий прерывания.

Я прошу именно код на С, а не вызов функции C, уже содержащей в себе ассемблерную вставку.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

scorpi_0n писал(а):Для одного МК может быть несколько АСМ. Все они подходят как вставки в Си? Нет!

Зависит от кривизны toolchain. В общем случае - да, подходят.
"If your code needs to support multiple assembler dialects (for example, if you are writing public headers that need to support a variety of compilation options), use constructs of this form:
{ dialect0 | dialect1 | dialect2... }"
Пруф: https://gcc.gnu.org/onlinedocs/gcc/Extended-Asm.html

scorpi_0n писал(а):Если убрать в Си поддержку АСМ не изменится ровным счётом ничего, просто не будет поддержки АСМ.

Докажите.
ptr128 писал(а):Я прошу именно код на С, а не вызов функции C, уже содержащей в себе ассемблерную вставку.

Код где?
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
scorpi_0n
Вымогатель припоя
Сообщения: 616
Зарегистрирован: Вс ноя 01, 2015 13:13:49

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

Сообщение scorpi_0n »

ptr128 писал(а):Код где?

А что, выходной код на АСМе? Не будьте так смешны! Бросайте свои РС-привычки, МК это вам не РС.

И потом, вам уже сказали открытым текстом
Достали!
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

scorpi_0n писал(а):Не надо умничать.
Бред!

Успокойся. Здесь взрослые мужчины технические вопросы обсуждают, а не сварливые бабы эмоциями обмениваются :)))

scorpi_0n писал(а):Не плодите легенды! Си не относится к языкам с высокой надёжностью и безопасностью. Одни указатели чего только стоят.

Внимательно прочитайте название темы. Видите слово "Микроконтроллеры"? Ну так приведите пример проекта для МК, который обходится без указателей на любом языке.

Добавлено after 3 minutes 48 seconds:
scorpi_0n писал(а):А что, выходной код на АСМе?

Я прошу Вас доказать, что Ваше утверждение
scorpi_0n писал(а):От АСМа сейчас толку не больше, чем от применения коммутаторных лампочек вместо светодиодов.

истинно. Каким образом Вы можете это доказать, я написал:
ptr писал(а):Объясните, пожалуйста, как на C можно что-то вывести в порт или прочитать из порта, если вдруг архитектура не позволяет обратиться к порту через адресное пространство памяти? (например, x86)
Так же очень интересно было бы увидеть код на C, останавливающий выполнение команд (sleep), обеспечивающий задержку на 1-2 такста, запрещающий и разрешающий прерывания.
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
FAKIR
Друг Кота
Сообщения: 23520
Зарегистрирован: Пт дек 12, 2014 09:36:15
Откуда: Минск

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

Сообщение FAKIR »

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

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

Сообщение BOB51 »

akl писал(а)::kill: Достали! Тема называется Ассемблер (ASM) для AVR в вопросах и ответах.


Поддерживаю мнение!
От себя добавлю...
Высказывания некоторых Котов, при всем уважении к их породистости,
вместо развития темы навыков использования компиляторов ассемблера
весьма напоминают собор святой инквизиции на тему
"осуждение и обоснование запрета изучения неверной трактовки
великого СИ, представляемой еретиками-ассемблеристами и вселенской ереси
их (сторонников демона-асмодея) высказываний и учений".
8)
Ежли у кого чего в ответ - просю в личку, дабы тему не размывать.
:wink:
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

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

Сообщение dimmer »

Парни помогите, компилирую это в avrasm2:

Код: Выделить всё

.macro test1
.ifdef @0
   .message "Defined"
.else
   .message "Not Defined"
.endif
.endmacro

.macro test2
.ifndef @0
   .message "Not Defined"
.else
   .message "Defined"
.endif
.endmacro

.cseg
   nop
   test1 regX
   nop
   test2 regX


получаю бред какой-то:

Код: Выделить всё


                 .cseg
000000 0000         nop
test.asm(3): Defined
test.asm(5): Not Defined
                    test1 regX
000001 0000         nop
test.asm(11): Not Defined
                    test2 regX

это глюк компилятора, или закон какой-то против меня?

Однако:

Код: Выделить всё

                 .def regX = r2
                 
                 .macro test
                 .ifdef @0
                 .else
                    .message "Not Defined"
                 .endif
                 
                 .ifndef @0
                 .else
                    .message "Defined"
                 .endif
                 .endmacro
                 
                 .cseg
000000 0000         nop
test1.asm(12): Defined
                    test regX
                 
000001 0000         nop
test1.asm(7): Not Defined
                    test regY
AQ29
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Сб июл 30, 2011 21:00:24

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

Сообщение AQ29 »

ptr128 писал(а): Сизифов труд, заниматься математикой на ассемблере. "учите C"
“поддерживать и контролировать ассемблерный код в разы дороже,.

Все расчёты, которые мне приходилось делать (умножение, деление, и т.д.) делаются просто, часто банально. В приведенном мною выше примере есть и деление, и умножение, и логарифм — и всё это несколько строчек простого кода. Где тут «сизифов труд»?

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

Не вижу проблем в поддержке и контролировании кода на макроассемблере.
Аватара пользователя
ptr128
Вымогатель припоя
Сообщения: 606
Зарегистрирован: Чт окт 06, 2016 21:12:07
Откуда: Южное Бутово

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

Сообщение ptr128 »

AQ29 писал(а):Где тут «сизифов труд»?

Сизифов труд - заниматься самостоятельной поддержкой для всех используемых архитектур аналога libc, который вообще без усилий разработчика поддерживается разработчиками компилятров для всех поддерживаемых архитектур.


AQ29 писал(а):часто важна скорость, что хорошо реализуется в макроассемблере.

Что значит часто? По мне, когда она нужна - тогда и делаем ассемблерную вставку. Получается ~1-2% всего кода, если, конечно не весь проект из сотни строк.

AQ29 писал(а):Не вижу проблем в поддержке и контролировании кода на макроассемблере.

Расскажите. Я действительно не в курсе. Для C я знаю множество автоматизированных средств контроля за надежностью и безопасностью кода. Наиболее распостранены MISRA, PVS, ITS и т.п.
С поддержкой тоже не понятно. Разве 10 библиотек для 10 архитектур менее проблематично поддерживать, чем одну C библиотеку для этих же 10 архитектур?
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

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

Сообщение Jetetex »

Народ, помогите юзверю.
на тини 13 нужно прерывание по совпадению, а оно судя по моделированию не происходит. перепроверил уже по 100500 раз все регистры - вроде все верно установлено. В режиме "по переполнению" все фурычет.

Суть программы:
в осн цикле выводим в порт данные для 5-ти сдвиговых регистров (матрица 8*32)
Во время прерывания идет вмена выводимых данных (кроме 1-го, который мотает в основном цикле для динамического отображения по 8-ми столбцам)

код прилагаю:

Спойлер.include "output\tn13def.inc"
;======================



;======================

;******************************* обзываем переменные ****************************

.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def countsht=R20



.dseg
;******************************** ЗДЕСЯ **********************************
;******************************** выпрашиваем у компилятора чуток ОЗУ **********************************
;******************************** для хранения "личных данных" **********************************
stroka: .byte 4
stolbik: .byte 1
.cseg
;*************************** Вектора прерываний ************************
.org 0
rjmp RESET
rjmp INT_0 ; External Interrupt 0
rjmp PCI0 ; External Interrupt Request 0
rjmp OVF0 ; Timer/Counter0 Overflow
rjmp ERDY ; EEPROM Ready
rjmp AnaComp ; Analog Comparator
rjmp OC0A ; Timer/Counter Compare Match A
rjmp OC0B ; Timer/Counter Compare Match B
rjmp WDT ; Watchdog Time-out
rjmp ADCC ; ADC Conversion Complete

;RESET:
INT_0:
PCI0:
OVF0:
ERDY:
AnaComp:
;OC0A:
OC0B:
WDT:
ADCC:
reti

;********************** обработчик прерывания переполнения таймера *********************
;********************** TIMER0_OVF *********************
OC0A: in R15,SREG
ldi Temp,0
out TCNT0,Temp ;обнуляем счетный регистр
rcall effects

exitoc0a:
out SREG,R15
reti





RESET:

;*********************** инициализация МК **********************
ldi countsht,0
ldi Temp,1
sts stroka,Temp
ldi Temp,2
sts stroka+1,Temp
ldi Temp,3
sts stroka+2,Temp
ldi Temp,4
sts stroka+3,Temp
ldi Temp,1
sts stolbik,Temp

ldi Temp,0b11111111 ;настройка портов
out DDRB,Temp

ldi Temp,0
out TCNT0,Temp ;обнуляем счетный регистр

ldi Temp,0b00001000 ;разрешить прерывание по переполнению таймера/счетчика 0
out TIMSK0,Temp

ldi Temp,0b00001000 ;Флаг наступления прерывания по переполнению
out TIFR0,Temp

ldi Temp,0b00000010 ;режим работы "сброс при совпадении"
out TCCR0A,Temp

ldi Temp,0b00000100 ;тактовый сигнал = CK/256
out TCCR0B,Temp

ldi Temp,RamEnd ;установка указателя стека
out SPL,Temp

ldi Temp,255 ;регистр сравнения
out OCR0A,Temp

ldi Temp1,0b00000000
sei

;**************************** ****************************
;**************************** Основной цикл программы ****************************
;**************************** ****************************


main:
rcall shifting

cbi PORTB,1
sbi PORTB,1
cbi PORTB,1
rcall dealey
rjmp main


Во вложении полный текст и схема для Протеус 7
Вложения
code.asm
код
(4.67 КБ) 522 скачивания
снежинка.rar
схема
(16.47 КБ) 147 скачиваний
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Ваш код не смотрел.
Не знаю для всех ли AVR, но в протеусе прерывание по совпадению в нормальном режиме счетчика не работает (не помню на каком МК выяснил). Включаешь СТС - работает.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

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

Сообщение dimmer »

Код: Выделить всё

ldi Temp,0b11111111         ;настройка портов
out DDRB,Temp
       
;ldi Temp,0
;out TCNT0,Temp            ;обнулЯем счетный регистр

;ldi Temp,0b00001000          ;разрешить прерывание по переполнению таймера/счетчика 0
ldi Temp,(1<<OCIE0A)      ;Timer/Counter0 Output Compare Match A Interrupt Enable
out TIMSK0,Temp

;ldi Temp,0b00001000          ;”лаг наступлениЯ прерываниЯ по переполнению
;out TIFR0,Temp

ldi Temp,0b00000010          ;режим работы "сброс при совпадении"
out TCCR0A,Temp

ldi Temp,0b00000100          ;тактовый сигнал = CK/256
out TCCR0B,Temp

ldi Temp,RamEnd              ;установка указателЯ стека
out SPL,Temp

ldi Temp,255               ;регистр сравнениЯ
out OCR0A,Temp

ldi Temp1,0b00000000
sei



Код: Выделить всё

OC0A:      in R15,SREG
;         ldi Temp,0
;         out TCNT0,Temp            ;обнулЯем счетный регистр  ???????????
            rcall effects

exitoc0a:
         out SREG,R15
      reti
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

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

Сообщение Jetetex »

спасибо за подсказку, помогло

А в прерывании забыл убрать после предыдущего эксперимента )
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
AQ29
Нашел транзистор. Понюхал.
Сообщения: 198
Зарегистрирован: Сб июл 30, 2011 21:00:24

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

Сообщение AQ29 »

ptr128 писал(а):Сизифов труд - заниматься самостоятельной поддержкой для всех используемых архитектур аналога libc, который вообще без усилий разработчика поддерживается разработчиками компилятров для всех поддерживаемых архитектур.

Но мне не нужно «поддерживать все используемые архитектуры». Вполне достаточно АВР. Здесь есть и библиотека, и отработанные решения, и знание всяческих тонкостей. Отрабатывать всё это на новом семействе МК пока не вижу смысла — большие затраты времени — и для чего?
AQ29 писал(а):часто важна скорость, что хорошо реализуется в макроассемблере.

ptr128 писал(а):Что значит часто? По мне, когда она нужна - тогда и делаем ассемблерную вставку. Получается ~1-2% всего кода, если, конечно не весь проект из сотни строк.

Не всегда получается 1-2%. Знакомый, умеющий писать на СИ, довольно большую программу писал на АБ — скорость нужна была. Причем что-то серьёзное, для военных. У себя я, естественно, процент не считал, хотя были разные случаи.
Но это, конечно, несущественное замечание.
Основная проблема — удобство написания. Конечно, СИ лучше ассемблера, а вот сравнение с макроассемблером - вопрос.
На мой взгляд, метод программирования в АБ лучше подходит для МК. Но, наверно, автору АБ для зарабатывания денег надо было после существенного усовершенствования новую версию продавать по дополнительной цене. Кто «подсел» на АБ — купит.
Нужна, конечно, отработанная библиотека. Чтобы окупить затраты на создание мощных библиотечных элементов их можно продавать отдельно. Ежели 1000 пользователей, да за 1000 рублей, то тут хорошая сумма получается. Но я тут совсем не специалист.
ptr128 писал(а):
AQ29 писал(а):Не вижу проблем в поддержке и контролировании кода на макроассемблере.

Расскажите. Я действительно не в курсе. Для C я знаю множество автоматизированных средств контроля за надежностью и безопасностью кода. Наиболее распостранены MISRA, PVS, ITS и т.п.
С поддержкой тоже не понятно. Разве 10 библиотек для 10 архитектур менее проблематично поддерживать, чем одну C библиотеку для этих же 10 архитектур?

Для АБ, насколько знаю, нет автоматизированных средств контроля.
Насколько представляю, средства контроля для СИ проверяют правила написания программ для сложного компилятора. В ассемблере сложного компилятора нет.
Что должны делать средства контроля для ассемблера?
Надёжность кода — большая тема.
Для надёжности кода, во-первых, соблюдение ряда правил при написании, во-вторых, тестирование.
Правила при написании простые, например:
- Никаких «боковых» выходов из вызываемых подпрограмм. Только стандартный выход, при необходимости устанавливается флаг.
- Минимум действий в прерывании. Практически почти во всех случаях в прерывании только устанавливаю программный флаг. Флаг из-за специфики АБ выбирать в регистрах РОН.
- Обеспечение выхода из возможных точек зависания.
И т.д.
Неплохо бы, чтобы какая-нибудь программа контролировала выполнения правил, но это малосущественно, правила простые и легко автоматически выполняются при некотором навыке.
Программирование упрощается. Скажем, подпрограммы деления или логарифма в примере можно просто вызывать в любом участке программы не думая о регистрах, о возможности наложения переменных и т. д.
Тестирование — тоже большая тема. Скажем, в программе есть обработки дефектов в работе и аварийных ситуаций. Для проверки надо имитировать такие ситуации, а это канительно и иногда неясно, как сделать. Как имитировать воздействие помехи на кабель, по которому обмениваются два МК? Не знаю, может быть есть специальные генераторы помех, поднёс к кабелю и проверяй.
Тестирование проводят испытатели. Затем аппараты передаются в опытную эксплуатацию пользователям, скажем, на год. После отработки замечаний, вроде как, должно надёжно работать.

Библиотека у меня, как уже писал, только для АВР. Что-то иногда добавить по мелочи или подкорректировать - это не проблема.
Вот когда понадобится мощный библиотечный элемент, а его у меня нет, тогда, конечно, того...
Но, во-первых, такое бывает редко, во-вторых, думаю, такой созданный элемент будет более оптимален для решаемой задачи, в-третьих, создание элементов — увлекательное занятие.
Ответить

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