Микроконтроллеры

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Микроконтроллеры » Архив » Нюансы памяти в STM32


Нюансы памяти в STM32

Сообщений 1 страница 7 из 7

1

На днях писал код, задача которого была в том чтобы некую большую структуру выплевывать в DMA.
Было удивительно когда в памяти структуры стали появляться пустые места(байты). Естественно с такими пропусками в DMA слать структуру было нельзя(без гемора разбора с обратной стороны). стал разбираться и понял что МК в память записывает ориентировочно по 4 байта. и если была переменная которая 3 байта, то если следующая переменная имеет 4 байта, то к 3 байт прибавляет один лишний и только потом записывают 4 байта.  МК то 32 битный :) . В общем навел порядок в структуре и все встало на свои места.

Вот такой нюанс. Может конечно опытные это знают, но для меня было это в новинку.

2

Atomic-dm Ну да так и есть, данные в структурах (да и просто глобальные переменные например) выравниваються к слову. Если сильно надо, то структуры можно выравнивать и к байту, но тогда увеличиться время доступа к невыровненым данным. Лучше выравнивать данные руками.

Код:
#pragma pack(push,1)

// составные части команд

typedef struct
{
  uint8_t  Adr;
  uint8_t  Cmd;
  uint16_t Lenght;
} Typ_Cmd_Header;

#pragma pack(pop)

Отредактировано MasterElectric (2018-01-29 11:21:57)

3

С невыровненными данными ваще в хардфаульт улететь можно...

4

кстати еще непонятный момент, хотя возможно он так же объясняется.
в отладчике OZONe смотрю на стуктуру. есть размер самой структуры и есть размер отдельных элементов. удивительно что размер структуры пишет на 4 байта больше чем сумма размеров всех элементов :) . Тоже наверно где-то выравнивает, но в моем случае это уже не столь важно.

5

HHIMERA написал(а):

С невыровненными данными ваще в хардфаульт улететь можно...

Можно и улететь, но можно и отключить чтобы не улететь. Кортексы нормально работают с невыровненными данными, но лучше конечно не использовать. (проблемы с ПДП и еще что-то встречал).

Atomic-dm Скорее всего так и есть.

Отредактировано MasterElectric (2018-01-30 01:26:43)

6

Atomic-dm написал(а):

в отладчике OZONe смотрю на стуктуру

Посмотри ещё на код передачи аргументов в ф-ции и вычисление целочисленных выражений с короткими [меньше 32 бит] типами
Имеет смысл не жаться с памятью без крайней необходимости и всегда использовать 32-битные целые

7

vt написал(а):

Посмотри ещё на код передачи аргументов в ф-ции и вычисление целочисленных выражений с короткими [меньше 32 бит] типами
Имеет смысл не жаться с памятью без крайней необходимости и всегда использовать 32-битные целые

спасибо! учту!


Вы здесь » Микроконтроллеры » Архив » Нюансы памяти в STM32