Jump to content

C++ kļūda


Jurkins
 Share

Recommended Posts

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

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

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

Anonīms Alkoholiķis
struct alarm_t

 

Link to comment
Share on other sites

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

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

 

Labots - Anonīms Alkoholiķis
Link to comment
Share on other sites

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

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.

Labots - Anonīms Alkoholiķis
Link to comment
Share on other sites


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

Anonīms Alkoholiķis

Fuck c++, FTW, C89 4ever!

Link to comment
Share on other sites

@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

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 - AndrisBB
Link to comment
Share on other sites

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

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

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

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

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

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

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

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

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

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

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

Labots - Jurkins
Link to comment
Share on other sites

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

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

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

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 - AndrisBB
Link to comment
Share on other sites

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

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

 

Labots - AndrisBB
  • Patīk 1
Link to comment
Share on other sites

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

  • 1 month later...
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 - Mateushs
  • Kādas šausmas! 1
Link to comment
Share on other sites

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

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
Link to comment
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.

Link to comment
Share on other sites

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 - AndrisBB
Link to comment
Share on other sites

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

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 - AndrisBB
  • Patīk 1
Link to comment
Share on other sites

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 kontu

Pierakstīties

Jums jau ir konts? Pierakstieties tajā šeit!

Pierakstīties tagad!
 Share

×
×
  • Izveidot jaunu...