Приведение int к формату HH:MM:SS
- Войдите на сайт для отправки комментариев
Втр, 16/11/2021 - 02:20
Вопрос риторический, скорее, но может кто сталкивался. Очень интересна причина такого поведения:
1. На ардуинку заливается код, все работает исправно
2. После перезаливки(код не менялся) появляется баг в одном из кусков кода(на C# все ок работает):
segment7 = time / 3600; //hour segment4 = (time - (segment7 * 60)) % 60; //min segment0 = time % 60; //sek
public static void Main() { int d0,d1,d3; int time=7261; d3=time % 60;//sek d0=time / 3600;//hour d1=(time-(d0*60))%60;//min Console.WriteLine(d0); Console.WriteLine(d1); Console.WriteLine(d3); }
3. При очередной перезаливки прошивки появляется такая вот ерунда:
4. Магическим образом ошибка компиляции сама исчезает через какое-то время, скетч заливается, но работает криво
5. Завтра буду возиться с кодом
Просто интересно, может быть кто-то в курсе... Что ЭТО было?
И, возможно, кто-то знает более простой способ привести int к формату времени
char buf[12];
sprintf(buf,"%02d:%02d:%02d", H,M,S);
Минуты может так считать ?
d1=(time%3600)/60;
в популярную UNO и nano в int не вмещается однако, int32_t видимо должна быть
Угу, скорее всего из-за того, что int 16ти битный.
Поменял на uint_32 и изменил:
Более-менее что-то заработало. Но по какой-то неведомой причине часы стали секундами, а секунды часами. Хотя изначально все было отлично. И еще пару каких-то багов с обработкой обнуления счетчика. Весело )))
int d0,d1,d3; это знаковый тип, uint32_t - нет
int d0,d1,d3; это знаковый тип, uint32_t - нет
Так в данном случае нет никакой разницы, просто в unsigned в два раза больше влезет
int d0,d1,d3; это знаковый тип, uint32_t - нет
Так в данном случае нет никакой разницы, просто в unsigned в два раза больше влезет
сравнивать знаковые и беззнаковые компилятор точно будет предупреждения гнать
Проблема была в том, что поставил новую версию среды разработки. Она каким-то "чудом" нашла библиотеку из старой версии, возник конфликт совместимости. Компилятор не понимал с какой версией библиотеки работать.
Проблема была в том, что поставил новую версию среды разработки. Она каким-то "чудом" нашла библиотеку из старой версии, возник конфликт совместимости. Компилятор не понимал с какой версией библиотеки работать.
чудо это простое, если версия portable то ее надо немного настроить иначе она совсем не portable )))
чудо это простое, если версия portable то ее надо немного настроить иначе она совсем не portable )))
Не совсем так, на компе две IDE стоят 1.8.10(про эту я вообще забыл, которая была скопирована просто) и 1.8.16. Открывал код в 1.8.16, а ошибку било на 1.8.10. И тут я это увидел, и понял, что тут что то не то... Пока что решилось так: обновил библиотеку вручную через IDE, скетч загрузился.
чудо это простое, если версия portable то ее надо немного настроить иначе она совсем не portable )))
Вот, кстати, это интересно. Какие здесь тонкости?