Jurkins Ierakstīts Decembris 29, 2019 Share Ierakstīts Decembris 29, 2019 (labots) Sveiciens visiem pirmssvētkos! Kā jau reiz te rakstīju, man patīk (pats arduino nepatīk?) rakstīt nevis arduino aplikācijā (šausmas pilnīgas), bet visual micro iekš VS. Pats interesantākais, ka piem. CodeLite šis strādā. Laikam šim cits kompilators defaultā. Bet fakts paliek fakts. Ja tam kodam, kas ir funkcijā vienkārši liek izpildīties iekš setup() vai loop() ne kā atsevišķai funkcijai, tad viss strādā. Tā kā it kā jau problēma nav, bet gribas saprast, kur ir vaina. Visticamāk man kaut kāds stulbums iestājies ?. Esmu izmalis gūgli c++ tutoriāļus par "enum" (ar, bez typedef u.t.t.), bet neko neatrodu. Varbūt kāds ar svaigu aci pateiks. Kods /* Name: test_v3.ino Created: 12/29/2019 12:50:53 PM Author: Jurchixx */ typedef enum alarmType_t { WORK_START, WORK_STOP, }; typedef enum alarmActive_t { ALARM_ON, ALARM_OFF, }; struct alarm_t { uint8_t hours; uint8_t minutes; alarmType_t type; alarmActive_t active; }; alarm_t alarms[] = { {8, 0, WORK_START, ALARM_ON}, {9, 45, WORK_STOP, ALARM_ON}, {9, 50, WORK_STOP, ALARM_ON}, {10, 0, WORK_START, ALARM_ON}, {12, 0, WORK_STOP, ALARM_ON}, {14, 45, WORK_STOP, ALARM_ON}, {14, 50, WORK_STOP, ALARM_ON}, //{8, 50, WORK_STOP, ALARM_ON}, //{6, 50, WORK_STOP, ALARM_ON}, //{6, 30, WORK_STOP, ALARM_ON}, {15, 0, WORK_START, ALARM_ON}, {17, 0, WORK_STOP, ALARM_ON} }; alarm_t* getNextAlarm(alarm_t* alarmArr, uint8_t sizeOfAlarmArr, uint8_t thisTimeHours, uint8_t thisTimeMinutes) { alarm_t* nextAlarm = alarmArr; while (sizeOfAlarmArr--) { if (!(nextAlarm->hours < thisTimeHours) && (nextAlarm->active != ALARM_OFF)) { if (nextAlarm->hours > thisTimeHours) break; else if (nextAlarm->minutes > thisTimeMinutes) break; } if (sizeOfAlarmArr) *nextAlarm++; else nextAlarm = alarms; } return nextAlarm; } // the setup function runs once when you press reset or power the board void setup() {} // the loop function runs over and over again until power down or reset void loop() {} kļūda: Compiling debug version of 'test_v3.1' for 'ATmega328P (3.3V, 8 MHz) (Arduino Pro or Pro Mini)' test_v3.1.ino: 9:1: error: 'alarm_t' does not name a type WORK_STOP Error compiling project sources ^~~~~~~ Debug build failed for project 'test_v3.1' Labots Decembris 29, 2019 - Jurkins Link to comment Share on other sites More sharing options...
energys Decembris 29, 2019 Share Decembris 29, 2019 Pats tikko tikai esmu iesācēju komplektu iegādajies, lai saprastu ,aks tas ir par zvēru, tā kā par kodu neko nepateikšu. Bet, cik esmu lasījis, tad daudzi izmanto koda rakstīšanai Notepad++. Varbūt pamēģini šajā rakstīt? Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 Nav jau svarīgi, ar ko rakstīt, kaut notepadā bez "++" ?, svarīgi ir, kas notiek tālāk. Ne par manu tēmu - ja nav žēl 19 USD gadā, tad paņem par brīvu Visual Studio Community 2019. Tur var izvēlēties, ko instalēt, ko nē. Visu jau nevajag. Tad nopērc par 19 USD visual micro "pielikumu". Un vuaļā. Brīnišķiga vide. Link to comment Share on other sites More sharing options...
Anonīms Alkoholiķis Decembris 29, 2019 Share Decembris 29, 2019 struct alarm_t Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 Nja... Ja šo: enum alarmType_t { WORK_START, WORK_STOP, }; enum alarmActive_t { ALARM_ON, ALARM_OFF, }; struct alarm_t { uint8_t hours; uint8_t minutes; alarmType_t type; alarmActive_t active; }; iznes atsevišķā hederfailā, tad viss strādā lieliski. @Anonīms Alkoholiķis , laikam vecs un stulbs esmu?, bet nesapratu, kas ar "struct" nav tā. Link to comment Share on other sites More sharing options...
Anonīms Alkoholiķis Decembris 29, 2019 Share Decembris 29, 2019 (labots) Rekur piemērs no MSDN: https://docs.microsoft.com/en-us/cpp/cpp/struct-cpp?view=vs-2019 nevis alarm_t ... bet gan struct alarm_t ... Un arī MSDN: https://docs.microsoft.com/en-us/cpp/c-language/c-enumeration-declarations?view=vs-2019 nevis typedef enum ... bet gan enum .. Labots Decembris 29, 2019 - Anonīms Alkoholiķis Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 Jā, Tev taisnība, ja funkcijai pieraksta struct priekšā, tad viss notiek. Paldies. Tikai jocīgi, ka ja iznes hedera failā, tad viss notiek tāpat. No tā paša piemēra: struct PERSON sister; // C style structure declaration PERSON brother; // C++ style structure declaration p.s. es nekasos?, nepatīk atstāt nesaprastas detaļas. Pirms 11 minūtēm , Anonīms Alkoholiķis teica: bet gan Jā, tas arī no sērijas "tika mēģināts visādi". Link to comment Share on other sites More sharing options...
Anonīms Alkoholiķis Decembris 29, 2019 Share Decembris 29, 2019 (labots) tev problēma ir pie enum definīcijām - kad vienā failā, tad izmanto typedef, kad iznests uz hederi, tad bez typedef. Un tu te miksē c, c++ un taisi lielu putru ar to visu, jo vienīgais ko var tev ieteikt ir nekonkrēti minējumi par nesaturīgiem izvilkumiem no pēcpuses. Labots Decembris 29, 2019 - Anonīms Alkoholiķis Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 enum alarmType_t : uint8_t { START_WORK, STOP_WORK, }; enum alarmActive_t : uint8_t { ALARM_ON, ALARM_OFF, }; struct alarm_t { uint8_t hours; uint8_t minutes; alarmActive_t active; alarmType_t type; }; hederfailā un tad ir pilnīgi vienalga, vai funkcijai raksta priekšā struct vai nē. Savukārt, ja atstāj galvenajā failā, tad arī vienalga vai typedef pie enum ir vai nav, bet struct pirms funkcijas obligāti. OK, bet nu skaidrs, kas par lietu. Paldies! Link to comment Share on other sites More sharing options...
Anonīms Alkoholiķis Decembris 29, 2019 Share Decembris 29, 2019 Fuck c++, FTW, C89 4ever! Link to comment Share on other sites More sharing options...
Ronalds Decembris 29, 2019 Share Decembris 29, 2019 @Jurkins, man kaut kā izskatās, ka mēģini šaut ar lielgabaliem pa zvirbuli! Kas vainas Arduinu IDE? Iesācējiem un maziem, vienkāršiem projektiem pats labums! Valoda vienkārša, bez visādām C++ izvirtībām. Pilns ar bibliotēkām, piemēriem. Forumos viss aprakstīs. Kā saprotu, tev vienkārši vajag ik pa laikam sirēnu ieslēgt. Kam šeit struktūras, klases? Vienkāršs masīvs, kur ieslēgšanas laiki sarakstīti un miers! Tālāk - kā laika sinhronizāciju nodrošināsi? Mikro kontrolieros parasti nav RTC (Real time clock), tātad vajag RTC moduli un arī vēlams interneta pieslēgumu lai pa NTP pulksteņus sinhronizētu. Līdz ar to - attiecīgās bibliotēkas. Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 (labots) Vispār jau C++ nevajag speciāli teikt ka tas ir enum vai struct kad devinē mainīgo vai piemēram funkcijas return value vai parametu, tas tikai C. Piemēram: struct Person { uint8_t age; uint8_t gender; }; struct Person me; // C++ OK, C - OK Person another; // C++ OK, C - Nekompilēsies struct Person *FindPerson(struct Person *list, uint32_t size); // C++ OK, C OK Person *FindPerson(Person *list, uint32_t size); // C++ OK, C - nekompilēsies Otkārt tu jau nepareizi nodefinē typedef'u Vajag: typedef enum { START_WORK, STOP_WORK, } alarmType_t; typedef enum { ALARM_ON, ALARM_OFF, } alarmActive_t; typedef struct { uint8_t hours; uint8_t minutes; alarmActive_t active; alarmType_t type; } alarm_t; Pirms 21 minūtēm , Ronalds teica: Mikro kontrolieros parasti nav RTC (Real time clock), tātad vajag RTC moduli Normālos mikrokontrolieros ir RTC, tik kautkādos Atmegas sūdos nav. Labots Decembris 29, 2019 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 (labots) 1 stundu atpakaļ, Ronalds teica: Kas vainas Arduinu IDE? Lielākā vaina (varbūt, pat vienīgā), manuprāt, ir, ka nav "priekšā teikšanas". Atmiņu jau trenēt ir labi, bet, ja ar salīdzinoši nelieliem kapitālieguldījumiem var dabūt ērtu vidi. 1 stundu atpakaļ, Ronalds teica: Kā saprotu, tev vienkārši vajag ik pa laikam sirēnu ieslēgt. Es izklaidējos. Ir man gan RTC modulis gan ethernet modulis. Šis laiku pa laikam pieslēdzas taimserverim u.t.t. Un, jā, pagaidām, ņemos ar tiem 8 bitu "sūdiem"?. @AndrisBB, bet man viss notiek vispār bez atslēgvārda "typedef". Struktūra jau tā pati klase vien ir, vai tad nē? Tikai defaultā visas "iekšas" ir "public". Atnāca man no Aļika arī SR201 (ENC28J60) modulis ar releju un kaut kādu STC kontrolieri. Ar detektīvcienīgiem paņēmieniem dabūju šim kaut kādas sources... mļaķ... viss paskālā. Pagaidām iemetu "tumbočkā". Ja jau esmu pārlecis uz c/c++, tad atpakaļ uz paskālu nelēkšu. Labots Decembris 29, 2019 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 Pa lielam tas typedef ir tikai vajadzīgs, ja slinkums rakstīt garus mainīgo tipus. Iekš C++ lietot typedef priekš struct un enum lielas jēgas nav, jo tu vari definēt un lietot tipus bez struct un enum keyworda (atšķirībā no C). Piemēram ja man ir tips, tad vieglāk ir uztaisīt typedefu typedef std::shared_ptr<std::vector<Pugins>> plugins_vec_t; plugins_vec_t plugins; Pietam tas vēl īss piemērs. Bet C++ ir arī visādi using utt, lai nebūtu jālieto typedefus Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 Pamēģināju uzkompilēt kodu vienkārši ar avr-gcc un viss darbojas ar vai bez typedef. Tā arduino IDE ganjau kautko dīvainu makefailos izmanto. Link to comment Share on other sites More sharing options...
Pukinens Decembris 29, 2019 Share Decembris 29, 2019 1 stundu atpakaļ, Ronalds teica: Kas vainas Arduinu IDE? Vainas nekādas, bet arī ērtības pilnīgi nekādas. Programmai līdz daždesmit rindām var izmantot. Bet dzimtā Arduino IDE pret Visual Studio ar Visual Micro pluginu ir tas pats kas zapiņš pret maibahu. 1 Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 Pirms 17 minūtēm , AndrisBB teica: Tā arduino IDE ganjau kautko dīvainu makefailos izmanto. Beigās jau sanāca tā, ka pilnīgi vienalga ar typedef vai bez, bet, ja struktūra ir definēta galvenajā failā, tad jebkura funkcija, kas atgriež šādu struktūru bez kļūdām kompilējas tikai tad, ja ir definēta: struct alarm_t* func(void) bet, ja struktūru nodefinē hederfailā, tad funkciju var rakstīt gan hederfailā gan galvenajā: alarm_t* func(void) Link to comment Share on other sites More sharing options...
Pukinens Decembris 29, 2019 Share Decembris 29, 2019 Pirms 16 minūtēm , AndrisBB teica: Pamēģināju uzkompilēt kodu vienkārši ar avr-gcc un viss darbojas ar vai bez typedef. Tā arduino IDE ganjau kautko dīvainu makefailos izmanto. Starp citu, Arduino IDE arī nokompilēja sākotnējo kodu bez atraugāšānās. Tātad šoreiz pie vainas varētu būt tieši VS plugins. Īstenībā ir reizēm novērots ka VisualMicro apjūk situācijās kad orģinālā ide kompilē. Tas ir advancēts produkts ar advancētām kļūdām. ? Īsti neatceros, bet pēdējais man laikam bija kautkādi cunduri ar "Deep search for libraries". Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 Nope, nekompilējas ar Arduino IDE, VS plugins tur nebūs pie vainas. Link to comment Share on other sites More sharing options...
Pukinens Decembris 29, 2019 Share Decembris 29, 2019 Kā tas var būt!? ? Eksperimenta tīrībai nokačāju 1.8.10 uz svaiga kantora Win10 dzelža. Viss "by default", tikai Ieslēdzu kompilācijas verbosi un visus kompilera vārningus. Reku no 12 rindas pabļaustās ka typedef ignorēs, un sakompilē. C:\Users\S9634\Downloads\arduino-1.8.10\arduino-builder -dump-prefs -logger=machine -hardware C:\Users\S9634\Downloads\arduino-1.8.10\hardware -tools C:\Users\S9634\Downloads\arduino-1.8.10\tools-builder -tools C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -built-in-libraries C:\Users\S9634\Downloads\arduino-1.8.10\libraries -libraries C:\Users\S9634\OneDrive - S9634\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10810 -build-path C:\Users\S9634\AppData\Local\Temp\arduino_build_166848 -warnings=all -build-cache C:\Users\S9634\AppData\Local\Temp\arduino_cache_512680 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -verbose C:\Users\S9634\OneDrive - S9634\Documents\Arduino\sketch_dec29a\sketch_dec29a.ino C:\Users\S9634\Downloads\arduino-1.8.10\arduino-builder -compile -logger=machine -hardware C:\Users\S9634\Downloads\arduino-1.8.10\hardware -tools C:\Users\S9634\Downloads\arduino-1.8.10\tools-builder -tools C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -built-in-libraries C:\Users\S9634\Downloads\arduino-1.8.10\libraries -libraries C:\Users\S9634\OneDrive - S9634\Documents\Arduino\libraries -fqbn=arduino:avr:uno -ide-version=10810 -build-path C:\Users\S9634\AppData\Local\Temp\arduino_build_166848 -warnings=all -build-cache C:\Users\S9634\AppData\Local\Temp\arduino_cache_512680 -prefs=build.warn_data_percentage=75 -prefs=runtime.tools.avrdude.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avrdude-6.3.0-arduino17.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.avr-gcc-7.3.0-atmel3.6.1-arduino5.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -prefs=runtime.tools.arduinoOTA-1.3.0.path=C:\Users\S9634\Downloads\arduino-1.8.10\hardware\tools\avr -verbose C:\Users\S9634\OneDrive - S9634\Documents\Arduino\sketch_dec29a\sketch_dec29a.ino Using board 'uno' from platform in folder: C:\Users\S9634\Downloads\arduino-1.8.10\hardware\arduino\avr Using core 'arduino' from platform in folder: C:\Users\S9634\Downloads\arduino-1.8.10\hardware\arduino\avr Detecting libraries used... "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848\\sketch\\sketch_dec29a.ino.cpp" -o nul Generating function prototypes... "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848\\sketch\\sketch_dec29a.ino.cpp" -o "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848\\preproc\\ctags_target_for_gcc_minus_e.cpp" "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\tools-builder\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848\\preproc\\ctags_target_for_gcc_minus_e.cpp" Compiling sketch... "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-g++" -c -g -Os -Wall -Wextra -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10810 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\arduino\\avr\\cores\\arduino" "-IC:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\arduino\\avr\\variants\\standard" "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848\\sketch\\sketch_dec29a.ino.cpp" -o "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848\\sketch\\sketch_dec29a.ino.cpp.o" C:\Users\S9634\OneDrive - S9634\Documents\Arduino\sketch_dec29a\sketch_dec29a.ino:6:1: warning: 'typedef' was ignored in this declaration typedef enum alarmType_t ^~~~~~~ C:\Users\S9634\OneDrive - S9634\Documents\Arduino\sketch_dec29a\sketch_dec29a.ino:12:1: warning: 'typedef' was ignored in this declaration typedef enum alarmActive_t ^~~~~~~ C:\Users\S9634\OneDrive - S9634\Documents\Arduino\sketch_dec29a\sketch_dec29a.ino: In function 'alarm_t* getNextAlarm(alarm_t*, uint8_t, uint8_t, uint8_t)': C:\Users\S9634\OneDrive - S9634\Documents\Arduino\sketch_dec29a\sketch_dec29a.ino:50:7: warning: value computed is not used [-Wunused-value] *nextAlarm++; ^~~~~~~~~~~~ Compiling libraries... Compiling core... Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\wiring_pulse.S.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\hooks.c.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\wiring_shift.c.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\wiring_pulse.c.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\wiring_digital.c.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\WInterrupts.c.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\wiring_analog.c.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\wiring.c.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\CDC.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\PluggableUSB.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\HardwareSerial2.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\HardwareSerial1.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\HardwareSerial3.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\HardwareSerial.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\HardwareSerial0.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\IPAddress.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\Stream.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\Print.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\WMath.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\abi.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\Tone.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\USBCore.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\new.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\WString.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\main.cpp.o Using previously compiled file: C:\Users\S9634\AppData\Local\Temp\arduino_build_166848\core\core.a Archiving built core (caching) in: C:\Users\S9634\AppData\Local\Temp\arduino_cache_512680\core\core_arduino_avr_uno_1afa363b7690f16d8aa98041515c4401.a Linking everything together... "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-gcc" -Wall -Wextra -Os -g -flto -fuse-linker-plugin -Wl,--gc-sections -mmcu=atmega328p -o "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848/sketch_dec29a.ino.elf" "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848\\sketch\\sketch_dec29a.ino.cpp.o" "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848/core\\core.a" "-LC:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848" -lm "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -j .eeprom --set-section-flags=.eeprom=alloc,load --no-change-warnings --change-section-lma .eeprom=0 "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848/sketch_dec29a.ino.elf" "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848/sketch_dec29a.ino.eep" "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-objcopy" -O ihex -R .eeprom "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848/sketch_dec29a.ino.elf" "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848/sketch_dec29a.ino.hex" "C:\\Users\\S9634\\Downloads\\arduino-1.8.10\\hardware\\tools\\avr/bin/avr-size" -A "C:\\Users\\S9634\\AppData\\Local\\Temp\\arduino_build_166848/sketch_dec29a.ino.elf" Sketch uses 444 bytes (1%) of program storage space. Maximum is 32256 bytes. Global variables use 9 bytes (0%) of dynamic memory, leaving 2039 bytes for local variables. Maximum is 2048 bytes. Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 Loģiski ka typedef tiek ignorēts, tapēc ka tiek lietots nepareizi. Es jau iepriekš rakstiju ka jābūt: typedef enum { ..... } tips_t; nevis typedef enum tips_t; { ..... }; Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 Vispār jau visa problēma izskatās ka vienkarši vajag nodefinēt funkcijas prototipu un tad viss darbojas, tapec arī atsevišķa headera gadījumā arī kompilējas. /* Name: test_v3.ino Created: 12/29/2019 12:50:53 PM Author: Jurchixx */ #include <stdint.h> typedef enum { WORK_START, WORK_STOP } alarmType_t; typedef enum { ALARM_ON, ALARM_OFF, } alarmActive_t; typedef struct { uint8_t hours; uint8_t minutes; alarmType_t type; alarmActive_t active; } alarm_t; alarm_t *getNextAlarm(alarm_t* alarmArr, uint8_t sizeOfAlarmArr, uint8_t thisTimeHours, uint8_t thisTimeMinutes); alarm_t alarms[] = { {8, 0, WORK_START, ALARM_ON}, {9, 45, WORK_STOP, ALARM_ON}, {9, 50, WORK_STOP, ALARM_ON}, {10, 0, WORK_START, ALARM_ON}, {12, 0, WORK_STOP, ALARM_ON}, {14, 45, WORK_STOP, ALARM_ON}, {14, 50, WORK_STOP, ALARM_ON}, //{8, 50, WORK_STOP, ALARM_ON}, //{6, 50, WORK_STOP, ALARM_ON}, //{6, 30, WORK_STOP, ALARM_ON}, {15, 0, WORK_START, ALARM_ON}, {17, 0, WORK_STOP, ALARM_ON} }; alarm_t *getNextAlarm(alarm_t* alarmArr, uint8_t sizeOfAlarmArr, uint8_t thisTimeHours, uint8_t thisTimeMinutes) { alarm_t* nextAlarm = alarmArr; while (sizeOfAlarmArr--) { if (!(nextAlarm->hours < thisTimeHours) && (nextAlarm->active != ALARM_OFF)) { if (nextAlarm->hours > thisTimeHours) break; else if (nextAlarm->minutes > thisTimeMinutes) break; } if (sizeOfAlarmArr) *nextAlarm++; else nextAlarm = alarms; } return nextAlarm; } // the setup function runs once when you press reset or power the board void setup() {} // the loop function runs over and over again until power down or reset void loop() {} @Jurkins Un ja tu nelieto typedef, tad nelito _t pēc tipa nosaukuma, jo pa lielam tas nozīmē, ka tas ir kautkāds tevis paša atvasināts tips izmantojot typedf. Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 Toč, ja prototipu nodefinē, tad strādā. Jocīgi, ka tas pats Atmel Studio tīrā c++ projektā ņem pretī jebkādos variantos. @AndrisBB, ņemšu šo vērā, "pareizrakstība" klibo. Un tos typedef praktiski nelietoju, sevišķi šādos vienkāršos gadījumos. Šajā kodā tas bija izmisuma izpausme?. Nevarēju saprast, kas notiek un visādi izmēģinājos. Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 (labots) Bija, bija, bet, kā jau teicu, tas bija no izmisuma?. Un tas nekādi nemainīja rezultātu. Labots Decembris 29, 2019 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 Visa problēma slēpjas faktā ka viņš negrib kompilēt bez tā funkcijas prototipa. Tākā viņš kompilē ar C++ kompilātoru, tad tas typedef nav būtisks, kompilējas arī bez viņiem. Kapēc viņš tieši piesienas return tipam ir interesanti, jo par argumentu listi vņš nesūdzas. Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 (labots) Tak nē, nekas nav dzēsts. Pirmajā postā ir tā uzrakstīts. Pirms 11 minūtēm , AndrisBB teica: Kapēc viņš tieši piesienas return tipam Jā un, ja uzraksta struct alarm_t *getNextAlarm(... ) tad viss ir kārtībā. Piem. CodeLite kompilē. Šim gan ir pašam savs kompilators. Labots Decembris 29, 2019 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 Nu kad es manuāli kompilēju ar to pašu avg-g++ (to kas tiek pieinstalēts kopā ar Arduino IDE), tad arī kompilējas bez struct Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 (labots) Arī online Arduino IDE to kodu kompilē, bez struct. Kautkas vienkārši dīvains ir tanī Arduino IDE versijā, kas man pieinstalēta. Pirms 2 minūtēm , ieleja teica: neredzu neko tādu (es par pirmo semikolu) Tas vienkārši typo, kopējot. Kodā ko kompilēju tāda extra semikola nav. Labots Decembris 29, 2019 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 Pirms 1 minūtes , ieleja teica: (es par pirmo semikolu) oj, sorry, neieraudzīju pat to semikolu. Nē, tā gan nav. Pirms 1 minūtes , AndrisBB teica: Arduino IDE Tikko pamēģināju. Arduino IDE kompilē. 1.8.10 Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 (labots) Man versija 2:1.0.5 Labots Decembris 29, 2019 - AndrisBB Link to comment Share on other sites More sharing options...
AndrisBB Decembris 29, 2019 Share Decembris 29, 2019 (labots) Ok, mistērija atrisināta. Arduino IDE pārraksta to .ino failu uz citu .cpp failu un ja tai funkcijai nav definēts prototips, tad pieliek pati savu. Bet pieliek tā ka tas prototips ir pirms tā strukta definēšananas (Par to arī kompilātors piesienas). Ja pats manuāli uzraksta prototipu, tad tas ir pēc tā strukt un viss kompilējas. Vēlviens labs iemesls nelietot to Arduīno kaku #line 1 "sketch_dec29a.ino" /* Name: test_v3.ino Created: 12/29/2019 12:50:53 PM Author: Jurchixx */ #include "Arduino.h" alarm_t *getNextAlarm(alarm_t* alarmArr, uint8_t sizeOfAlarmArr, uint8_t thisTimeHours, uint8_t thisTimeMinutes); void setup(); void loop(); #line 9 enum alarmType_t { WORK_START, WORK_STOP }; enum alarmActive_t { ALARM_ON, ALARM_OFF, }; struct alarm_t { uint8_t hours; uint8_t minutes; alarmType_t type; alarmActive_t active; } ; alarm_t alarms[] = { {8, 0, WORK_START, ALARM_ON}, {9, 45, WORK_STOP, ALARM_ON}, {9, 50, WORK_STOP, ALARM_ON}, {10, 0, WORK_START, ALARM_ON}, {12, 0, WORK_STOP, ALARM_ON}, {14, 45, WORK_STOP, ALARM_ON}, {14, 50, WORK_STOP, ALARM_ON}, //{8, 50, WORK_STOP, ALARM_ON}, //{6, 50, WORK_STOP, ALARM_ON}, //{6, 30, WORK_STOP, ALARM_ON}, {15, 0, WORK_START, ALARM_ON}, {17, 0, WORK_STOP, ALARM_ON} }; alarm_t *getNextAlarm(alarm_t* alarmArr, uint8_t sizeOfAlarmArr, uint8_t thisTimeHours, uint8_t thisTimeMinutes) { alarm_t* nextAlarm = alarmArr; while (sizeOfAlarmArr--) { if (!(nextAlarm->hours < thisTimeHours) && (nextAlarm->active != ALARM_OFF)) { if (nextAlarm->hours > thisTimeHours) break; else if (nextAlarm->minutes > thisTimeMinutes) break; } if (sizeOfAlarmArr) *nextAlarm++; else nextAlarm = alarms; } return nextAlarm; } // the setup function runs once when you press reset or power the board void setup() {} // the loop function runs over and over again until power down or reset void loop() {} Labots Decembris 29, 2019 - AndrisBB 1 Link to comment Share on other sites More sharing options...
Jurkins Decembris 29, 2019 Author Share Decembris 29, 2019 (labots) Pirms 26 minūtēm , AndrisBB teica: Vēlviens labs iemesls tomēr ātrāk aizmigrēt uz stm32. Piekrītu. Tik baigi pierasts tajā Studio?. Applausi @AndrisBB! p.s. velns, man laikam ir talants uzrakt šitādus sū...? Labots Decembris 29, 2019 - Jurkins Link to comment Share on other sites More sharing options...
Mateushs Februāris 13, 2020 Share Februāris 13, 2020 (labots) On 12/29/2019 at 1:44 PM, Jurkins said: ja nav žēl 19 USD gadā, tad paņem par brīvu Visual Studio Community 2019. Aha, sākumā samaksā, un tad paņem par brīvu. Labots Februāris 13, 2020 - Mateushs 1 Link to comment Share on other sites More sharing options...
Jurkins Februāris 13, 2020 Author Share Februāris 13, 2020 Pirms 29 minūtēm , Mateushs teica: sākumā samaksā, un tad paņem par brīvu Tu, draudziņ, vienkārši galīgi neesi tēmā... Paņem par brīvu VS2019 un, ja nav žēl 19 USD gadā, tad pieinstalē Visual Micro Arduino videi. p.s. veiksmi pavecu tēmi šķirstīšanā un bagu meklēšanā ? Link to comment Share on other sites More sharing options...
Mateushs Februāris 13, 2020 Share Februāris 13, 2020 12 minutes ago, Jurkins said: Tu, draudziņ, vienkārši galīgi neesi tēmā... Paņem par brīvu VS2019 un, ja nav žēl 19 USD gadā, tad pieinstalē Visual Micro Arduino videi. p.s. veiksmi pavecu tēmi šķirstīšanā un bagu meklēšanā ? Es nemeklēju vecas tēmas un bagus tajās... Sorry 1 Link to comment Share on other sites More sharing options...
Anonīms Alkoholiķis Februāris 13, 2020 Share Februāris 13, 2020 @Mateushs, LASIES PROM! Vismaz līdz brīdim, kamēr iemācīsies rakstīt atbildes kaut ko necitējot. Tāpat iemācies lasīt, secīgi lasīt, un pēc tam lasīt izlasīt arī noteikumus. Link to comment Share on other sites More sharing options...
Jurkins Februāris 13, 2020 Author Share Februāris 13, 2020 ok, tad Tevi interesē arduino vide uz VS2019? Link to comment Share on other sites More sharing options...
AndrisBB Februāris 13, 2020 Share Februāris 13, 2020 (labots) Tādiem mērķiem instalēt Visual Studio ir pilnīgs overkill, plus uz Linux tāpat nedarbojas. Es darbam un arī izklaidei izmantoju VS Code, priekš C++, Pythona, Javascripta, draiveriem, kerneļa un jebkā cita kas ienāk prātā. Ja gribas debugot mikrocontrolieri, tad pieslēgt openOCD nav problēmas. Un neparko nav jāmaksā. https://www.justinmklam.com/posts/2017/10/vscode-debugger-setup/ https://micro-ros.github.io/docs/tutorials/advanced/debugging_vscode/ https://developer.toradex.com/software/freertos/developing-m4-applications-using-visual-studio-code Labots Februāris 13, 2020 - AndrisBB Link to comment Share on other sites More sharing options...
Jurkins Februāris 13, 2020 Author Share Februāris 13, 2020 (labots) @AndrisBB, varētu Tev piekrist, bet tam VS Code pieslēgt visu cilvēkam, kurš pusnopietni darbojas ar arduino... savukārt tas visual mikro ir kosmoss salīdzinot ar arduino defaulto vidi. Krietni sen pamēģināju to VS Code un , godīgi sakot, apnika ņemties ar pluginiem, setingiem u.t.t. Labots Februāris 13, 2020 - Jurkins Link to comment Share on other sites More sharing options...
AndrisBB Februāris 13, 2020 Share Februāris 13, 2020 (labots) Nu viss jau ir relatīvi. Ja sanāk manuāli pašam mainīt openOCD configurāciju, dabūt GDB darbojas, tad pēc tā visa pāris klikški iekš VS Code, lai viņu pievienotu pie GDB ir sīkums. Jāuztaisa laikam būs kādu dienu video, kā setupot STM32 projektu izmantojot CubeMAx, tad importēt iekš VS Code un debuggot ar openOCD. Labots Februāris 13, 2020 - AndrisBB 1 Link to comment Share on other sites More sharing options...
Recommended Posts
Izveido kontu, vai pieraksties esošajā, lai komentētu
Jums ir jābūt šī foruma biedram, lai varētu komentēt tēmas
Izveidot jaunu kontu
Piereģistrējies un izveido jaunu kontu, tas būs viegli!
Reģistrēt jaunu kontuPierakstīties
Jums jau ir konts? Pierakstieties tajā šeit!
Pierakstīties tagad!