Вт сен 11, 2018 13:42:20
Вт сен 11, 2018 14:15:37
Вт сен 11, 2018 16:58:15
Вт сен 11, 2018 17:10:49
Вт сен 11, 2018 17:14:30
Вт сен 11, 2018 17:31:07
alignas(4) char number_tel_2[12] = "0000000000";
Вт сен 11, 2018 17:44:26
Если бы он выровнял, проблем не было бы.Reflector писал(а):Он выровнял,
Вт сен 11, 2018 18:20:23
Вт сен 11, 2018 18:31:46
Вт сен 11, 2018 19:03:35
Вт сен 11, 2018 19:17:51
Вт сен 11, 2018 19:19:51
int number_tel_2[12 / 4];
Вт сен 11, 2018 19:46:25
Вт сен 11, 2018 20:00:31
Согласен. Он выровнял по байту. Для слов (2, 4 байта) уже, считай, что выравнивания нетVladislavS писал(а):Компилятор выровнял начало массива исходя из размера его элементов, в данном случае у нас массив байт, потому считай никакого выравнивания и нет. Но оно есть
Вт сен 11, 2018 20:30:31
Вт сен 11, 2018 21:04:33
Какие то древние ARMы имели доступ как памяти только выравненный по словам. На пикче слева, видна существенная потеря памяти, против современных, справа. Так что ничего странного.Аlex писал(а):По этому и странно, что не положил массив начиная с выровненного по 4 байта поля. Хотя ... хз... хз...
BorisSPB писал(а):Указатель на uint32_t должен быть выровнен по 32-бита. Ядро Cortex-M не может считывать 32-битные значения с произвольного адреса. При попытке чтения uint32_t с нечетного адреса или адреса кратного 2 происходит прерывание HardFault.
volatile uint32_t Buf=0x01020304;
volatile uint32_t *pBuf=&Buf;
Buf=*((uint32_t*)((uint8_t*)pBuf+1));
Надо в отладке поглядеть где висите.Ser-B писал(а):При выполнениии приведенных операций происходит зависание мк.
32разрядный МК должен работать быстрее с 32 разрядными числами, но душа просит все время 8битные переменные объявлять , даже очень локальные флаги, которые скорее всего будут в регистре и само-собой займут его весь.ARV писал(а):ну, наверное, сравнивать быстрее числа, чем символы - или 4 символа за раз, или 1...
Вт сен 11, 2018 22:09:49
Ср сен 12, 2018 08:57:40
Ср сен 12, 2018 09:38:10
В M0 будет. http://purebasic.mybb.ru/viewtopic.php?id=564#p7599Z_h_e писал(а):Код прошагал, исключения не произошло.
Ср сен 12, 2018 10:43:07
3.3.5. Address alignment
An aligned access is an operation where a word-aligned address is used for a word, dual word, or multiple word access, or where a halfword-aligned address is used for a halfword access. Byte accesses are always aligned.
The Cortex-M4 processor supports unaligned access only for the following instructions:
LDR, LDRT
LDRH, LDRHT
LDRSH, LDRSHT
STR, STRT
STRH, STRHT
All other load and store instructions generate a UsageFault exception if they perform an unaligned access, and therefore their accesses must be address aligned.