GAYVER 2 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба По долгу службы пришлось делать работу штатного программиста и писать драйвер и программу под цинк 7к. До этого момента с витисом дел не имел. и на сях писал толкьо простенькие скетчи для ардуины. И, собственно, в процессе отладки столкнулся с несколькими непонятными моментами. 1. Запускаю дебагер, пошагово выполняю программу. При входе в функцию XEmacPs_BdRingCreate (библиотека "xemacps_bdring.c" драйвера emacps) наблюдаю следующую картину - пошаговый отладчик в линейно написанном коде скачет по строкам как хочет. Условно последовательность выполнения строк может быть - 1-2-3-4-5-10-6-7-15-20-15-16-11-25, итд итп. При том что выполнятся они должны линейно - 1-2-3-4-...-20-21-23-... (ну, за исключением цикла). Код в строчках (если на нее прыгнули) выполняется, переменные переписываются. Вопрос в том что значения этих переменных из-за скачков - не верные. Собственно вопрос - это что за фигня? 2. В этой же функции присутствует цикл на 2 строчки - заполнение адресов цепочки дескрипторов. Ввиду первого пункта этот цикл не выполняется от слова совсем. Счетчик цикла не наращивается. Но было замечено следующее - при удалении объявления переменной счетчика цикла, компилятор не ругается на наличие необъявленной переменной. Компилятор ругается на то что не может найти подключаемую стандартную библиотеку "xil_types.h" в самописной библиотеке, в совершенно другом файле, написанном для работы с микрухой физики. Самописная библиотека до этого была проверена и отлажена. Проверки на двойные включения либ в ней есть. И, собственно, второй вопрос - это что за хрень??? Где связь между необъявленной переменной и включением библиотеки в другом конце кода????? Ну и главный вопрос - куда бежать и что делать? Я сейчас что-то даже поисковый запрос для гугла не могу составить... Фиг знает что у него спрашивать, чтобы адекватный ответ получить Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба 15 минут назад, GAYVER сказал: 1. Запускаю дебагер, пошагово выполняю программу... Собственно вопрос - это что за фигня? Вероятно, программа собрана под ненулевым уровнем оптимизации. В оптимизированной программе зависимости между Си и реальным дизасм-выхлопом ломаются от слова совсем. По второму пункту - опять же - если смотрите под отладчиком на оптимизации - то занятие бесполезное. На выходе из функции если результат правильный - значит все ок. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба 19 минут назад, Arlleex сказал: Вероятно, программа собрана под ненулевым уровнем оптимизации. В оптимизированной программе зависимости между Си и реальным дизасм-выхлопом ломаются от слова совсем. По второму пункту - опять же - если смотрите под отладчиком на оптимизации - то занятие бесполезное. На выходе из функции если результат правильный - значит все ок. В "дебаг конфигкрейшен" не нашел никаких настроек а-ля "оптимизировать". Да и за несколько месяцев отладки, думаю, уже бы заметил подобное поведение отладчика... До этого момента все было как и положенно - линейный сишный код, линейно по нему проходим апд в настройках си билдера оптимизейшен левел - 0. Т.е. выключен Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба Только что, GAYVER сказал: Да и за несколько месяцев отладки, думаю, уже бы заметил подобное поведение отладчика... До этого момента все было как и положенно - линейный сишный код, линейно по нему проходим Да для этого файла может быть отдельная опция - с каким уровнем оптимизировать, вот для других и не замечали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба 5 минут назад, Arlleex сказал: Да для этого файла может быть отдельная опция - с каким уровнем оптимизировать, вот для других и не замечали. а не подскажете тогда - где смотреть эти настройки? апд функция возвращает не совсем то, что я ожидаю. собственно поэтому и полез во внутрянку - смотреть что там происходит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Arlleex 131 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба Ну, тут я только задал направление поисков)) А с эклипса под рукой нет, чтобы точно что-то написать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба Только что, Arlleex сказал: Ну, тут я только задал направление поисков)) А с эклипса под рукой нет, чтобы точно что-то написать... Не прокатило... Но таки спасибо - сходим в этом направлении 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 8 15 сентября, 2023 Опубликовано 15 сентября, 2023 · Жалоба Если код оптимитзирован, а пошагово пройти все-таки нужно, то нужно переключиться в другое View/отображение кода - в ассемблерное. И будете проходить его без всяких непонятных скачков по коду. Обычно нормальные IDE здесь же показывают куски исходного C кода, соответствующие показанным оттранслированным ассемблерным. Так что все хорошо видно и понятно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 18 сентября, 2023 Опубликовано 18 сентября, 2023 · Жалоба а как быть со 2 пунктом? где связь между счетчиком цикла и в невозможности включить станадарнтую библиотеку в другом конце кода? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Raven 8 18 сентября, 2023 Опубликовано 18 сентября, 2023 · Жалоба 2 hours ago, GAYVER said: а как быть со 2 пунктом? где связь между счетчиком цикла и в невозможности включить станадарнтую библиотеку в другом конце кода? А вы посмотрели получившийся после оптимизации ассемлерный код этого цикла? Это не помогло прояснить ситуацию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 14 часов назад, Raven сказал: А вы посмотрели получившийся после оптимизации ассемлерный код этого цикла? Это не помогло прояснить ситуацию? оптимизация отключена. это раз. как посмотреть разрешения на оптимизацию отдельно взятого файла я так и не нашел. два - компилятор при прогоне кода при любых раскладах должен ругаться на использование не объявленной переменной. этого не будет только в том случае, если цикл вырождается в 1 прогон. т.е. просто в однократное линейное выполнение операторов в теле цикла. но этого не может быть потому, что верхняя граница цикла - параметр, передаваемый в функцию. который является ненулевой константой. по крайней мере на этапе отладки. в дальнейшем будет переменной Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 192 19 сентября, 2023 Опубликовано 19 сентября, 2023 · Жалоба 8 минут назад, GAYVER сказал: как посмотреть разрешения на оптимизацию отдельно взятого файла я так и не нашел Смотрите параметры компилятора при компиляции интересного вам файла. Или есть другой вариант - использовать pragma GCC optimize для выбора нужного вам уровня оптимизации в интересующем вас файле - https://codeforces.com/blog/entry/96344 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Strob 0 20 сентября, 2023 Опубликовано 20 сентября, 2023 · Жалоба Иногда нечто подобное начинается если вы читаете или пишете в регистры плис не используя для этого волатильные указатели/переменные. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
leen 0 17 октября, 2023 Опубликовано 17 октября, 2023 · Жалоба Не знаю, возможно, поздно, но тем не менее: В витисе есть рабочий проект со своими настройками оптимизации, а есть т.н. platform project, включающий в себя board support package, в том числе локальные копии драйверов периферии, имеющейся (включенной) в проекте ПЛИС. Так вот они имеют свои уровни оптимизации - по умолчанию -O2, и из диалога изменения bsp это не правится. Я правлю ручками в мейкфайлах (благо, их немного), если захочется полазить дебагером по драйверам. Но это до первого реимпорта xsa-файла из Vivado, потом все возвращается на круги своя. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
GAYVER 2 2 ноября, 2023 Опубликовано 2 ноября, 2023 · Жалоба В 17.10.2023 в 04:32, leen сказал: Не знаю, возможно, поздно, но тем не менее: В витисе есть рабочий проект со своими настройками оптимизации, а есть т.н. platform project, включающий в себя board support package, в том числе локальные копии драйверов периферии, имеющейся (включенной) в проекте ПЛИС. Так вот они имеют свои уровни оптимизации - по умолчанию -O2, и из диалога изменения bsp это не правится. Я правлю ручками в мейкфайлах (благо, их немного), если захочется полазить дебагером по драйверам. Но это до первого реимпорта xsa-файла из Vivado, потом все возвращается на круги своя. спасибо. это уже ближе к истине и по конкретике 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться