-
- +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)