Jump to content
Jurkins

C++ kļūda

Recommended Posts

Jurkins

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'

Edited by Jurkins

Share this post


Link to post
Share on other sites
energys

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?

Share this post


Link to post
Share on other sites
Jurkins

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.

Share this post


Link to post
Share on other sites
Anonīms Alkoholiķis
struct alarm_t

 

Share this post


Link to post
Share on other sites
Jurkins

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ā.

Share this post


Link to post
Share on other sites
Anonīms Alkoholiķis

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 ..

 

Edited by Anonīms Alkoholiķis

Share this post


Link to post
Share on other sites
Jurkins

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".

Share this post


Link to post
Share on other sites
Anonīms Alkoholiķis

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.

Edited by Anonīms Alkoholiķis

Share this post


Link to post
Share on other sites
Jurkins

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!

Share this post


Link to post
Share on other sites
Anonīms Alkoholiķis

Fuck c++, FTW, C89 4ever!

Share this post


Link to post
Share on other sites
Ronalds

@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.

Share this post


Link to post
Share on other sites
AndrisBB

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.

Edited by AndrisBB

Share this post


Link to post
Share on other sites
Jurkins
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.

 

Edited by Jurkins

Share this post


Link to post
Share on other sites
AndrisBB

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

Share this post


Link to post
Share on other sites
AndrisBB

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.

Share this post


Link to post
Share on other sites
Pukinens
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.

  • Atbalstu 1

Share this post


Link to post
Share on other sites
Jurkins
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)

 

Share this post


Link to post
Share on other sites
Pukinens
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".

Share this post


Link to post
Share on other sites
AndrisBB

Nope, nekompilējas ar Arduino IDE, VS plugins tur nebūs pie vainas.

 

Share this post


Link to post
Share on other sites
Pukinens

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.

 

Share this post


Link to post
Share on other sites
AndrisBB

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;
{
	.....
};

 

Share this post


Link to post
Share on other sites
AndrisBB

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.

Share this post


Link to post
Share on other sites
Jurkins

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.

Share this post


Link to post
Share on other sites
ieleja
1 stundu atpakaļ, AndrisBB teica:

nevis


typedef enum tips_t; 
{
  			..... 
};

 

 

 

vai tad tā kaut kur bija?

 

Share this post


Link to post
Share on other sites
Jurkins

Bija, bija, bet, kā jau teicu, tas bija no izmisuma?. Un tas nekādi nemainīja rezultātu.

Edited by Jurkins

Share this post


Link to post
Share on other sites
AndrisBB

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. 

Share this post


Link to post
Share on other sites
ieleja
Pirms 20 minūtēm , Jurkins teica:

bija

 

es vienkārši neko tādu topikā tagad nemanu, tāpēc pajautāju - bet ja esi padzēsies, tad ok, saprotu

 

Share this post


Link to post
Share on other sites
Jurkins

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.

Edited by Jurkins

Share this post


Link to post
Share on other sites
AndrisBB

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 

Share this post


Link to post
Share on other sites
ieleja

nu ok, tad man browseris nepareizi rāda, neredzu neko tādu (es par pirmo semikolu)

 

Share this post


Link to post
Share on other sites
AndrisBB

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.

Edited by AndrisBB

Share this post


Link to post
Share on other sites
Jurkins
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

Share this post


Link to post
Share on other sites
AndrisBB

Man versija 2:1.0.5

Edited by AndrisBB

Share this post


Link to post
Share on other sites
AndrisBB

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 :D

 

#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() {}

 

Edited by AndrisBB
  • Patīk 1

Share this post


Link to post
Share on other sites
Jurkins
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ū...?

Edited by Jurkins

Share this post


Link to post
Share on other sites
Mateushs
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. 

Edited by Mateushs
  • Kādas šausmas! 1

Share this post


Link to post
Share on other sites
Jurkins
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ā ?

Share this post


Link to post
Share on other sites
Mateushs
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

  • Kādas šausmas! 1

Share this post


Link to post
Share on other sites
Anonīms Alkoholiķis

@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.

Share this post


Link to post
Share on other sites
Jurkins

ok, tad Tevi interesē arduino vide uz VS2019?

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...