Например TDA7294

Форум РадиоКот • Просмотр темы - hard fault на stm32f103rb при работе с указателями на uint64
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Чт дек 25, 2025 08:16:50

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 30 ]    , 2
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 12:16:21 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Ну да, всё правильно. А как это противоречит тому, что я говорил? Я всего-лишь показал, что если компилятор сразу видит, что адрес невыровненный, то он компилирует побайтную запись. Но если как в случае с ТС, компилятор этого не знает, то генерируется оптимальный код, который падает при подаче в невыровненного указателя.

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 12:39:14 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
jcxz писал(а):
Достаточно ему написать корректный пример:
Код:
    extern volatile uint64_t aaa;
    volatile uint64_t *ptr = (uint64_t*)(&aaa+1);
    *ptr = 0x1234567887654321;

Как будут вполне ожидаемые LDRD/STRD.

Куда в этом корректном примере запишется последний байт?

jcxz писал(а):
Т.е. - volatile в случае GCC никак не спасает от исключения невыровненного доступа. Не поможет оно.

Оно помогает для uint32_t*. Когда их несколько подряд, то без volatile может сгенериться STRD, но это чисто практическое наблюдение...
Вообще в случае невыровненного доступа рекомендуют memcpy использовать, она должна везде и всегда нормально работать.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 12:48:32 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Т.е. - volatile в случае GCC никак не спасает от исключения невыровненного доступа. Не поможет оно.


В моём случае я использовал volatile только для подавления оптимизации, чтобы гарантированно сгенерировался код записи по адресу. Без него оптимизатор всё выкинет и будет пустая программа

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 12:51:52 
Это не хвост, это антенна
Аватар пользователя

Карма: -16
Рейтинг сообщений: -136
Зарегистрирован: Чт фев 19, 2015 12:41:04
Сообщений: 1405
Рейтинг сообщения: 0
Афигеть Вам нужно пересесть на Arduino там этот вопрос элегантно решили. Суть решения проста как я и говорил "если нельзя, но очень хочется то можно" :)) ...

P.S. А, глубокомысленно решать вопрос как "И рыбку съесть и на-й сесть" это тупик 8)

_________________
"Every profession is a conspiracy against the uninitiated" (B. Shaw)
"A textbook can be defined as a book unsuitable for reading" (B. Shaw)
Tautology is humor in "this" place (Vigo Carpathian)


Последний раз редактировалось astrahard Пн сен 27, 2021 13:00:25, всего редактировалось 1 раз.

Вернуться наверх
 
Эиком - электронные компоненты и радиодетали
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 12:57:06 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Еще ворнинг для таких случаев можно включить: -Wcast-align


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 13:06:58 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1660
Рейтинг сообщения: 0
jcxz писал(а):
Достаточно ему написать корректный пример:
Код:
    extern volatile uint64_t aaa;
    volatile uint64_t *ptr = (uint64_t*)(&aaa+1);
    *ptr = 0x1234567887654321;

Как будут вполне ожидаемые LDRD/STRD.

Куда в этом корректном примере запишется последний байт?
"Корректный", это не о том как будет исполняться, а о том чтобы соответствовало вопросу в теме. В примере ArtDen компилятор видит, что целевой объект - байтовый массив. Возможно поэтому формирует такую портянку из STRB (используя эту инфу). В моём примере у компилятора такой инфы нет, для него цель - просто некая 64-битная переменная где-то, содержимого которой он не знает.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 13:20:20 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 0
Куда в этом корректном примере запишется последний байт?

Последний байт запишется корректно, потому что адрес &aaa+1 выровненный, т.к. у aaa тип uint64_t ))

Добавлено after 7 minutes 45 seconds:
В примере ArtDen компилятор видит, что целевой объект - байтовый массив. Возможно поэтому формирует такую портянку из STRB (используя эту инфу)

Для компилятора важна лишь инфа, достоверно невыровнен ли адрес или это неизвестно. Не важно, что именно до этого содержалось по этому указателю. Вот пример с сырыми указателями: https://gcc.godbolt.org/z/hTeGcv73v

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Последний раз редактировалось ArtDen Пн сен 27, 2021 13:21:45, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 13:20:32 
Поставщик валерьянки для Кота

Карма: 20
Рейтинг сообщений: 256
Зарегистрирован: Вс июн 19, 2016 09:32:03
Сообщений: 2089
Рейтинг сообщения: 0
Последний байт запишется корректно, потому что адрес &aaa+1 выровненный, т.к. у aaa тип uint64_t ))

Ну да, это я протупил, там же приведения нет, потому все байты запишутся непонятно куда :) Но изначально видимо протупил jcxz, потому что скорее всего хотел увеличить адрес именно на байт :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 13:23:33 
Мучитель микросхем
Аватар пользователя

Карма: 12
Рейтинг сообщений: 49
Зарегистрирован: Пн фев 22, 2010 09:12:34
Сообщений: 462
Рейтинг сообщения: 1
Да вообще вопрос вроде как решённый, в том числе для ТС. Непонятно о чём тут спорить )

_________________
http://ufa-darts.ru/ - приходи играть в дартс в Уфе


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: hard fault на stm32f103rb при работе с указателями на ui
СообщениеДобавлено: Пн сен 27, 2021 13:46:34 
Говорящий с текстолитом

Карма: -7
Рейтинг сообщений: 187
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1660
Рейтинг сообщения: 0
Последний байт запишется корректно, потому что адрес &aaa+1 выровненный, т.к. у aaa тип uint64_t ))

Да, конечно же там нужно: (u64 *)((char *)&aaa + 1). Ошибка.

Добавлено after 1 minute 49 seconds:
Да вообще вопрос вроде как решённый, в том числе для ТС.
Конечно. Пусть ставит IAR - там нет проблем. :)))


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 30 ]    , 2

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y