-
- Ну да, ну да.. олух-программист понадеялся на наследование, так
сказать, банка регистров. А оно вон оно как ))... POV(108 знак., 05.06.2023 13:57, ссылка)
- Нашёл ещё подозрения на косяки. Убрал везде using - прошивка просто
летает. Все новые 30 плат и 15 предыдущих проверены, всё как
часики. От так уот.. вроде работало, но как-то на полшишечки, тесты
не везде позволили ошибке проявиться. - POV(06.06.2023 11:44)
- Не знаю, у меня с using работает быстрее, чем без. Оно и понятно: не надо перегружать контекст. - _volkanaft_(06.06.2023 12:27)
- Поздравляю с решением! - Dingo(06.06.2023 11:47)
- Нашёл ещё подозрения на косяки. Убрал везде using - прошивка просто
летает. Все новые 30 плат и 15 предыдущих проверены, всё как
часики. От так уот.. вроде работало, но как-то на полшишечки, тесты
не везде позволили ошибке проявиться. - POV(06.06.2023 11:44)
- Кейл умеет дизассемблер показывать и в нём шагать? Может стоит попробовать? Или он вам неинформативен будет? Тут ещё где-то пролетала тема, что в версии для х51 может одна и та же область под разные переменные использоваться, вроде как using или подобная директива лечила. Dingo(445 знак., 05.06.2023 05:03)
- 1) temp где нибудь ранее инициализировалось явно в "ноль" ? и далее по алгоритму (иначе переполнение) Zoro(127 знак., 04.06.2023 18:49)
- Как я понимаю речь про SiLabs C8051F120 или что-то 100 серии (твой
любимый, не помню). Плавающая точка _очень_ медленная. За время
пока вычисляется выражение может набежать переполнение счётчика.
Прерывание/счётчик остановлены? t16 объявлена volatile? Обязательно
ли умножать на 0.12, может быть разделить на 8 (*0.125) достаточно
и сделать это сдвигом (t16 >> 3)? У меня в F380 нет
регистра PCA0_T, вместо него PCA0L и PCA0H, которые надо читать в
нужной Costic(106 знак., 04.06.2023 14:06, картинка)
- +1. Я ни разу не программист, хотя приходилось этим заниматься. Я
бы заменил операцию с float на операцию с uint32, тем более, что
исходное число uint16. Переводим t16 в формат какой-нибудь t32 и
вместо умножения float на 0,12 делаем целочисленное умножение на
7864(=0.12*65536) и сдвиг на 16 вправо (/65536). - reZident(04.06.2023 17:14)
- Это разовая операция после старта прошивки - по появлению
синхроимпульса зашли в прерывания, произвели вычисления и больше
там никогда не бываем. Так что пофиг насколько гемморно софтверная
плавучка реализуется... POV(77 знак., 04.06.2023 17:19)
- Я конечно еще тот "знаток" Си, но стараюсь никогда не пренебрегать
явными указаниями типов при неявных приведениях этих типов во время операций. Добавьте на всякий
случай явное указание типа константы (0.12f), вдруг поможет? - reZident(04.06.2023 17:51)
- Пляски с бубном - это скучно... К тому же там double == float. - SciFi(04.06.2023 17:53)
- Я бы в прерывании ничего не считал, просто прочитал бы нужный регистр и передал сигнал в фоновый поток, а он там всё посчитал бы. - SciFi(04.06.2023 17:21)
- Я конечно еще тот "знаток" Си, но стараюсь никогда не пренебрегать
явными указаниями типов при неявных приведениях этих типов во время операций. Добавьте на всякий
случай явное указание типа константы (0.12f), вдруг поможет? - reZident(04.06.2023 17:51)
- Это разовая операция после старта прошивки - по появлению
синхроимпульса зашли в прерывания, произвели вычисления и больше
там никогда не бываем. Так что пофиг насколько гемморно софтверная
плавучка реализуется... POV(77 знак., 04.06.2023 17:19)
- Всё остановлено, никаких прерываний (собссно внутри прерывания это
всё и делается, перебить никто не может). Видно же по скринам
отладчика - именно вычисления неверно выполняются... POV(111 знак., 04.06.2023 16:27)
- Может, у тебя отсутствие реентерабельности играет? - SciFi(04.06.2023 16:30)
- Я вот не уверен, что кейловская плавучая библиотека реентерабельна.
Кейловцы такие затейники. - LightElf(04.06.2023 18:57)
- Есть приличного габарита проекты с плавучкой. Никогда никаких
проблем. - POV(04.06.2023 20:14 - 22:11)
- Пишут, что есть там реентерабельность кроме некоторых функций типа
синуса >>> SciFi(1 знак., 04.06.2023 20:21, ссылка)
- Ну это логично.. как без рентабельности хотя бы базовых операций. - POV(04.06.2023 22:11)
- Пишут, что есть там реентерабельность кроме некоторых функций типа
синуса >>> SciFi(1 знак., 04.06.2023 20:21, ссылка)
- Есть приличного габарита проекты с плавучкой. Никогда никаких
проблем. - POV(04.06.2023 20:14 - 22:11)
- Это всё локальные переменные. PAC0_T - это регистровая пара (sfr16)
и она прочиталась нормально (число 191). - POV(04.06.2023 16:45)
- Здрассте, приехали. Ты разве не в курсе, что у Keil51 "локальные"
переменные не такие уж локальные? SciFi(2 знак., 04.06.2023 16:54, ссылка, ссылка)
- Есхи хватает регистров текущего банка (или указанного через using),
то локальные переменные - это регистры. Иначе жёстко назначает
адреса. Причём в моем случае это все делается внутри
неперебиваемого прерывания - как бы то ни было, посчитать должен
был верно. - POV(04.06.2023 17:04)
- Но считает неверно. То есть какие-то неведомые чудеса там
происходят. Как бы надо докопаться до истины, иначе страшно.
Надеюсь, это изделие не грозит здоровью юзверей? - SciFi(04.06.2023 17:07)
- Нет, конечно. Сбой нестрашный, через пень-колоду оно свои функции
выполняет, уверен потребитель даже не заметит если оно начнёт
как-то не так работать )) - POV(04.06.2023 17:10)
- лет много назад студенты у меня вписали плавучку в прерывания,
процессор был tms28f какой-то и оно не работало, ибо слишком долго
считалось. а вычисляло оно данные для загрузки dds, в итоге частота
менялась не так и не тогда, когда нужно было. - Alex68(04.06.2023 17:35)
- Да какая разница плавучка или нет и где оно используется? Работает и ладненько, аппаратные средства под задачу выбраны достаточные. Да и в банальной арифметики косяков ранее замечено не было. Наверное линковщик переменные через жопу раскидал, друг друга эти локальные переменные портят. POV(1 знак., 04.06.2023 17:39, ссылка)
- лет много назад студенты у меня вписали плавучку в прерывания,
процессор был tms28f какой-то и оно не работало, ибо слишком долго
считалось. а вычисляло оно данные для загрузки dds, в итоге частота
менялась не так и не тогда, когда нужно было. - Alex68(04.06.2023 17:35)
- Нет, конечно. Сбой нестрашный, через пень-колоду оно свои функции
выполняет, уверен потребитель даже не заметит если оно начнёт
как-то не так работать )) - POV(04.06.2023 17:10)
- Но считает неверно. То есть какие-то неведомые чудеса там
происходят. Как бы надо докопаться до истины, иначе страшно.
Надеюсь, это изделие не грозит здоровью юзверей? - SciFi(04.06.2023 17:07)
- Есхи хватает регистров текущего банка (или указанного через using),
то локальные переменные - это регистры. Иначе жёстко назначает
адреса. Причём в моем случае это все делается внутри
неперебиваемого прерывания - как бы то ни было, посчитать должен
был верно. - POV(04.06.2023 17:04)
- Здрассте, приехали. Ты разве не в курсе, что у Keil51 "локальные"
переменные не такие уж локальные? SciFi(2 знак., 04.06.2023 16:54, ссылка, ссылка)
- Я вот не уверен, что кейловская плавучая библиотека реентерабельна.
Кейловцы такие затейники. - LightElf(04.06.2023 18:57)
- Может, у тебя отсутствие реентерабельности играет? - SciFi(04.06.2023 16:30)
- +1. Я ни разу не программист, хотя приходилось этим заниматься. Я
бы заменил операцию с float на операцию с uint32, тем более, что
исходное число uint16. Переводим t16 в формат какой-нибудь t32 и
вместо умножения float на 0,12 делаем целочисленное умножение на
7864(=0.12*65536) и сдвиг на 16 вправо (/65536). - reZident(04.06.2023 17:14)
- Я бы попробовал для начала запретить прерывания. Может призрак коммунизма бродит в твоей программе, и совсем не там где ты ищешь. - il-2(04.06.2023 12:55)
- Бывали МК с приветом. На старой работе, в сейфе, как артефакт,
лежал 580-й, который неправильно выполнял какую-то команду. - mse homjak(04.06.2023 11:22)
- Но опыт показывает, что приблизительно в 100500 раз чаще попадаются
погромисты с приветом :-) - SciFi(04.06.2023 11:25)
- Х.З. Один раз с компилятором для ПИКов встрял: int32 = int32 ^ 1, инверсия младшего бита - не работает. Обошел как то. Понятно, что никому кроме меня это не нужно, влез в помехоустойчивое декодирование БЧХ 31. 21. - Visitor(04.06.2023 12:21)
- Увы, не тот случай. Сейчас сидеть и 30 плат перешивать и перепроверять (( - POV(04.06.2023 11:41)
- Но опыт показывает, что приблизительно в 100500 раз чаще попадаются
погромисты с приветом :-) - SciFi(04.06.2023 11:25)
- Ну да, ну да.. олух-программист понадеялся на наследование, так
сказать, банка регистров. А оно вон оно как ))... POV(108 знак., 05.06.2023 13:57, ссылка)