haker_fox 60 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба Добрый день, коллеги! Ни у кого оптимизация "static clustering" ни приводила к глюкам? Что-то похожее. Нашёл на офицальном сайте ссылку, что в 7.10 в редких случаях эта опция может приводить к некорректному коду. Но про более новые версии - тишина. В нашем случае проявляется в том, что переменная из ОСРВ FreeRTOS pxDelayedTaskList имеет одинаковый адрес с одним из полей класса... Соответственно, когда конструктор класса пишет в своё поле, разрушается структура ОСРВ. А это ведёт к HardFault. Если эту опцию оптимизации отключить, две переменные находятся по разным адресам и всё работает корректно. Посоветуйте что-нить, пожалуйста) Не могу придумать способ, как понять - это наш баг или их? Да, микроконтроллер с ядром Cortex-M0. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 4 часа назад, haker_fox сказал: Добрый день, коллеги! Ни у кого оптимизация "static clustering" ни приводила к глюкам? IAR v7.80.4 пользуюсь давно, в разных проектах на разных МК. В релизной компиляции всегда включаю полную оптимизацию (balanced или size). Иногда и при отладке. Никаких галочек опций при этом не отжимая (оставляю по дефолту для данной оптимизации). Проблем с этим никогда не замечал. Пробовал и версии IAR >=8.00 - тоже с этим проблем не было. Цитата В нашем случае проявляется в том, что переменная из ОСРВ FreeRTOS pxDelayedTaskList имеет одинаковый адрес с одним из полей класса... Соответственно, когда конструктор класса пишет в своё поле, разрушается структура ОСРВ. А это ведёт к HardFault. Если эту опцию оптимизации отключить, две переменные находятся по разным адресам и всё работает корректно. Вангую - "одно поле класса" имеет модификатор "static"? Цитата Посоветуйте что-нить, пожалуйста) Не могу придумать способ, как понять - это наш баг или их? Наверное так же как и всегда в подобных случаях: Создать проект минимального размера, в котором будет проявляться этот баг. И выложить его сюда (на форум), на всеобщее обозрение и проверку другими участниками. Тут даже спец.раздел форума для этого есть. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 15 minutes ago, jcxz said: Вангую - "одно поле класса" имеет модификатор "static"? Нет, не статик. На скриншоте (не мой, поэтому маленько затёрт) может быть картина будет более полная. 15 minutes ago, jcxz said: И выложить его сюда (на форум), на всеобщее обозрение и проверку другими участниками. Ок. Тут вынужден консультироваться с руководством... Запретили((((((((((((( Только скрин и могу предоставить. Сорр. 15 minutes ago, jcxz said: Пробовал и версии IAR >=8.00 - тоже с этим проблем не было. Вот и у меня лично не было проблем. Это коллега обратился ко мне... Я как бы проблему нашёл. Но хочется до конца разобраться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 20 минут назад, haker_fox сказал: Нет, не статик. На скриншоте (не мой, поэтому маленько затёрт) может быть картина будет более полная. Ну и что? Из этих скриншотов никак не следует что компоновщик поместил эти две переменные по одному адресу. Из них следует только то, что отладчик почему-то считает, что они находятся по одному адресу. Что может быть как правдой так и ложью. Правильные адреса переменных узнаются всегда по .map-файлу, а не по окнам отладчика. PS: А также реальные адреса их можно узнать дойдя отладчиком до тех команд, которые их используют. Если уж с .map-файлом почему-то работать не получается... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 2 minutes ago, jcxz said: Правильные адреса переменных узнаются всегда по .map-файлу map-файл был проверен. Всё тоже pxDelayedTaskList 0x2000'136c 0x4 Data Lc tasks.o [1] Cycles::instance()::cyclesPtr 0x2000'1268 0xb0 Data Gb initTask.o [1] // вот этот класс 5 minutes ago, jcxz said: Из них следует только то, что отладчик почему-то считает Но пишет-то процессор. При инициализации поля cmdQueue портится и вторая переменная) 6 minutes ago, jcxz said: Правильные адреса переменных узнаются всегда по .map-файлу Обижаете. map-файл давно знаем и используем. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 7 минут назад, haker_fox сказал: map-файл был проверен. Всё тоже pxDelayedTaskList 0x2000'136c 0x4 Data Lc tasks.o [1] Cycles::instance()::cyclesPtr 0x2000'1268 0xb0 Data Gb initTask.o [1] // вот этот класс И где же они "одинаковые"?? Цитата Но пишет-то процессор. При инициализации поля cmdQueue портится и вторая переменная) Инициализации кем? Программой или вручную через окно отладчика? Из Ваших скриншотов нигде не следует что и куда пишет процессор. А тестовый проект выкладывать Вы не хотите. А значит мы можем только верить Вам на слово и только посочувствовать. Цитата Обижаете. map-файл давно знаем и используем. Ну так он говорит, что адреса разные. См. ваш же пост. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 3 minutes ago, jcxz said: И где же они "одинаковые"?? Неверно выразился. Указатель на класс, да, другой. Но смещение поля cmdQueue как раз попадает на адрес другой переменной. 4 minutes ago, jcxz said: А тестовый проект выкладывать Вы не хотите. Не я. Руководство. Я не на себя работаю.. 5 minutes ago, jcxz said: А значит мы можем только верить Вам на слово и только посочувствовать. Ну чтож) Я всё понимаю. Будет личный проект так себя вести, без колебаний выложу) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 2 минуты назад, haker_fox сказал: Неверно выразился. Указатель на класс, да, другой. Но смещение поля cmdQueue как раз попадает на адрес другой переменной. А где это видно??? Вы сказали, что знаете и используете .map-файл, но так и не привели выдержки из него, которая бы подтверждала Ваши слова о баге. 2 минуты назад, haker_fox сказал: Не я. Руководство. Я не на себя работаю.. Иногда у меня складывается впечатление, что вы работаете рабом на какой-то галере, прикованный цепями к веслу. Уж извините... Ну даже в этом случае - никто не мешает сделать его дома и выложить. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 11 minutes ago, jcxz said: Ну даже в этом случае - никто не мешает сделать его дома и выложить. Не могу рисковать своим положением... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 184 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 4 часа назад, haker_fox сказал: Не могу рисковать своим положением... И дома Вами тоже начальник руководит??? Жесть какая!! А я думал, что крепостное право в России полтора века назад отменили.... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
one_eight_seven 3 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба Судя по интернетам, эта проблема - известная для EWARM, решения нет. Понимаю, интересно разобраться и т.п., но вас правда интересует проблема кластеризации и как именно IAR её реализует и использует для оптимизации? Сравните размер кода с этой птичкой или нет, и решите, устраивает ли вас результат без птички. В общем, самое время применить принцип целебного болтополагания. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
haker_fox 60 9 июня, 2020 Опубликовано 9 июня, 2020 · Жалоба 4 hours ago, jcxz said: И дома Вами тоже начальник руководит??? А вы полагаете, что на форум только я один из отдела хожу? Ну увидят архив с рабочим кодом. По нику меня знают. И вот тебе выговор за официальный слив информации...((( А вообще, ничего смешного. Дома мной и руководят. Мы сейчас всем отделом на удалёнке. 4 hours ago, jcxz said: А я думал, что крепостное право в России полтора века назад отменили.... Крепостное отменили. А вот другого не дали) 3 hours ago, one_eight_seven said: известная для EWARM, решения нет А для каких версий?) На официальном сайте для 7.10 максимум нашёл. Дальше тишина. Нет ли у вас подтверждения, что это актуально и для 8-й ветки? Я не смог найти((( 3 hours ago, one_eight_seven said: но вас правда интересует проблема кластеризации и как именно IAR её реализует и использует для оптимизации? Ну лично интересно, конечно. Но вряд ли смогу узнать, ведь официальная документация очень скромна по этому поводу. 3 hours ago, one_eight_seven said: В общем, самое время применить принцип целебного болтополагания. Спасибо) Я просто сомневался, ведь у меня 8.40.1. собран довольно большой проект для lpc4337-m4f. А там и сетевой стэк, и USB, и сбор данных и куча ещё каких-то приблуд. Понятно, что это редкий баг и не обязан там появляться. Но я всё же стараюсь компилятор, правительство и Билла Гейтса винить в крайнюю очередь))) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться