Я пытался проверить некоторые таймеры в contikiOS, я использовал printf() для вывода значения переменной, но печатное значение изменилось в соответствии с тем, как я напечатал сообщение.Неожиданное поведение в функции printf() в Contiki
Что я имею в виду ?, ну, я печатаю две переменные, RTIMER_SECOND - это длинный unsigned int, а CLOCK_SECOND - целое число. Вариации пыльник то, что я пытался и выход ниже этого кода:
printf("1->RTIMER_SECOND=%lu CLOCK_SECOND=%d\n", RTIMER_SECOND, CLOCK_SECOND);
printf("2->RTIMER_SECOND=%d CLOCK_SECOND=%d\n\n", RTIMER_SECOND, CLOCK_SECOND);
printf("3->CLOCK_SECOND=%d RTIMER_SECOND=%lu\n", CLOCK_SECOND,RTIMER_SECOND);
printf("4->CLOCK_SECOND=%d RTIMER_SECOND=%d\n\n", CLOCK_SECOND,RTIMER_SECOND);
printf("Ticks per second: %lu\n", RTIMER_SECOND);
printf("second per second: %d\n", CLOCK_SECOND);
Выход заключается в следующем:
1-> RTIMER_SECOND = 15625 CLOCK_SECOND = 128
2-> RTIMER_SECOND = 15625 CLOCK_SECOND = 0
3-> CLOCK_SECOND = 128 RTIMER_SECOND = 15625
4-> CLOCK_SECOND = 128 RTIMER _SECOND = 15625
тиков в секунду: 15625
второй в секунду: 128
Мой вопрос заключается в следующем почему 0 появляется во 2-й печати? является неопределенным поведением при печати% d вместо% lu RTIMER_SECOND, влияющего на следующую переменную? PS: четвертый - второй, а значение CLOCK_SECOND не равно 0.
'printf' обычно реализуется в библиотеке C (libc), в данном случае' avr-libc', а не операционной системой. – kfx
Я проверю это, в зависимости от результата я могу отправить письмо в список рассылки разработчиков, спасибо! –