-
- Было такое. Не лечится. - RxTx(26.12.2020 19:49)
- Похоже, что да - не лечится. Просмотр SFR сделан отвратительно и
скорее не работает. Вставлял тут dummy-read - читаю что нужно
(хорошо хоть это показывать не разучилось), а в окошке всё
неизменно. Потом может очнуться и показать, хоть кнопы никто
никакие уже не трогает с полминуты:) - Vit(27.12.2020 13:22)
- Конкретно как ты читаешь? У меня и watches нефига не работают - Make_Pic(27.12.2020 14:33)
- Завожу переменную volatile, в неё читаю, потом добавляю пургу с
нею, типа инкремент, декремент. Обычно, особенно при нулевой
оптимизации, такое компилятор не выбрасывает - Vit(27.12.2020 17:39)
- После записи нужно ещё мемори-барьер. Иначе записать может
когда-нибудь потом, в будущем, в конце функции. - fk0(27.12.2020 18:06)
- для volatile мало инкремента? странное предположение, КМК. кстати,
а есть у PIC24F барьеры в явном виде? - Vit(27.12.2020 18:37)
- volatile говорит, что в ячейку памяти связанную с переменной нужно
записать. Но он не говорит, что записать нужно прямо сейчас.
Компилятор волен переупорядочить инструкции и эту запись сделать
сильно позже или сильно раньше. На моей практике встречалось
перекидывание таких записей в конец функции (где, видимо, есть
свободные для работы регистры). - fk0(27.12.2020 20:33)
- В дебаггере хожу ПО ШАГАМ! Для самых умных добавлю - специально в функции убрал обращения не к volatile - все обращения к SFR, ну и вот к дамми-переменной пришлось
добавлять, чтобы увидеть, что IDE - таки ГОВНО. Что, где и когда
должно тасоваться? Какая б@#$ь мне не хочет показывать SFR? Кстати,
в хедерах так и не нашёл, где объявлены регистры, а не битовые
структуры. Типа интринсик гуано в компиляторе зарыто. может оно там
и не volatile? Хотя что со Vit(40 знак., 27.12.2020 21:03)
- Да хоть на голове ходи! Или компилируй без оптимизации с -O0, или
порядок обращения с volatile-переменным и SFR-регистрам может
отличаться от порядка обращения к другим переменным и не совпадать
со строчками кода. Я не про конкретную IDE и компилятор, а вообще.
Просто, чтоб напомнить, что компилятор вправе иметь свой взгляд на
последовательность инструкций. Естесственным барьером является
вызов функции: перед вызовом, или в конце функции, точно всё
сделается, что должно было fk0(13 знак., 27.12.2020 23:50)
- Я понял, что ты вааще. Тут же трабла не в неправильном порядке
выполнения, а в том, что IDE не обновляет окошко с SFR-ами. Точнее,
с рандомной паузой таки может. Почему спросил о нативных барьерах
(функции компилер тоже может заинлайнить) - не со всеми регистрами
одинаково хреново. Есть предположение, что связано с тем, что
таймер MCCP в асинхронном режиме и тактируется от генератора
часового кварца, ну а дальше всякие фризы, характерные для дебага
могут быть. Аналогичные Vit(86 знак., 28.12.2020 00:10)
- Если открыто окно с дампом достаточно большого участка памяти, то
виснет на время считывания этого участка. Помню сталкивался с
чем-то таким. После этого дампом памяти пользовался в режиме
открыл-закрыл, и только если очень надо. - AlexBi(28.12.2020 11:59)
- Красавцы сами все SFR в одно окно засунули. - Vit(29.12.2020 01:21)
- Если открыто окно с дампом достаточно большого участка памяти, то
виснет на время считывания этого участка. Помню сталкивался с
чем-то таким. После этого дампом памяти пользовался в режиме
открыл-закрыл, и только если очень надо. - AlexBi(28.12.2020 11:59)
- Я понял, что ты вааще. Тут же трабла не в неправильном порядке
выполнения, а в том, что IDE не обновляет окошко с SFR-ами. Точнее,
с рандомной паузой таки может. Почему спросил о нативных барьерах
(функции компилер тоже может заинлайнить) - не со всеми регистрами
одинаково хреново. Есть предположение, что связано с тем, что
таймер MCCP в асинхронном режиме и тактируется от генератора
часового кварца, ну а дальше всякие фризы, характерные для дебага
могут быть. Аналогичные Vit(86 знак., 28.12.2020 00:10)
- Да хоть на голове ходи! Или компилируй без оптимизации с -O0, или
порядок обращения с volatile-переменным и SFR-регистрам может
отличаться от порядка обращения к другим переменным и не совпадать
со строчками кода. Я не про конкретную IDE и компилятор, а вообще.
Просто, чтоб напомнить, что компилятор вправе иметь свой взгляд на
последовательность инструкций. Естесственным барьером является
вызов функции: перед вызовом, или в конце функции, точно всё
сделается, что должно было fk0(13 знак., 27.12.2020 23:50)
- Порядок обращений к volatile переставлять не имеет права. Такшта не в тему >>> - SciFi(27.12.2020 20:36, ссылка)
- В дебаггере хожу ПО ШАГАМ! Для самых умных добавлю - специально в функции убрал обращения не к volatile - все обращения к SFR, ну и вот к дамми-переменной пришлось
добавлять, чтобы увидеть, что IDE - таки ГОВНО. Что, где и когда
должно тасоваться? Какая б@#$ь мне не хочет показывать SFR? Кстати,
в хедерах так и не нашёл, где объявлены регистры, а не битовые
структуры. Типа интринсик гуано в компиляторе зарыто. может оно там
и не volatile? Хотя что со Vit(40 знак., 27.12.2020 21:03)
- Нет там никаких барьеров. Кэшей нет. Volatile всегда
инкрементируется по месту. Гляньте дизассемблер. Nikolay_Po(227 знак., 27.12.2020 19:52)
- Теме уже 13 лет. Нельзя быть столько необучаемыми, ОМГ... volatile
инкрементируется, но вот о том, что "по месту" -- никто не обещал. - fk0(27.12.2020 20:36, ссылка, ссылка)
- Если по ходу исполнения программы, volatile-переменной
присваивается значение, то все действия, определяющие новое
значение, будут выполнены до присвоения. Остальное, что на volatile
переменную не влияет, скорее всего будет удалено из машинного кода. Nikolay_Po(242 знак., 27.12.2020 21:44)
- Дада, только присвоение можно увидеть не в этой строчке кода, а где-то в конце функции. А до того значение заботливо пряталось в регистрах и сохранялось через push/pop. Я вот о чём. Почему так -- х.з. видимо этих самых регистров не хватало для вычисления адреса volatile переменной, присвоить в конце (когда масса регистров уже не нужна) выгодней. - fk0(27.12.2020 23:52)
- Если по ходу исполнения программы, volatile-переменной
присваивается значение, то все действия, определяющие новое
значение, будут выполнены до присвоения. Остальное, что на volatile
переменную не влияет, скорее всего будет удалено из машинного кода. Nikolay_Po(242 знак., 27.12.2020 21:44)
- Я и так прекрасно знаю, что, где и когда должно обновиться, кроме,
сцуко, окна SFR:) И дизассемблер как бы не должен влиять на
отбражение SFR - Vit(27.12.2020 20:10)
- Этот SFR, вообще, должен читаться? Не все спец. регистры при чтении
дадут то, что в них записали! - Nikolay_Po(27.12.2020 21:27)
- Представляете, не только по доке, но даже в переменную читается
(правильное значение), которая заведена для dummy-read (чуть выше
есть об этом, если что). Вот только IDE грустное. Но мы прорвемся.
Я даже не жалуюсь. Просто иногда негодую. Кому-то и через блинк
отладку делать интересно. Не верю, что это удобно и экономит вермя
и деньги, но это их Дао. Мне вот интересно, за что эти мелкочипы
хотят денег в платной версии? Оптимизацию по совету коллег включал
как в коммерческой - Vit(450 знак., 27.12.2020 22:05)
- Про то, что MPLABX -- говнище, было сказано ещё более 10 лет
назад... С другой стороны, глядеть SFR регистры -- это не самое
главное, что нужно. Да и потом регистры же могут быть write only,
или чтение может иметь побочные эффекты (чтение регистра приёма
UART, например). Как спрашивается отладчику быть? Знать все
регистры и все биты для данной архитектуры? Главное в отладчике --
работающий printf (или свой на UART делай), брейкпоинты,
возможность рассмотреть стек и fk0(38 знак., 27.12.2020 23:55)
- Отладчику быть хотя бы не хуже, чем у других. И оно проявляется и на пиккит3, и на пикккит4. Просто я лезу туда, где явного описаня по мануалу не видно. Несколько неприятно, что пишу в регистр управления, читаю регистр статуса, а его значение и то, что показывает SFR-окошко, разные - Vit(28.12.2020 00:15)
- Про то, что MPLABX -- говнище, было сказано ещё более 10 лет
назад... С другой стороны, глядеть SFR регистры -- это не самое
главное, что нужно. Да и потом регистры же могут быть write only,
или чтение может иметь побочные эффекты (чтение регистра приёма
UART, например). Как спрашивается отладчику быть? Знать все
регистры и все биты для данной архитектуры? Главное в отладчике --
работающий printf (или свой на UART делай), брейкпоинты,
возможность рассмотреть стек и fk0(38 знак., 27.12.2020 23:55)
- Давайте не будем задавать вопросы типа "а вилку в розетку вставить не забыли?" Во всяком случае, этому сахарчанину :-) - SciFi(27.12.2020 21:31)
- Представляете, не только по доке, но даже в переменную читается
(правильное значение), которая заведена для dummy-read (чуть выше
есть об этом, если что). Вот только IDE грустное. Но мы прорвемся.
Я даже не жалуюсь. Просто иногда негодую. Кому-то и через блинк
отладку делать интересно. Не верю, что это удобно и экономит вермя
и деньги, но это их Дао. Мне вот интересно, за что эти мелкочипы
хотят денег в платной версии? Оптимизацию по совету коллег включал
как в коммерческой - Vit(450 знак., 27.12.2020 22:05)
- Этот SFR, вообще, должен читаться? Не все спец. регистры при чтении
дадут то, что в них записали! - Nikolay_Po(27.12.2020 21:27)
- Теме уже 13 лет. Нельзя быть столько необучаемыми, ОМГ... volatile
инкрементируется, но вот о том, что "по месту" -- никто не обещал. - fk0(27.12.2020 20:36, ссылка, ссылка)
- Можно попробовать asm(:::memory) ; Встречал такие конструкции для avr, cortex. Но то gcc был. - Dingo(27.12.2020 19:11)
- volatile говорит, что в ячейку памяти связанную с переменной нужно
записать. Но он не говорит, что записать нужно прямо сейчас.
Компилятор волен переупорядочить инструкции и эту запись сделать
сильно позже или сильно раньше. На моей практике встречалось
перекидывание таких записей в конец функции (где, видимо, есть
свободные для работы регистры). - fk0(27.12.2020 20:33)
- для volatile мало инкремента? странное предположение, КМК. кстати,
а есть у PIC24F барьеры в явном виде? - Vit(27.12.2020 18:37)
- После записи нужно ещё мемори-барьер. Иначе записать может
когда-нибудь потом, в будущем, в конце функции. - fk0(27.12.2020 18:06)
- Завожу переменную volatile, в неё читаю, потом добавляю пургу с
нею, типа инкремент, декремент. Обычно, особенно при нулевой
оптимизации, такое компилятор не выбрасывает - Vit(27.12.2020 17:39)
- Конкретно как ты читаешь? У меня и watches нефига не работают - Make_Pic(27.12.2020 14:33)
- Похоже, что да - не лечится. Просмотр SFR сделан отвратительно и
скорее не работает. Вставлял тут dummy-read - читаю что нужно
(хорошо хоть это показывать не разучилось), а в окошке всё
неизменно. Потом может очнуться и показать, хоть кнопы никто
никакие уже не трогает с полминуты:) - Vit(27.12.2020 13:22)
- есть такое, и не только с IO но с рон/памятью. забил. - m16(26.12.2020 19:26)
- Никак не лечится? - Make_Pic(26.12.2020 19:34)
- С чем это связано - с MPLAB X или с PICkit4? Watches работают? - Make_Pic(26.12.2020 19:37)
- Watches работают криво , в рон/памяти меняется бит содержимое не
краснеет. приходится глазками анализировать. с MPLAB X 4.15 такой
хрени не было. есть положительные моменты : отладка начинается без
тормозов, по брекпоинту останавливается чётко(ранее через 1-2
команды). pic24h. - m16(26.12.2020 20:13)
- Если бряк работает без проскальзывания. значит это СОФТОВЫЙ бряк. В
пиккит4 софтовые бряки имеются (не для всех МК) и их количество
неограничено. Только нужно учесть, что софтовые бряки прошиваются
как код. То есть тратят ресурс флеша, в отличии от хардварных. - my504(26.12.2020 20:23)
- это понятно, отключаешь софтовый - сразу пропуски, дерьмо одним
словом а не отладка. у амела с отладкой всё пучком даже в древнем
JTAG ICE а DRAGON - вообще песня. в pickit4 стоит 300мгц пик32 а
толку? - m16(26.12.2020 21:17)
- Проскальзывание связано не с инструментом, а с самой архитектурой
отладки. Если честно, то я не очень понимаю причитания по этому
поводу. Всё что может быть отлажено с бряками, спокойно с ними
отлаживается и с проскальзыванием. Тем более, что проскальзывание
видно только в АСМе. Кстати, в ПИКкит4 стали доступны бряки на лету
и бряки с условиями. Что там у вас за проблема такая? - my504(27.12.2020 09:38)
- да нет проблем, просто есть с чем сравнить отладку. - m16(27.12.2020 18:58)
- Проскальзывание связано не с инструментом, а с самой архитектурой
отладки. Если честно, то я не очень понимаю причитания по этому
поводу. Всё что может быть отлажено с бряками, спокойно с ними
отлаживается и с проскальзыванием. Тем более, что проскальзывание
видно только в АСМе. Кстати, в ПИКкит4 стали доступны бряки на лету
и бряки с условиями. Что там у вас за проблема такая? - my504(27.12.2020 09:38)
- Посмотрел бирку? Тест был отрицательным? - RxTx(26.12.2020 20:46)
- Посмотрел сегодня. Одна из катушек: my504(1 знак., 28.12.2020 12:09, картинка)
- Пасиб, схоронил. - RxTx(28.12.2020 14:10)
- Сегодня был на работе, но забыл... ((( Совершенно вышибло из памяти. Главное ходил вокруг вспоминал что то... Склероз, мать его... - my504(26.12.2020 20:56)
- Посмотрел сегодня. Одна из катушек: my504(1 знак., 28.12.2020 12:09, картинка)
- Ты еще поясни что "ресурс флеша" это количество циклов
erase-programming. Тратится каждый раз как ставишь-убираешь bp. - RxTx(26.12.2020 20:41)
- Ну так это объяснял Микрочип. Только не весь флеш, а выделяемая под дебаг область. - my504(26.12.2020 20:53)
- это понятно, отключаешь софтовый - сразу пропуски, дерьмо одним
словом а не отладка. у амела с отладкой всё пучком даже в древнем
JTAG ICE а DRAGON - вообще песня. в pickit4 стоит 300мгц пик32 а
толку? - m16(26.12.2020 21:17)
- Если бряк работает без проскальзывания. значит это СОФТОВЫЙ бряк. В
пиккит4 софтовые бряки имеются (не для всех МК) и их количество
неограничено. Только нужно учесть, что софтовые бряки прошиваются
как код. То есть тратят ресурс флеша, в отличии от хардварных. - my504(26.12.2020 20:23)
- C отладочными "кишками" самих чипов, имхо... - Гyдвин(26.12.2020 19:44)
- у меня pic16lf1947 - Make_Pic(26.12.2020 19:51)
- Watches работают криво , в рон/памяти меняется бит содержимое не
краснеет. приходится глазками анализировать. с MPLAB X 4.15 такой
хрени не было. есть положительные моменты : отладка начинается без
тормозов, по брекпоинту останавливается чётко(ранее через 1-2
команды). pic24h. - m16(26.12.2020 20:13)
- С чем это связано - с MPLAB X или с PICkit4? Watches работают? - Make_Pic(26.12.2020 19:37)
- Никак не лечится? - Make_Pic(26.12.2020 19:34)
- Было такое. Не лечится. - RxTx(26.12.2020 19:49)