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

 
 
> Переменная по адресу не кратному 4 байт.
maxntf
сообщение Sep 12 2018, 15:29
Сообщение #1


Частый гость
**

Группа: Участник
Сообщений: 107
Регистрация: 13-05-09
Пользователь №: 49 008



Всем привет, наткнулся на такой баг - объявил буфер в глобальных переменных.
Передаю его адрес в аргументе функции. И когда обращаюсь в функции к этой переменной через указатель сразу вылетаю в HardFault_Handler.
Пол дня парился, и в конце концов выяснил, что линковщик расположил ее по адресу не кратному 4.
Проверил, действительно если передать в функцию указатель не кратный 4, то при чтении по этому адресу вылетаем в HardFault_Handler.
И теперь не могу добиться, чтоб этот буфер разместился по корректному адресу. Добавляю перед ним или после него новые переменные, адреса смещаются, и у него все равно адрес не корректный.
Что делать?


P.S
Keil V5.23.0.0

Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Kabdim
сообщение Sep 13 2018, 08:10
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Скопировать значение в выравненную переменную с помощью memcpy. Вызвать функцию с этой локальной переменной. (опционально)Скопировать значение назад. Это и есть пуленепробиваемое решение которое работает везде, независимо от типов и версий компиляторов и языка.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 13 2018, 08:21
Сообщение #3


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Kabdim @ Sep 13 2018, 11:10) *
Скопировать значение в выравненную переменную с помощью memcpy. Вызвать функцию с этой локальной переменной. (опционально)Скопировать значение назад. Это и есть пуленепробиваемое решение которое работает везде, независимо от типов и версий компиляторов и языка.

Ваш совет - один из лидеров среди самых вредных и опасных советов cranky.gif
Кстати, memcpy - очень коварный костыль!

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

Пример реально пуленепробиваемого решения:
Код
// Arm Compiler v5
#if   defined ( __CC_ARM )

    #pragma import(__use_no_heap)
    #pragma import(__ARM_use_no_argv)
    #pragma import(__use_two_region_memory)

// Arm Compiler v6
#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050)

    __asm(".global __use_no_heap \n\t");
    __asm(".global __ARM_use_no_argv \n\t");
    __asm(".global __use_two_region_memory \n\t");

#endif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 13 2018, 14:55
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(Forger @ Sep 13 2018, 11:21) *
Ваш совет - один из лидеров среди самых вредных и опасных советов cranky.gif
Кстати, memcpy - очень коварный костыль!

Пруфов, я так понимаю, дождаться нереально?
Цитата(Forger @ Sep 13 2018, 11:21) *
Пример реально пуленепробиваемого решения:

Гы! biggrin.gif
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 13 2018, 15:15
Сообщение #5


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Kabdim @ Sep 13 2018, 17:55) *
Пруфов, я так понимаю, дождаться нереально?

Вы правы - это бесполезный пруф из разряда: почему нужно мыть руки перед едой или чистить зубы. Это знают даже дети biggrin.gif
Во многих уважающих себя конторах это "наследие" вообще давно запрещено к применению.
Хотя в примитивном коде, который ни за что не отвечает или служит чисто образовательным целям (ардуины), memcpy в целом беды не несет, разве что кроме впустую потраченных нервов и времени smile3046.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 14 2018, 08:56
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(Forger @ Sep 13 2018, 18:15) *
Вы правы - это бесполезный пруф из разряда: почему нужно мыть руки перед едой или чистить зубы. Это знают даже дети biggrin.gif

Потому что пруфы для мытья рук есть и если не заниматься демагогией их несложно найти.
Цитата(Forger @ Sep 13 2018, 18:15) *
Во многих уважающих себя конторах это "наследие" вообще давно запрещено к применению.

И видимо что бы запретить совсем уж всю идею копирования памяти в другое место они придумали memcpy_s... biggrin.gif
Цитата(Forger @ Sep 13 2018, 18:15) *
Хотя в примитивном коде, который ни за что не отвечает или служит чисто образовательным целям (ардуины), memcpy в целом беды не несет, разве что кроме впустую потраченных нервов и времени smile3046.gif

Ну и к чему эти намеки, если вдруг вы не догадывались, то с Ардуиной я никогда не работал и к образованию кого-либо отношения не имею. Вы мешаете в один чан два разных применения. С буферами переменной длинны где для использования memcpy нужно много проверок и всё зло от того что индусы о ни забывают, а их отсутствие не обеспечивает падение сразу. А с другой стороны копирование переменной фиксированной длинны, где единственная задача убедится что на входе есть данные нужного размера. Если вы тратите на второй вариант использования memcpy нервы и время, могу только посочувствовать.
Цитата(Forger @ Sep 14 2018, 10:47) *
Соревнуетесь с Kabdim по вредности "советов"? wink.gif

Не переживайте, в этом вопросе вы непревзойденный идеал. biggrin.gif
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Sep 14 2018, 09:04
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(Kabdim @ Sep 14 2018, 11:56) *
Потому что пруфы для мытья рук есть и если не заниматься демагогией их несложно найти.

Пруф. Нельзя вызывать memcpy абы как.

Ну и обратный пруф - memcpy спасает мир biggrin.gif
Go to the top of the page
 
+Quote Post
Kabdim
сообщение Sep 14 2018, 09:59
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 558
Регистрация: 26-11-14
Из: Зеленоград
Пользователь №: 83 842



Цитата(aaarrr @ Sep 14 2018, 12:04) *
Пруф. Нельзя вызывать memcpy абы как.

Ну вообще там говорится что оптимизатор верят в то что программист знает язык, на котором программирует, не более того. Рекомендаций по неиспользованию memcpy там не дается.
Цитата(Forger @ Sep 14 2018, 12:15) *
Не стоить лукавать, вы все прекрасно поняли - ведь вон как активно оправдываетесь sm.gif

Ох уж эти школьные подколки.
Go to the top of the page
 
+Quote Post
Forger
сообщение Sep 14 2018, 10:14
Сообщение #9


Профессионал
*****

Группа: Свой
Сообщений: 1 215
Регистрация: 22-02-05
Пользователь №: 2 831



Цитата(Kabdim @ Sep 14 2018, 12:59) *
Ох уж эти школьные подколки.
Все верно: для каждого случая - "подколка" соответствующего "уровня сложности" wink.gif


--------------------
Кругозор некоторых людей - круг с нулевым радиусом. Они называют его "точкой зрения".
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- maxntf   Переменная по адресу не кратному 4 байт.   Sep 12 2018, 15:29
- - Forger   Цитата(maxntf @ Sep 12 2018, 18:29) линко...   Sep 12 2018, 15:33
|- - maxntf   Цитата(Forger @ Sep 12 2018, 18:33) Сейча...   Sep 13 2018, 08:55
- - Сергей Борщ   QUOTE (maxntf @ Sep 12 2018, 18:29) Что д...   Sep 12 2018, 15:35
|- - scifi   Цитата(Сергей Борщ @ Sep 12 2018, 18:35) ...   Sep 13 2018, 09:03
|- - Forger   Цитата(scifi @ Sep 13 2018, 12:03) Костыл...   Sep 13 2018, 10:17
|- - scifi   Цитата(Forger @ Sep 13 2018, 13:17) Ну-ну...   Sep 14 2018, 06:40
|- - Forger   Цитата(scifi @ Sep 14 2018, 09:40) Скажем...   Sep 14 2018, 07:47
||- - aaarrr   Цитата(Kabdim @ Sep 14 2018, 12:59) Ну во...   Sep 14 2018, 10:20
||- - Kabdim   Цитата(aaarrr @ Sep 14 2018, 13:20) Где ж...   Sep 14 2018, 10:27
||- - aaarrr   Цитата(Kabdim @ Sep 14 2018, 13:27) Распи...   Sep 14 2018, 10:32
|- - Forger   Цитата(Kabdim @ Sep 14 2018, 11:56) Не пе...   Sep 14 2018, 09:15
- - ViKo   union спасает выравнивание при любых компиляторах.   Sep 13 2018, 09:01
- - Kabdim   Цитата(aaarrr @ Sep 14 2018, 13:32) В дан...   Sep 14 2018, 11:27
|- - aaarrr   Цитата(Kabdim @ Sep 14 2018, 14:27) Нет т...   Sep 14 2018, 11:35
|- - Kabdim   Цитата(aaarrr @ Sep 14 2018, 14:35) Каким...   Sep 14 2018, 11:40
||- - aaarrr   Цитата(Kabdim @ Sep 14 2018, 14:40) В дан...   Sep 14 2018, 11:51
|- - scifi   Цитата(aaarrr @ Sep 14 2018, 14:35) Каким...   Sep 14 2018, 12:03
|- - aaarrr   Цитата(scifi @ Sep 14 2018, 15:03) Так не...   Sep 14 2018, 12:08
|- - scifi   Цитата(aaarrr @ Sep 14 2018, 15:08) Пожал...   Sep 14 2018, 12:17
|- - aaarrr   del - Извиняюсь, кривой пример получился Нет, все ...   Sep 14 2018, 13:00
- - Kabdim   Всё тоже самое нарушено, но на А8 оно по идее рабо...   Sep 14 2018, 13:18
|- - aaarrr   Цитата(Kabdim @ Sep 14 2018, 16:18) Всё т...   Sep 14 2018, 13:23
- - Kabdim   С А8 может выйти гадание на кисиле, сложный чип, м...   Sep 14 2018, 13:36
- - aaarrr   Нет, все же плохой пример. Но и за компилятором ес...   Sep 14 2018, 13:59
- - Kabdim   И как падает или нет?   Sep 14 2018, 14:02
|- - aaarrr   Цитата(Kabdim @ Sep 14 2018, 17:02) И как...   Sep 14 2018, 15:10
- - Kabdim   Получается вы без линукса А8 готовите? Довольно ре...   Sep 16 2018, 09:27
|- - aaarrr   Цитата(Kabdim @ Sep 16 2018, 12:27) Получ...   Sep 16 2018, 11:03
- - Kabdim   Я бы скорее странным назвал решение АРМ сделавшей ...   Sep 16 2018, 13:34
|- - aaarrr   Цитата(Kabdim @ Sep 16 2018, 16:34) Я бы ...   Sep 16 2018, 13:35
- - Kabdim   Afaik там clang и если много приходится писать без...   Sep 16 2018, 13:41
|- - aaarrr   Цитата(Kabdim @ Sep 16 2018, 16:41) Afaik...   Sep 16 2018, 13:51
- - Kabdim   Они ж его вроде бросили, с 5 что ли версии, если м...   Sep 16 2018, 14:01
- - aaarrr   Тут не скажу - это четвертый, а дальше я его судьб...   Sep 16 2018, 14:10
- - Forger   Цитата(aaarrr @ Sep 16 2018, 17:10) Жаль,...   Sep 16 2018, 14:28


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

 


RSS Текстовая версия Сейчас: 18th June 2025 - 19:05
Рейтинг@Mail.ru


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