Pull to refresh
35
0

никто

Send message

оба варианта возможны..

при вызове подпрограммы (инструкция BL) в LR аппаратно заносится адрес следующей инструкции основной программы

при обработке исключений - в LR заноситься спец значение, и адрес возврата сохраняется на стек

ну и при вызове подпрограмм из подпрограмм - программист должен сам сохранять\восстанавливать LR о чем и рассказывается в видео по ссылке выше

адрес возврата в LR, так что переход по нему вернет исполнение в вызывающий код

вообще я не понял про какой код вы пишите

в прерывании свой порядок возврата - там используются специальные значения для возврата

а для подпрограмм в LR делал по этому небольшое видео https://youtu.be/XrkwxJUf0Rs?si=VTW7UZC4kh5N7Emd оно есть и в ВК

при возникновении прерываний и исключений сохраняет на стеке указанные регистры, после возврата восстанавливает...

там еще про адрес возврата рекомендую почитать - там тоже интересно :-)

чем мой ответ не устроил минусатора не понятно.... наверное надо было ответить RFTM.. :-)

r0-r3, r12, lr автоматом кладутся на стек, и потом с него восстанавливаются... так что если в прерывании другие регистры не нужны - то ничего дополнительно парковать не надо, так что из кода прерывания их сохранение можно и удалить (старая статья однако, надо поправить что ли)

ну хранение векторов в озу это требования задачи. к переносимости отношение имеет посредственное

так на какой комп ставить то ? на писюк ?

я не специалист по 1986, так что комментировать соответствие докам не могу...

но код ваш не читаем :-(

вот например инит дма на асме, и никаких магических чисел

@.CHARSET CP1251

@ GNU AS
.syntax unified
.cpu cortex-m4
.thumb
.fpu fpv4-sp-d16

.INCLUDE   "/src/inc/rcc.inc"
.INCLUDE   "/src/inc/dma.inc"
.INCLUDE   "/src/inc/tim2-5.inc"

.section .asmcode

@.desc name=DMA_INIT type=proc
@ +---------------------------------------------------------------------+
@ |    Запуск автоматического копирования данных буфера в TIM3_CCR1     |
@ |      при помощи DMA 1 (поток 6 канал 2) по запросу  (TIM4_UP)       |
@ +---------------------------------------------------------------------+
@.enddesc

.global DMA_INIT
DMA_INIT:
              @ тактирование DMA1
                    LDR        R0, =PERIPH_BB_BASE + ( RCC_BASE + RCC_AHB1ENR ) * 32 + RCC_AHB1ENR_DMA1EN_N * 4
                    STR        R1, [ R0 ]

                    LDR        R0, = DMA1

@ настройки DMA
                    @  размер периферии       размер памяти    инкремент памяти
.EQU  size          , DMA_SxCR_PSIZE_16B + DMA_SxCR_MSIZE_16B + DMA_SxCR_MINC

                    @         канал 2          циклически   из памяти в периферию    высший приоритет
.EQU  mode          , 2 << DMA_SxCR_CHSEL_N + DMA_SxCR_CIRC + DMA_SxCR_DIR_MTP     + DMA_SxCR_PL_VHIGH

                    LDR        R1, = mode + size
                    STR        R1, [ R0, DMA_S6CR ]   @ установим настройки

               @ старт DMA1 Stream 6
               @ сброс флагов, если есть установленные то без этого dma работать не будет
               @ но при первом запуске все флаги итак сброшены, поэтому и не сбрасываем
@                    MOV        R1, DMA_HIFCR_CFEIF6 + DMA_HIFCR_CDMEIF6 + DMA_HIFCR_CTEIF6 + DMA_HIFCR_CHTIF6 + DMA_HIFCR_СTCIF6
@                    STR        R1, [ R0, DMA_LIFCR ]

                    MOV        R1, 31                      @ количество передач = 31
                    STR        R1, [ R0, DMA_S6NDTR ]

                    LDR        R1, = VALUES                @ адрес массива данных
                    STR        R1, [ R0, DMA_S6M0AR ]

                    LDR        R1, = TIM3 + TIM2T5_CCR1    @ адрес регистра сравнения TIM3_CCR1
                    STR        R1, [ R0, DMA_S6PAR ]

                @ включим DMA1 при помощи bitbanding
                    LDR        R0, = PERIPH_BB_BASE + ( DMA1_BASE + DMA_S6CR ) * 32
                    MOV        R1, 1
                    STR        R1, [ R0, DMA_SxCR_EN_N * 4 ]

                    BX         LR

@ массив яркости светодиода
.align 4
VALUES:             .SHORT      10, 30, 50, 90, 70, 60, 40
                    .SHORT      25
                    .SHORT      10, 30, 50, 90, 70, 60, 55
                    .SHORT      50, 45, 40, 35, 30, 20, 15
                    .SHORT      10, 5, 1, 1, 1, 1, 1, 1, 1

у меня на ассемблере код понятнее чем здесь приведенный на си

вот вот, идея не имеющая смысла просто существовала в железе вне всякой логики.... о чем я и говорю :-)

это вам только кажется... если решение рабочее, эффективное - то оно используется..

если притянуто к исполнению надуманными основаниями - то получается так как получилось в данном случае...

и да, вы правы: все очень просто !!! нефиг притягивать зелень туда где она не нужна, потому что денег это и не принесет, и без денег работать не будет...

но конечно можно придумать кучу причин и аргументов что они ссали против всех и их сломали :-) ага... бедолаги !!! заговор мировой просто против них :-)

хайп кончился одновременно с деньгами...

идея уровня дно... но зеленым наверняка нравилась, наверняка ими и финансировалась и продвигалась...

в общем какая идея, таков и результат

да они наперегонки переводят чужое :-) таков уж этот хабр

осторожнее с векторами в таком видео. не все смогут это переварить...

для кортексов все таки не забываем +1 к адресу (это признак .thumb кода).. помоему f4 не имеет проблемы с зависанием, а вот f1 может и зависнуть без этих +1...

приходите в гости... :-) все есть...

я вам описал ситуацию - ознакомиться со сканом на моем компьютере не возможно... спасибо за что ? и кому ? программистам за их дибилизм ? ок, спасибо..

спасибо вам за то что радуетесь таким вот дибильным интерфейсам ? - ок, спасибо...

такое ощущение что сайт делал вчерашний школьник, все го.ни.е которое только нашел в интернете в части скриптов - внедрено.... осталось еще подписи в меню убрать и сделать значки !!! тогда точно будет в духе современного времени и интерфейсов (надеюсь догадаются)

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

и после всех этих вывертов кто то еще удивляется почем сайт роскосмоса не популярен ? - да потому что там все сделано так чтобы галочку поставить, а не для того чтобы было удобно...

1
23 ...

Information

Rating
Does not participate
Location
Чукотский АО, Россия
Date of birth
Registered
Activity