реклама на сайте
подробности

 
 
> STM32L0 HardFault: заморочки с выравниванием
k000858
сообщение Jan 31 2017, 12:19
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Есть какие то ограничения в ядре, приводящие к HardFault?

Пришлось в одной функции привести указатель типа uint8_t* к типу uint32_t* изза чего получил HardFault.

В STM32F4 камне тот же самый код работает нормально.
Почему же M0+ вылетает в HardFault?

Сообщение отредактировал k000858 - Feb 1 2017, 03:59
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
adnega
сообщение Jan 31 2017, 12:35
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702



Нужно гарантировать, что uint32_t* указывает на переменную, расположенную по адресу, кратному 4.
Go to the top of the page
 
+Quote Post
k000858
сообщение Feb 1 2017, 04:04
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 319
Регистрация: 31-01-12
Пользователь №: 69 978



Цитата(adnega @ Jan 31 2017, 15:35) *
Нужно гарантировать, что uint32_t* указывает на переменную, расположенную по адресу, кратному 4.

а, вот оно что. теперь более менее понимаю.


буфер в котором содержится нужное мне 32-битное значение uint8_t buf[100];
указатель на место, в котором содержится значением uint8_t* ptr = &buf[5];

на Cortex-M4 не заморачивался и делал вот так printf("val = %lu\n", *(uint32_t*)ptr);
на Cortex-M0+ такая запись приводит к HardFault'у. Причину теперь понимаю хорошо, и как не получать такой эффект тоже.

Пока сделал вот так:
Код
uint8_t value[4];
value[0]    = *ptr;
value[1]    = *(ptr + 1);
value[2]    = *(ptr + 2);
value[3]    = *(ptr+ 3);
uint32_t val    = (value[0]) | (value[1] << 8) | (value[2] << 16) | (value[3] << 24);
printf("val = %lu\n", val);


но чувствую, можно сделать это поизящнее. Подскажите красивый способ получения доступа к 32-битному значению

Сообщение отредактировал k000858 - Feb 1 2017, 04:05
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- k000858   STM32L0 HardFault: заморочки с выравниванием   Jan 31 2017, 12:19
- - Сергей Борщ   QUOTE (k000858 @ Jan 31 2017, 14:19) Поче...   Jan 31 2017, 12:21
|- - k000858   Цитата(Сергей Борщ @ Jan 31 2017, 15:21) ...   Jan 31 2017, 12:27
|- - Сергей Борщ   QUOTE (k000858 @ Jan 31 2017, 14:27) можн...   Jan 31 2017, 13:11
|- - jcxz   Цитата(k000858 @ Feb 1 2017, 06:04) но чу...   Feb 1 2017, 09:26
- - Alechek   Код#pragma pack(push, 1) struct _input { ...   Feb 1 2017, 05:06
|- - k000858   Цитата(Alechek @ Feb 1 2017, 08:06) Код#p...   Feb 1 2017, 05:52
|- - ViKo   Цитата(k000858 @ Feb 1 2017, 08:52) да, с...   Feb 1 2017, 06:54
- - Kabdim   ... или более каноничный через memcpy. Кодuint32_t...   Feb 1 2017, 07:08
|- - k000858   Цитата(Kabdim @ Feb 1 2017, 10:08) ... ил...   Feb 1 2017, 07:31
|- - scifi   Цитата(Kabdim @ Feb 1 2017, 10:08) ... ил...   Feb 1 2017, 09:25
|- - Kabdim   Цитата(scifi @ Feb 1 2017, 12:25) Если уж...   Feb 1 2017, 09:38
- - ViKo   Допустим, memcpy умеет правильно обращаться по не...   Feb 1 2017, 07:44
- - Kabdim   Почему ж она выровненная? Там прагма спереди и в к...   Feb 1 2017, 07:58
- - ViKo   Разве не достаточно создать union для обращения к ...   Feb 1 2017, 09:35
|- - jcxz   Цитата(ViKo @ Feb 1 2017, 11:35) Разве не...   Feb 1 2017, 09:39
- - ViKo   Красиво - это когда просто. Перегрузка операторо...   Feb 1 2017, 09:49
|- - jcxz   Цитата(ViKo @ Feb 1 2017, 11:49) Красиво ...   Feb 1 2017, 09:54
|- - ViKo   Цитата(jcxz @ Feb 1 2017, 12:54) Чем имен...   Feb 1 2017, 10:02
|- - jcxz   Цитата(ViKo @ Feb 1 2017, 12:02) Покажите...   Feb 1 2017, 10:22
- - ViKo   И все это ради того, чтобы не дать указание компил...   Feb 1 2017, 10:29
|- - k000858   Цитата(ViKo @ Feb 1 2017, 13:29) И все эт...   Feb 1 2017, 10:32
|- - demiurg_spb   Цитата(ViKo @ Feb 1 2017, 13:29) И все эт...   Feb 1 2017, 10:34
|- - jcxz   Цитата(demiurg_spb @ Feb 1 2017, 12:34) О...   Feb 1 2017, 10:44
||- - demiurg_spb   Цитата(jcxz @ Feb 1 2017, 13:44) __packed...   Feb 1 2017, 10:51
|- - ViKo   Цитата(demiurg_spb @ Feb 1 2017, 13:34) Н...   Feb 1 2017, 10:46
|- - jcxz   Цитата(ViKo @ Feb 1 2017, 12:46) Для M0 з...   Feb 1 2017, 10:53
|- - ViKo   Цитата(jcxz @ Feb 1 2017, 13:53) А Вы что...   Feb 1 2017, 11:11
|- - jcxz   Цитата(ViKo @ Feb 1 2017, 13:11) Я руками...   Feb 1 2017, 11:17
|- - ViKo   Цитата(jcxz @ Feb 1 2017, 14:17) Очевидно...   Feb 1 2017, 11:22
|- - scifi   Цитата(ViKo @ Feb 1 2017, 14:22) Очевидно...   Feb 1 2017, 11:32
|- - adnega   Цитата(ViKo @ Feb 1 2017, 14:22) Очевидно...   Feb 1 2017, 11:57
|- - jcxz   Цитата(ViKo @ Feb 1 2017, 13:22) Очевидно...   Feb 1 2017, 12:11
|- - Kabdim   Цитата(jcxz @ Feb 1 2017, 15:11) А если р...   Feb 1 2017, 12:36
|- - jcxz   Цитата(Kabdim @ Feb 1 2017, 14:36) А невы...   Feb 1 2017, 13:00
|- - Kabdim   Я там видимо опечатался "к теме" имел ...   Feb 1 2017, 13:54
|- - Axel   ЦитатаВнутренний перфекционист негодует... Так п...   Feb 1 2017, 16:17
- - ViKo   Легким движением руки структура превращается... пр...   Feb 1 2017, 12:14
|- - adnega   Цитата(ViKo @ Feb 1 2017, 15:14) Легким д...   Feb 1 2017, 15:56
- - ViKo   ВЫРОВНЯТЬ, -яю, -яешь; св. (нсв. также ровнять). к...   Feb 1 2017, 13:05
- - Kabdim   Цитатавыра́внивать Глагол, несовершенный вид...   Feb 1 2017, 13:10
- - ViKo   Цитата(Kabdim @ Feb 1 2017, 16:10) Послед...   Feb 1 2017, 13:18


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 14:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01465 секунд с 7
ELECTRONIX ©2004-2016