ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้
-
- По всей видимости, компилятор генерил неподходящие инструкции из-за
того, что некоторых ключей не было. Падало как раз на выходе из
считалки, где было деление на 10. Но падало не там, где была
неверная инструкция, а чуть позже. Nikolay_Po(703 знак., 23.04.2026 23:51)
- Простите, не проснулся похоже... а все же, если misa убрать, изменится поведение? полезно было бы понять где собаки зарыты - Sergei_sR(24.04.2026 08:14)
- Так неинтересно. В кортексах обычно без труда можно было найти
именно ту инструкцию, на которой он спотыкался. А так лучше вообще
откатиться к проверенным тулзам, как справедливо заметил мсье
хомяк. - SciFi(24.04.2026 07:58)
- Компилятор - GCC15, но собран специально для WCH (из дистрибутыва
MRS2) и учитывает специфические расширения. Если оставить настройки
целевого ЦП в Eclipse по-умолчанию, компилятор вызывается с
ключами: Nikolay_Po(833 знак., 24.04.2026 11:45)
- Ну вот "lw a0,0(a0)", нужно отследить, что там в a0. Перед этим
туда прибавляется t1, а оно берётся из стека "lw t1,0(sp)". Может,
тупо адресная арифметика в исходниках кривая, это же Си, там есть
множество способов выстрелить себе в ногу. Или стек испорчен - тоже
бывает чаще, чем хотелось бы. - SciFi(24.04.2026 12:21)
- Проблема в том, что это место вызывается тысячи раз в секунду. И
лишь при некоторой смене состояния - уходит в исключение. Не
получается поймать. Nikolay_Po(325 знак., 24.04.2026 12:34)
- Насчёт illegal instruction - не знаю, после установки нужных ключей, исключения пропали. Проблема с работой программы нашлась - на какой-то из редакций, код обработчика прерывания ошибки I2C оказался сокращён - я его перенёс в другую функцию, а прерывание использовало прежнюю, которая не сбрасывала ошибку и не отключала прерывание. Nikolay_Po(155 знак., 24.04.2026 13:37)
- Проблема в том, что это место вызывается тысячи раз в секунду. И
лишь при некоторой смене состояния - уходит в исключение. Не
получается поймать. Nikolay_Po(325 знак., 24.04.2026 12:34)
- Ну вот "lw a0,0(a0)", нужно отследить, что там в a0. Перед этим
туда прибавляется t1, а оно берётся из стека "lw t1,0(sp)". Может,
тупо адресная арифметика в исходниках кривая, это же Си, там есть
множество способов выстрелить себе в ногу. Или стек испорчен - тоже
бывает чаще, чем хотелось бы. - SciFi(24.04.2026 12:21)
- Компилятор - GCC15, но собран специально для WCH (из дистрибутыва
MRS2) и учитывает специфические расширения. Если оставить настройки
целевого ЦП в Eclipse по-умолчанию, компилятор вызывается с
ключами: Nikolay_Po(833 знак., 24.04.2026 11:45)
- По всей видимости, компилятор генерил неподходящие инструкции из-за
того, что некоторых ключей не было. Падало как раз на выходе из
считалки, где было деление на 10. Но падало не там, где была
неверная инструкция, а чуть позже. Nikolay_Po(703 знак., 23.04.2026 23:51)