Программирование ARM Как выровнять (align) размер памяти на 4 байта? Fri, April 28 2017  

Поделиться

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

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


Как выровнять (align) размер памяти на 4 байта? Печать
Добавил(а) microsin   

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

Например, микроконтроллер оперирует 32-битными словами (4 байта), и может работать только с такой порцией данных (у меня так получилось с портом SSC на AT91SAM7X256 - передающий регистр SSC_THR имеет разрядность 32 бита, и порт SSC передает зараз 4 байта). Таким образом, для организации буфера передачи необходимо выделить такое количество байт, чтобы это количество нацело делилось на 4. Делается это очень просто, но неочевидным образом. Пусть length - минимальное невыровненное количество байт, которое требуется для данных. Тогда выравнивание на 4 достигается добавлением нужного количества байт по следующему алгоритму:

 

    length +=  3;       // добавляем 3 к length
    length &= ~3;       // сбрасываем 3 младших бита length

[Ссылки]

1. IAR EW ARM: выравнивание полей в структурах.

 

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


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

Top of Page