Требуется объяснение инструкции по сборке ARM Cortex-M3 в CMSIS для __set_PRIMASK

Ниже приведен фрагмент кода из библиотеки ARM CMSIS, который используется для установки значения регистра PRIMASK.

/**
 * @brief  Set the Priority Mask value
 *
 * @param  priMask  PriMask
 *
 * Set the priority mask bit in the priority mask register
 */
static __INLINE void __set_PRIMASK(uint32_t priMask)
{
   register uint32_t __regPriMask         __ASM("primask");
   __regPriMask = (priMask);
}

Часть, которую я не понимаю, - это встроенная инструкция по сборке.

__ASM("primask");

Я ничего не читал о такой адресации регистров по имени. Как вы можете иметь встроенную сборку без кода операции? Назначает ли это __regPriMask этому местоположению регистра? Может ли кто-нибудь указать на справочный документ?


person Bryan C.    schedule 29.05.2014    source источник


Ответы (1)


register uint32_t __regPriMask __ASM("primask");

...является объявлением переменной локального регистра с именем __regPriMask, который хранится в регистре primask.

Другими словами, присвоение этой регистровой переменной установит значение регистра primask.

person Joachim Isaksson    schedule 29.05.2014