Автор Тема: fatal error: time.h: No such file or directory  (Прочетена 5339 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
fatal error: time.h: No such file or directory
« -: 25 Октомври 2016, 03:53:43 »
Опитвам се да включа time/date функциите към файла си, но плющът грешки. Според документацията библиотеката е включена към AVR - http://www.nongnu.org/avr-libc/user-manual/group__avr__time.html. Да не би да нямам инсталирана avr_libc  :)

Код: C
  1. #include <stdio.h>
  2. #include <avr/io.h>
  3. #include <util/delay.h>
  4. #include <time.h>
  5.  
  6. void wait ( int sec ) {
  7.                 clock_t end_wait;
  8.                 end_wait = clock () + sec * CLK_TCK ;
  9.  
  10.                 while (clock() < end_wait) {}
  11. }
  12.  
  13. int main(void) {
  14.  
  15. DDRB |= _BV(DDB5);
  16. while(1) {
  17. PORTB |= _BV(PORTB5);
  18. wait (5);
  19.  
  20. PORTB &= ~_BV(PORTB5);
  21. wait (5);
  22.   }
  23. }
  24.  

Цитат
dimt@dimt-Satellite-L670 ~ $ avr-gcc -Os -DF_CPU=16000000UL -mmcu=atmega328p -c -o led.o led.c
led.c:4:18: fatal error: time.h: No such file or directory
 #include <time.h>

Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #1 -: 25 Октомври 2016, 13:36:22 »
Иглежда като да го нямаш тоз хедър. Според changelog-а на avr-libc time.h е добавен във версия 1.8.1
Пробвай да принтнеш версията, която използваш
Код: C
  1. printf("libc version: %s\n", __AVR_LIBC_VERSION_STRING__);

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #2 -: 25 Октомври 2016, 14:20:11 »
С 1.8.0 съм. Ще се пробвам да инсталирам / компилирам 2.0.0 
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #3 -: 25 Октомври 2016, 14:59:14 »
Ако си любознателен по-добре ще е да си имплементираш собствен ташовник. :)
1. нягласяш някой от таймерите да ти генерира интеръпти примерно на всяка милисекунда (хем таймери ще научиш, хем интеръпти)
2. около тази милисекунда си имплементираш твоите epoch time фунцкии - изминали милисекунди от  01.01.1970 (малко гимнастика с дати, високосни години  и тнт.)

Едит:

1. Като гледам документацията на time.h
Цитат на: http://www.nongnu.org
Section 7.23.2.1 clock() The type clock_t, the macro CLOCKS_PER_SEC, and the function clock() are not implemented. We consider these items belong to operating system code, or to application code when no operating system is present.

та фунцкията и структурата, които си използвал изобщо не са имплементирани.

2. това което си опитал да имплементираш в кода си е функция наиричаща се delay_us/sleep_us или delay_ms/sleep_ms и по принцип изглежда нещо като това
Код: C
  1. void sleep_ms(int millis) {
  2.    uint32_t end = millisec + millis; // където millisec e глобалната променлива, която инкрементираш на всеки интеръпт, който си натроил с тамера
  3.    while (millisec < end) { ; }
  4. }


И съответно като искаш да подремнеш за 5 секунди викаш
Код: C
  1. sleep_ms(5*1000);
« Последна редакция: 25 Октомври 2016, 16:03:50 от kjufte »

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #4 -: 25 Октомври 2016, 18:52:49 »
Мислих за нещо подобно. Значи да споделя за кво ми е па ти шъ ма насочиш :)
Искам всеки 2-ри петък от месеца да се стартира  фърниса и джакузито на котиджа ми, че като пристигна след 2 - 3 часа всичко да е на 6. Не че нещо ми пречи да се логна отдалечено от Торонто и да го стартирам мануално, ама .......тръпка ми е кода да го направи вместо мен ;)   
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #5 -: 25 Октомври 2016, 20:46:51 »
Искаш един път в месеца да подскача твоето приложение, така ли?
Какъв смяташ да е power source-a ти? Батерии?
Вариантите които виждам са 2.
 - имплементираш си unix time  с календар и тнт и си нагласяш дата и час когато нещо да се случва.
 - пишеш код който има нещо като аларма, която задействаш преди да потеглиш обратно за Торонто. Примерно потегляш в неделя в 14 часа и си смяташ, че следващият път ще е след 26 дена или 2246400000 милисекунди и си нагласяш "алармата" за след това време да включи квото има да включва.

Но да ти кажа за такива големи периоди ми се струва голям овъркил да работи микроконтролера цял месец за да генерира един интеръпт  ;D А и да ти кажа не знам как сте у Канада-та със застраховките, но мисля, че не биха поели щетите, ако им кажеш, че си си билднал сам детонатора  ;D

Кварца който ползваш има доста ограничена точност, което означава, че часовника, който имплементираш ще дрифтва постоянно и няма да е никак точен. Чел съм за дрифт от по 5-10 сек/ден. С колко ще се отклонява от реалното време и дали напред, или назад зависи от самият кварц, от околната температура и тнт. Най-добре е да се комбинира с един GNSS, с който редовно да сверяваш часовника.

