Программирование ARM: решение проблем, FAQ Keil: выравнивание адреса переменных Fri, October 11 2024  

Поделиться

Нашли опечатку?

Пожалуйста, сообщите об этом - просто выделите ошибочное слово или фразу и нажмите Shift Enter.

Keil: выравнивание адреса переменных Печать
Добавил(а) microsin   

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

Для решения этой задачи существует ключевое слово __align. Оно инструктирует компилятор выровнять в памяти адрес начала переменной по указанному значению n. Т. е. адрес начала переменной в памяти будет нацело делиться на n.

Ключевое слово __align относится к классу модификаторов размещения переменных в памяти (storage class modifier). Он не влияет на тип объекта, размещение которого модифицирует.

Синтаксис:

__align(n)

Здесь n для локальных переменных может принимать значения 1, 2, 4 или 8. Для глобальных переменных n может иметь любое значение до 0x80000000, лишь бы оно было результатом степени числа 2.

Ключевое слово __align полезно использовать, когда по умолчанию используется выравнивание в памяти, меньшее необходимого n. Выравнивание на 8 байт может дать значительный прирост производительности при использовании инструкций VFP.

Пример выравнивания адреса массива на 4 байта:

__align(4) uint8_t myArray[10];

[Ограничения __align]

Из-за того, что директива __align относится к классу модификаторов хранения, она не может использоваться в следующих случаях:

• Для типов, определенных через typedef, и в определениях структур.
• Для параметров функций.

Еще примеры использования __align:

__align(8) char buffer[128];  // buffer начнется с адреса, нацело делящегося на 8
 
void foo(void)
{
    ...
    __align(16) int i; // это значение выравнивания недопустимо, потому что
                       // применено к локальной переменной
    ...
}
 
__align(16) int i; // допустимо, поскольку это глобальная переменная

[Ссылки]

1. Keil __align keyword site:keil.com.
2Keil: ключевое слово __packed.

 

Добавить комментарий


Защитный код
Обновить

Top of Page