5277 (5277) wrote,
5277
5277

core5277, регистры

  Семейство AVR имеет 32 регистра, первые 16 регистров обозначены как 'source' и не могут быть использованы в некоторых командах.
  Из-за многопоточности ядру приходится, при переключении задач, сохранять в стек регистры. У каждой задачи свой собственный стек. Более того, в ядре есть узкие места, где нельзя использовать стек, но регистрами пользоваться необходимо.
  Держать в стеке все регистры для каждой задачи слишком жирно, да и зачем? Я считаю, что для задачи вполне достаточно остальных 16 регистров, тем более они используются гораздо чаще первых.

Поэтому одно из требований к драйверу или задаче - использовать только старшие 16 регистров.

  Также при инициализации ядра задаются имена регистрам:
.DEF    TEMP_L   = r16                ;Младший регистр общего назначения
.DEF    TEMP_H   = r17                ;Старший регистр общего назначения
.DEF    TEMP   = r18                ;Регистр общего назначения
.DEF   TEMP_EL   = r19                ;Младший расширенный регистр общего назначения
.DEF    TEMP_EH   = r20                ;Старший расширенный регистр общего назначения
.DEF    LOOP_CNTR   = r21                ;Регистр счета циклов
.DEF    FLAGS   = r22                ;Регистр флагов
.DEF    TRY_CNTR   = r23                ;Счетчик ошибок
.DEF    ACCUM   = r24                ;Аккумулятор
.DEF    DRIVER_ID   = r25                ;ИД драйвера, используется для удобства вызова драйвера


Остальные регистры уже имеют названия, кстати для них есть макросы работы со стеком:
  PUSH_X,PUSH_Y,PUSH_Z и аналогично POP_Z,POP_Y,POP_X
Tags: atmega, core5277
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments