|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
||||||
Ошибка в time.h?17.07.2016, 21:40. Показов 9419. Ответов 47
Метки нет (Все метки)
Есть простой код. Сначала заполняется структура (struct tm), в нее заносятся начальные значения. Затем она преобразуется в тип time_t. Но преобразуется не правильно. Значение почти в два раза больше (в целочисленном значении). Код проверялся под IAR для stm8. Этот же код на арме исполняется нормально. В чем проблема?
0
|
||||||
| 17.07.2016, 21:40 | |
|
Ответы с готовыми решениями:
47
Что за ошибка: "E2015 Ambiguity between 'time' and 'std::time"? |
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 19.07.2016, 12:40 | ||
Зачем? Доку почитайте. Вы вызываете функцию, она работает, и складывает результат своей работы у себя внутре, а вы пользуете этот результат.
0
|
||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
||
| 19.07.2016, 12:55 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 268
|
|||||||
| 19.07.2016, 13:28 | |||||||
Current time around the World: Phoemyx, AZ (U.S.) : 8:22 Reykjavik (Icelomd) : 15:22 Beijing (China) : 23:22
0
|
|||||||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
||
| 19.07.2016, 16:44 | ||
|
[QUOTE="shibtym"][QUOTE="Цитата:[/QUOTE]
ptm = gmtime ( &rawtime); Так я об этом и пишу. Что в начале вызываем gmtime и используем полученный указатель. И свои структуры объявлять не нужно и память под эту структуру выделять тоже не надо.
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 19.07.2016, 18:36 | ||
Я, например, не знаю, но думаю, что она, скорее всего, используя данные из переданной ей структуры, тут же записывает новые данные в свою структуру. И таким образом, если сделать, как вы хотите, то, записав половину "своей" (а на самом деле, исходной, вы же так ей подсунули) структуры, продолжает свои расчеты, но уже с поломанными данными, ведь половина их уже ей же испорчена! Это раз. Два: даже если этот вариант прокатывает и у вас работает, то вполне себе вероятно, что в следующей версии компилятора или библиотеки разрабам вдруг взбрендит изменить реализацию на именно такую как я только что описал. И еще раз: Не надо ничего предварительно вызывать. Вы сначала свою структуру объявляете для исходных данных и передаете ее функции. У нее (у функции) есть своя область памяти, она (память) там всегда есть, во время выполнения вашей программы, куда она (функция) записывает результат своей работы и возвращает вам указатель на эти (свои внутренние) данные. Динные эти объявленны как static и присутствуют всегда до конца работы вашей программы. Неужели у вас не найдется в стеке лишних 10-16 байт, или сколько там их?
0
|
||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
||||||
| 19.07.2016, 19:12 | ||||||
|
Как она работает я тоже не знаю. Но по примерам делают именно как я и написал.
Единственное отличие, что они используют текущее время компа для начальной инициализации, которого у меня нет. Моя первая ошибка и была, что я не получив адреса структуры пытался загнать в нее данные.
0
|
||||||
|
0 / 0 / 0
Регистрация: 07.04.2016
Сообщений: 268
|
||
| 19.07.2016, 19:25 | ||
именно тут и происходит выделение памяти. статически. ошибочно подумал, что обсуждают другую переменную
0
|
||
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
|
| 19.07.2016, 19:36 | |
|
Ага. И много выделяют? Поместится ли туда struct tm?
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
|||
| 19.07.2016, 23:38 | |||
0
|
|||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
| 20.07.2016, 01:51 | |
|
Я про структуру struct tm. Просто нигде не говорилось что сначала нужно вызвать gmtime и получить на нее ссылку. Тем более у микроконтроллеров зачастую свой, особый путь))))
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 20.07.2016, 09:06 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
|
| 20.07.2016, 09:12 | |
|
вот блин не поленился, посмотрел, как она устроена, эта функция. http://www.ethernut.de/api/gmtime_8c_source.html
На строке 72 мы видим, что в библиотеке объявлена глобальная структура _tb, адрес которой вам на строке 200 возвращается. Видие? Она УЖЕ есть. Функцию НЕ надо предварительно вызывать для какого то там выделения памяти.
0
|
|
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 20.07.2016, 09:13 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
||
| 20.07.2016, 15:10 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 24.02.2010
Сообщений: 804
|
||
| 20.07.2016, 15:34 | ||
Хм. Никак. Но позвольте спросить: Зачем? В чем заключается сакральный смысл доступа к этой структуре без каких либо данных, а если туда их самому записать, то при вызове этой функции или localtime (вы же внимательно прочитали страницу с докой? ) все эти данные похерятся.
0
|
||
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
||
| 20.07.2016, 18:11 | ||
0
|
||
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
||||||
| 20.07.2016, 19:08 | ||||||
|
Заводи свою структуру.
0
|
||||||
|
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
|
|
| 20.07.2016, 21:48 | |
|
Для всяких часовых и локальных времен есть куча дополнительных стандартных функций. Типа localtime(). Пользуйся ими.
0
|
|
|
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 2
|
|
| 20.07.2016, 23:03 | |
|
Зачем плодить сущности и делать копии структур?)))
В моем случае из накладных расходов только один вызов gmtime с 0 параметром для получения указателя. Затем идет целочисленное сложение для коррекции пояса и все. Есть варианты проще? Localltime не годится - время берется из сообщения,а не от встроенного таймера. Точнее его можно использовать, но после синхронизации времени с ГПС, к примеру по ppm сигналам.
0
|
|
|
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
|
|
| 21.07.2016, 11:02 | |
|
Потому что как использовать эту структуру - написано в документации. Все остальное никто не гарантирует. Что ты пытаешься сэкономить?
0
|
|
| 21.07.2016, 11:02 | |
|
Не могу разобраться с заданием "Создайте класс Time с конструкторами Time(), Time( int hour)......" Ошибка run time error 6 overflow, что не так? (без cost.Text = c6 вроде сначала робил, а потом удалял и всё равно ошибка Ошибка Run-Time Ошибка с библиотекой time.h Ошибка Run-time error ''76'' Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
|||
|
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео:
https:/ / vkvideo. ru/ video-240781534_456239017
YouTube:
eY5-5PyI9NM
Текстовая версия
|
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать
Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
|
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства.
Родственных связей существует 8 ступеней, такие как:
p - отец
P - мать
q - муж
Q - жена
b - брат
B - сестра
s - сын
S - дочь
|
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире.
Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
|
|
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С.
Задача:
Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
|
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
|
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
|
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701
Купил два термопринтера QR701.
На сэлф-тесте написано:
Language: PC936 (GB18030).
Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
|