-
- Такого быть не должно. Единственная возможность для такого глюка - если по какой-то причине UkSoket не инициализируется в стартапе. Надо смотреть стартап. - il-2(23.10.2024 07:23)
- Поскольку UkSocket - беззнаковое , то после его инкремента условие
>=1 - всегда выполняется. Есть повод порезвиться оптимизатору. Samx(123 знак., 22.10.2024 23:49)
- Формально нет, т.к. 0xFFFF+1=0 - AlexBi(23.10.2024 10:23)
- При самом первом вызове функции UkSoket не инициализирован, но
используется: Samx(73 знак., 22.10.2024 20:58)
- Там проблема в другом. Статические переменые автоматически инициализируются 0. framer(528 знак., 22.10.2024 21:01, ссылка)
- Внезапно! Объявил UkSoket как long... заработало - IBAH(22.10.2024 20:17)
- Понятно почему заработало? Если нет, значит, ещё не нашли причину. - Nikolay_Po(22.10.2024 20:23)
- пока ничего не понятно. Я не сказал, у меня КортексМ0, я подозреваю
это какая-то его фишка - IBAH(22.10.2024 20:25)
- Это не может быть фишкой. Скорей всего чтото не коректно пишет в
.bss и надписывает перемнную и проблема может быть в другом месте.
Это может обяснить почему при изменении на long ситуация меняеться
(скорей всего меняеться место переменной в памяти). Проблема может
появиться в другом месте. Надо распечатать .map и посмотреть что
стоит рядом может чтото и выяснится. - framer(22.10.2024 20:33)
- Посмотрел, ничего не пересекается IBAH(502 знак., 22.10.2024 21:03)
- А что у Вас с TxLink? Вроде как один байт а работаете как с таблицей и находится по соседству framer(65 знак., 22.10.2024 21:12)
- Посмотрел, ничего не пересекается IBAH(502 знак., 22.10.2024 21:03)
- Типа невыровненного доступа? Может, структуры ваших сокетов нужно
было объявить packet? - Nikolay_Po(22.10.2024 20:29)
- Есть подозрение, что UkSoket, размещается не выровненное, а
обращение идет как выровненному, или что-то в этом роде. - IBAH(22.10.2024 20:39)
- Может, всё-таки баг компилятора? - Nikolay_Po(22.10.2024 20:43)
- Баги в коде встречаются over9000 раз чаще. И мы видим лишь маленький кусочек кода. - SciFi(22.10.2024 20:51)
- Может, всё-таки баг компилятора? - Nikolay_Po(22.10.2024 20:43)
- Есть подозрение, что UkSoket, размещается не выровненное, а
обращение идет как выровненному, или что-то в этом роде. - IBAH(22.10.2024 20:39)
- Это не может быть фишкой. Скорей всего чтото не коректно пишет в
.bss и надписывает перемнную и проблема может быть в другом месте.
Это может обяснить почему при изменении на long ситуация меняеться
(скорей всего меняеться место переменной в памяти). Проблема может
появиться в другом месте. Надо распечатать .map и посмотреть что
стоит рядом может чтото и выяснится. - framer(22.10.2024 20:33)
- пока ничего не понятно. Я не сказал, у меня КортексМ0, я подозреваю
это какая-то его фишка - IBAH(22.10.2024 20:25)
- Понятно почему заработало? Если нет, значит, ещё не нашли причину. - Nikolay_Po(22.10.2024 20:23)
- Чудеса... Заремил инкременты, таже хня IBAH(1141 знак., 22.10.2024 19:54)
- Короче, работает только на нулевом и первом уровне оптимизации. - IBAH(22.10.2024 19:23)
- Вот это: "ConnectTCP[UkSoket]!=0" может становиться истиной? Как
только истина - так и выход. - Nikolay_Po(22.10.2024 19:21)
- После каждого инкремента UkSoket, идет проверка. Он никак не может быть отличным от
нуля. Проблема в том компилятор о чем-то догадывается и слишком
много на себя берет. Без оптимизации ведь работает. - IBAH(22.10.2024 19:28)
- Это кое-кто не догадался (не компилятор) и не объявил как volatile переменную, которая внезапно меняется вне контекста либо вашего
кода, либо внутри функции, которую вы вызываете. - Nikolay_Po(22.10.2024 19:39)
- Да они все статик, и UkSoket, и SoketTx. Нигде за пределами функции
не существуют - IBAH(22.10.2024 19:46)
- Прерывания в системе включены, в принципе? - Nikolay_Po(22.10.2024 19:59)
- Есть конечно, уарты, дма, системный таймер... - IBAH(22.10.2024 20:03)
- И какой side effect они производят? Они ни от чего не зависят? От
аппаратуры? - Nikolay_Po(22.10.2024 19:56)
- Не от чего не зависят. Просто статические переменные внутри функции - IBAH(22.10.2024 20:00)
- А массив ConnectTCP? - Nikolay_Po(22.10.2024 20:18)
- И TxHead и TxTail? Оно же у вас разгребается другим кодом и вне контекста (в прерываниях выполнения кода ваших функций). Все эти массивы объявите volatile (если они меняются не только в вашей функции или их результатами могут воспользоваться другие функции до выхода из вашей). - Nikolay_Po(22.10.2024 20:22)
- тоже статик но на уровне модуля. Тут не никакой многопоточности,
все на КА - IBAH(22.10.2024 20:22)
- То есть, ОСРВ нет, просто крутится конечный автомат? А вложенных вызовов, рекурсий - нет? - Nikolay_Po(22.10.2024 20:25)
- А массив ConnectTCP? - Nikolay_Po(22.10.2024 20:18)
- Не от чего не зависят. Просто статические переменные внутри функции - IBAH(22.10.2024 20:00)
- Прерывания в системе включены, в принципе? - Nikolay_Po(22.10.2024 19:59)
- Это к примеру проверки качества кода - если ломается при включении оптимизации - значит, содержит ошибки, как минимум, в объявлении переменных. Как максимум - в нарушении неделимости доступа к данным. - Nikolay_Po(22.10.2024 19:40)
- Да они все статик, и UkSoket, и SoketTx. Нигде за пределами функции
не существуют - IBAH(22.10.2024 19:46)
- Это кое-кто не догадался (не компилятор) и не объявил как volatile переменную, которая внезапно меняется вне контекста либо вашего
кода, либо внутри функции, которую вы вызываете. - Nikolay_Po(22.10.2024 19:39)
- После каждого инкремента UkSoket, идет проверка. Он никак не может быть отличным от
нуля. Проблема в том компилятор о чем-то догадывается и слишком
много на себя берет. Без оптимизации ведь работает. - IBAH(22.10.2024 19:28)
- Я б UkSoket все-таки инициализировал явно... - LightElf(22.10.2024 18:55)
- Не помогает... Убрал оптимизацию полет, полет нормальный - IBAH(22.10.2024 19:04)
- Попробуйте, смеха ради, переменные сделать волатильными. У меня был
прикол с очень умным компилятором. Без дураков, умным,
оптимизировал в тютельку. Но по уму не работает. - mse homjak(22.10.2024 19:36)
- Пробовал, не помогает... - IBAH(22.10.2024 20:08)
- Попробуйте, смеха ради, переменные сделать волатильными. У меня был
прикол с очень умным компилятором. Без дураков, умным,
оптимизировал в тютельку. Но по уму не работает. - mse homjak(22.10.2024 19:36)
- Не помогает... Убрал оптимизацию полет, полет нормальный - IBAH(22.10.2024 19:04)