Другото което е, ако смяташ да си на бактерии ще трябва много да оптимизираш кода. Да изключиш всичкото периферия що не се ползва, да разредиш интеръпт-интервалите и тнт. Иначе батериите няма да те издържат и 2 седмици.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #6 -: 25 Октомври 2016, 22:18:13 »
E...то ся ми дойде още нещо на ума говорейки за тва ;)
Мога да ползвам cronjob който да флашва C кода в джаджата всеки втори петък от месеца,  а в неделята преди да тръгна за Торонто да си слага старият и тва е вариант мисля.
« Последна редакция: 25 Октомври 2016, 22:22:02 от jazzman »
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #7 -: 25 Октомври 2016, 22:26:38 »
Цитат
Искаш един път в месеца да подскача твоето приложение, така ли?
Какъв смяташ да е power source-a ти? Батерии?

С комп съм. Какво имаш предвид под  power-source? power-source на кое?   
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #8 -: 26 Октомври 2016, 00:19:47 »
Да флашваш микроконтролера всеки път няма смисъл. По-скоро да го ресетваш примерно, или да му пращаш команди през uart.

За power source имах предвид как смяташ да захранваш uC-то. На батерии ли ще е, ще виси на USB-порт на компа, или с външно захранване някакво.

Явно ще виси на компа, а аз мислех, че правиш stand-alone приложение.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #9 -: 26 Октомври 2016, 04:02:28 »
Цитат
Да флашваш микроконтролера всеки път няма смисъл. По-скоро да го ресетваш примерно, или да му пращаш команди през uart.
И на мен ми се вижда малко брутално на всеки две седмици да го флашвам :) Къде мога да прочета повече, тва за пращането на команди през UART?

uC-то се захранва от USB кабела към PC-то зад което стои мощен UPS.

Между-другото Ардуино Uno има и джак за DC power adapter. Четох някъде, че има волтидж регулейтор към 5v. Дали ще мога да ги ползвам паралелно и двата. USB-то към PC-то за Data а power adapter-a като el. source?   
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #10 -: 26 Октомври 2016, 20:48:20 »
Ти UART вече ползваш за printf. Сега искаш обаче не само да пишеш в този UART порт, но и да четеш от него. Демек искаш да се свържеш през някоя терминал програма с микроконтролера и да пращаш някакви стрингове/команди.

Тъй като ползваш printf, приемам че знаеш как се свързваш през serial с микриконтролера. Във функцията void USART0Init(void); си включил изпращащ и получаващ интеръпт.
Значи единственото което трябва да допълниш е interrupt handler-a за получаващият интеръпт, където събираш получените байтовете.

НЕщо такова:

Код: C
  1. #define RX_BUFF_SIZE 50
  2.  
  3. volatile unsigned char lineBuffer[RX_BUFF_SIZE] = {0};
  4. volatile uint8_t idx = 0;
  5.  
  6. ISR(USART_RXC_vect)
  7. {
  8.   unsigned char c;
  9.   c = UDR;                              // четем от регистъра съдържащ полуленият байт
  10.   lineBuffer[idx] = c;                  // пишем го в буфера
  11.   idx++;                                // минаваме на следваща позиция в буфера за следващият знак, който ще получим
  12.   if(c == '\n') {                       // ако видим line feed , значи сме прочели цял ред -> цяла команда
  13.      lineBuffer[idx] = '\0';            // терминираме стринга с една 0
  14.      interpretCmd(lineBuffer);          // интерпретираме командата
  15.      idx = 0;                           // зануляваме индекса, за да пишем от началото на буфера при следващ получен байт
  16.   }
  17. }


Кода не е тестван и няма как да го тествам, защото нямам никакви AVR-и при мене в момента.
В кода естествено трябва да правиш и проверка дали не си стигнал края на буфера RX_BUFF_SIZE и да реагираш съответно.

Колкото до паралелно ползване на адаптер с USB не би трябвало да има никакъв проблем.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #11 -: 28 Октомври 2016, 01:12:12 »
И аз няма как да го тествам в момента, но ще пиша при първи удобен за мен случай :)
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #12 -: 28 Октомври 2016, 19:26:53 »
Е ако не друго то поне името на регистъра съм сбъркал. :)
При atmega328p видях, че е UDR0, а не UDR.

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re: fatal error: time.h: No such file or directory
« Отговор #13 -: 29 Октомври 2016, 02:02:05 »
Е ако не друго то поне името на регистъра съм сбъркал. :)
При atmega328p видях, че е UDR0, а не UDR.
E.....и ти не си безгрешен  ;D
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

kjufte

  • Sr. Member
  • ****
  • Благодарности
  • -Казани: 1
  • -Получени: 51
  • Публикации: 308
Re: fatal error: time.h: No such file or directory
« Отговор #14 -: 29 Октомври 2016, 17:19:04 »
E.....и ти не си безгрешен  ;D
Аз не си спомням кога за последно съм написал два реда код без грешка.  :D