avr gcc

Sep 19, 2004 5 Replies
ïÞÅÎØ ÒÁÄ ×ÁÓ ×ÉÄÅÔØ, All!
ÎÁÒ×ÁÌÓÑ ÐÒÉ ÎÁÐÉÓÁÎÉÉ ÐÒÉÍÉÔÉ×ÎÏÊ ÐÒÏÇÒÁÍÍËÉ ÎÁ ÇÌÀË: ÐÒÉÎÉÍÁÀÔÓÑ ÂÁÊÔÙ Ó ÓÏÍ-ÐÏÒÔÁ, ÄÌÑ ËÏÎÔÒÏÌÑ ÐÅÒÅÄÁÀ ÂÁÊÔ É ÅÇÏ ÉÎ×ÅÒÓÉÀ ÐÅÒÅÍÅÎÎÕÀ ××ÅÌ ÄÌÑ ÎÁÇÌÑÄÎÏÓÔÉ, ÞÔÏ ×ÏÐÒÏÓÏ× Ï ÔÉÐÁÈ ÎÅÂÙÌÏ

=== Cut === char w1,w2; w1=rx[2]; W2=rx[4];



if ( ~w1 == w2 ) { out_h=rx[2]; out_l=rx[3]; }



ÜÔÏ ÂÙÌ ÉÓÈÏÄÎÉË, Á ×ÏÔ ÞÔÏ ÎÁËÏÍÐÉÌÑÌÏÓØ:


141:kbm_i.c ****



142:kbm_i.c **** char w1,w2;
143:kbm_i.c **** w1=rx[2];
412 .LM50:
413 .LBB4:
414 017a 4B81 ldd r20,Y+3
144:kbm_i.c **** w2=rx[4];
416 .LM51:
417 017c 8D81 ldd r24,Y+5
145:kbm_i.c ****
ÐÏËÁ ×ÓÅ ÎÏÒÍÁÌØÎÏ, × 20 É 24 ÒÅÇÉÓÔÒÙ ÂÁÊÔÙ ÐÏÌÏÖÉÌÉ ÉÚ ÏÚÕ


146:kbm_i.c **** if ( ~w1 == w2 )



419 .LM52:
420 017e 242F mov r18,r20
421 0180 3327 clr r19
422 0182 2095 com r18
423 0184 3095 com r19
424 0186 9927 clr r25
425 0188 2817 cp r18,r24
426 018a 3907 cpc r19,r25
427 018c 31F4 brne .L25


8-ÍÉ ÂÉÔÎÕÀ ÁÒÉÆÍÅÎÔÉËÕ ÇÃà ÎÅ ÌÀÂÉÔ, É × ÉÔÏÇÅ ÉÍÅÅÍ ×ÓÅÇÄÁ ÒÁÚÎÙÅ 19 É 25 ÒÅÇÉÓÔÒÙ, É ×ÓÅÇÄÁ ÎÅ×ÙÐÏÌÎÅÎÎÏÅ ÕÓÌÏ×ÉÅ.


147:kbm_i.c **** {
148:kbm_i.c **** out_h=rx[2];
429 .LM53:
430 018e 4093 0000 sts out_h,r20
149:kbm_i.c **** out_l=rx[3];
432 .LM54:
433 0192 8C81 ldd r24,Y+4
434 0194 8093 0000 sts out_l,r24
435 0198 9ECF rjmp .L29
436 .L25:
150:kbm_i.c **** } === Cut ===
ÞÔÏ ÄÅÌÁÔØ? ÉÌÉ Ñ ÓÏ×ÓÅÍ × ó ÎÉÞÅÇÏ ÎÅ ÐÏÎÉÍÁÀ? Ó Ñ×ÎÙÍ ÐÒÉ×ÅÄÅÎÉÅÍ ÔÉÐÏ× ÐÒÏÓÔÅÊÛÁÑ ÐÒÏ×ÅÒËÁ ÎÁ ÒÁ×ÅÎÓÔ×Ï ÂÁÊÔÁ É ÉÎ×ÅÒÓÉÉ ÄÒÕÇÏÇÏ ÂÁÊÔÁ × ÔÁËÏÇÏ ÍÏÎÓÔÒÁ ÐÒÅ×ÒÁÝÁÅÔÓÑ... É Õ ÍÅÎÑ ×ÓÅÒÁ×ÎÏ ÎÅ ÓÒÁÂÏÔÁÌÏ...
Ä×Á ÐÒÅÄÙÄÕÝÉÈ ÐÒÏÅËÔÁ × 20Ë É 25Ë ËÏÄÁ ÎÁ ÍÅÇÅ32 ÓÞÁÓ ÐÒÏ×ÅÒÑÔØ ÂÕÄÕ, ÉÈ ÅÝÅ ÐÏÌÎÏÓÔØÀ × ÄÅÌÅ ÎÅ ÇÏÎÑÌÉ... ÐÒÁ×ÄÁ ÔÁÍ Ó TCP-IP ÒÁÂÏÔÁ Õ ÍÅÎÑ, É ÞÁÒÏ× ÐÏÞÔÉ ÎÅÔ, ÍÏÖÅÔ ÐÏÜÔÏÍÕ É ÐÒÏÎÅÓÌÏ.
ÎÅ×ÅÚÅÎÉÅ ÐÒÏÄÏÖÁÅÔÓÑ, 13-Ñ ×ÙÔÁÝÅÎÁÑ ÉÚ ÌÉÎÅÊËÉ ÍÅÇÁ8 × ÄÉÐÅ ÐÒÏÛÉ×ÁÔØÓÑ ÎÅ ÚÁÈÏÔÅÌÁ... ÎÉ × ÕÓÔÒÏÊÓÔ×Å, ÎÉ ÏÔÄÅÌØÎÏ. 14-Ñ ÐÒÏÛÉÌÁÓØ É ÒÁÂÏÔÁÅÔ. ×ÓÅ ÐÒÅÄÙÄÕÝÉÅ ÔÏÖÅ ÒÁÂÏÔÁÀÔ...


AVL


Это у тебя глюк, обусловленный невнимательным чтением книг.

А чего ты ожидал? Арифметика в Си всегда минимум int, следовательнно ~0x00nn == 0xFFmm которые НИКОГДА не равны 0x00xx или пусть даже 0xFFxx.

Запиши как if ((unsigned char)(~w1) == (unsigned char)w2) и будет тебе счастье. И никаких там фокусов после этого быть не должно, ну а если неэффективно - ну что поделать.

Аркадий

ðÒÉ×ÅÔ Vasiliy!

19 Sep 04 13:27, Vasiliy Andreev ÐÉÓÁÌ All:

VA> 146:kbm_i.c **** if ( ~w1 == w2 ) VA> 419 .LM52: VA> 420 017e 242F mov r18,r20 VA> 421 0180 3327 clr r19 VA> 422 0182 2095 com r18 VA> 423 0184 3095 com r19 VA> 424 0186 9927 clr r25 VA> 425 0188 2817 cp r18,r24 VA> 426 018a 3907 cpc r19,r25 VA> 427 018c 31F4 brne .L25

ðÏËÁÖÉ ×ÓÅ ËÌÀÞÉ, Ó ËÏÔÏÒÙÍÉ Ú×ÁÌ ËÏÍÐÉÌÑÔÏÒ. ñ ÕÖÅ ÄÏÇÁÄÁÌÓÑ, ÞÔÏ ÔÁÍ ÎÅ ÔÁË, ÎÏ ÔÙ ÐÏËÁÖÉ ÓÎÁÞÁÌÁ. õ ÍÅÎÑ avr-gcc 3.4.0 ÄÁÅÔ ÓÏ×ÅÒÛÅÎÎÏ ÐÒÁ×ÉÌØÎÙÊ ËÏÄ. ÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... åÓÌÉ ÄÏÌÇÏ ÄÕÍÁÔØ ÏÄÎÉ É ÔÅ ÖÅ ÍÙÓÌÉ, ÏÎÉ ÓÔÁÎÏ×ÑÔÓÑ ÇÒÑÚÎÙÍÉ.
ïÞÅÎØ ÒÁÄ ×ÁÓ ×ÉÄÅÔØ, Alex!

20 óÅÎ 04 × 00:18, Alex Mogilnikov ÐÉÓÁÌ Vasiliy Andreev ÓÌÅÄÕÀÝÅÅ:

AM> ðÒÉ×ÅÔ Vasiliy!

AM> 19 Sep 04 13:27, Vasiliy Andreev ÐÉÓÁÌ All:

VA>> 146:kbm_i.c **** if ( ~w1 == w2 ) VA>> 419 .LM52: VA>> 420 017e 242F mov r18,r20 VA>> 421 0180 3327 clr r19 VA>> 422 0182 2095 com r18 VA>> 423 0184 3095 com r19 VA>> 424 0186 9927 clr r25 VA>> 425 0188 2817 cp r18,r24 VA>> 426 018a 3907 cpc r19,r25 VA>> 427 018c 31F4 brne .L25

AM> ðÏËÁÖÉ ×ÓÅ ËÌÀÞÉ, Ó ËÏÔÏÒÙÍÉ Ú×ÁÌ ËÏÍÐÉÌÑÔÏÒ. ñ ÕÖÅ ÄÏÇÁÄÁÌÓÑ, ÞÔÏ ÔÁÍ AM> ÎÅ ÔÁË, ÎÏ ÔÙ ÐÏËÁÖÉ ÓÎÁÞÁÌÁ. õ ÍÅÎÑ avr-gcc 3.4.0 ÄÁÅÔ ÓÏ×ÅÒÛÅÎÎÏ AM> ÐÒÁ×ÉÌØÎÙÊ ËÏÄ.

ÍÅÎÑ ÔËÎÕÌÉ ÎÏÓÏÍ × ÎÅÏÂÈÏÄÉÍÏÓÔØ ÞÔÅÎÉÑ ËÎÉÇ, ÎÏ Ï 16-ÔÉ ÂÉÔÎÏÓÔÉ Ñ É ÓÁÍ ÚÎÁÀ, ÎÏ ÄÏ ÜÔÏÇÏ Ó ÐÏÄÏÂÎÙÍ ÎÅ ÓÔÁÌËÉ×ÁÌÓÑ, ÔÁË ËÁË × ÂÏÌØÛÅ × "ÒÁÊÄÅ" ÐÏÄ È51 É ÂÏÒÌÁÎÄÁÈ ÐÏÄ È86 ÐÉÓÁÌ, É ÎÁ ÜÔÉ ÇÒÁÂÌÉ ÎÅ ÎÁÓÔÕÐÁÌ. ×ÏÔ É ÓÐÒÏÓÉÌ Õ "ÍÉÒÏ×ÏÇÏ ÒÁÚÕÍÁ", ËÁË ÏÂÏÊÔÉ ÜÔÏ ÂÅÚ Ñ×ÎÏÇÏ ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÔÉÐÏ×.

=== Cut === # MCU name MCU = atmega8

# Output format. (can be srec, ihex, binary) FORMAT = ihex

# Target file name (without extension). TARGET = kbm_r

# List C source files here. (C dependencies are automatically generated.) SRC = $(TARGET).c SERIAL.c

# Optimization level, can be [0, 1, 2, 3, s]. OPT = s

# Compiler flag to set the C Standard level. # c89 - "ANSI" C # gnu89 - c89 plus GCC extensions # c99 - ISO C99 standard (not yet fully implemented) # gnu99 - c99 plus GCC extensions CSTANDARD = -std=gnu99

# Place -D or -U options here CDEFS =

# Place -I options here CINCS =

# Compiler flags. # -g: generate debugging information # -O*: optimization level # -f...: tuning, see GCC manual and avr-libc documentation # -Wall...: warning level # -Wa,...: tell GCC to pass this to the assembler. # -adhlns...: create assembler listing CFLAGS = -g CFLAGS += $(CDEFS) $(CINCS) CFLAGS += -O$(OPT) CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums CFLAGS += -Wall -Wstrict-prototypes CFLAGS += -Wa,-adhlns=$(<:.c=.lst) CFLAGS += $(patsubst %,-I%,$(EXTRAINCDIRS)) CFLAGS += $(CSTANDARD)

# Assembler flags. # -Wa,...: tell GCC to pass this to the assembler. # -ahlms: create listing # -gstabs: have the assembler create line number information ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs

#Additional libraries.

# Minimalistic printf version PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min

# Floating point printf version (requires MATH_LIB = -lm below) PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt

PRINTF_LIB =

# Minimalistic scanf version SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min

# Floating point + %[ scanf version (requires MATH_LIB = -lm below) SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt

SCANF_LIB =

MATH_LIB = -lm

EXTMEMOPTS =

# Linker flags. # -Wl,...: tell GCC to pass this to linker. # -Map: create map file # --cref: add cross reference to map file LDFLAGS = -Wl,-Map=$(TARGET).map,--cref LDFLAGS += $(EXTMEMOPTS) LDFLAGS += $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)

=== Cut ===

AVL

ðÒÉ×ÅÔ Vasiliy!

20 Sep 04 09:05, Vasiliy Andreev ÐÉÓÁÌ Alex Mogilnikov:

AM>> ðÏËÁÖÉ ×ÓÅ ËÌÀÞÉ, Ó ËÏÔÏÒÙÍÉ Ú×ÁÌ ËÏÍÐÉÌÑÔÏÒ. ñ ÕÖÅ AM>> ÄÏÇÁÄÁÌÓÑ, ÞÔÏ ÔÁÍ ÎÅ ÔÁË, ÎÏ ÔÙ ÐÏËÁÖÉ ÓÎÁÞÁÌÁ. õ ÍÅÎÑ avr-gcc AM>> 3.4.0 ÄÁÅÔ ÓÏ×ÅÒÛÅÎÎÏ ÐÒÁ×ÉÌØÎÙÊ ËÏÄ.

VA> === Cut === VA> CFLAGS += -funsigned-char -funsigned-bitfields -fpack-struct VA> === Cut ===

ñ ÔÁË É ÄÕÍÁÌ. ôÙ ÓÁÍ ÓËÁÚÁÌ ËÏÍÐÉÌÑÔÏÒÕ ÓÞÉÔÁÔØ ×ÓÅ char ËÁË unsigned char, ÐÏÓÌÅ ÞÅÇÏ ÐÉÛÅÛØ:

if(~w1 == w2)

÷ ÄÁÎÎÏÍ ÓÌÕÞÁÅ ËÏÍÐÉÌÑÔÏÒ ÓÏ×ÅÒÛÅÎÎÏ ÐÒÁ×, ÓÇÅÎÅÒÉ× ËÏÄ, × ËÏÔÏÒÏÍ ÕÓÌÏ×ÉÅ ÎÉËÏÇÄÁ ÎÅ ×ÙÐÏÌÎÑÅÔÓÑ. ðÏ ÐÒÁ×ÉÌÁÍ ÑÚÙËÁ C, ÐÒÅÏÂÒÁÚÏ×ÁÎÉÅ unsigned char × int ×ÙÐÏÌÎÑÅÔÓÑ ÄÏÐÏÌÎÅÎÉÅÍ ÎÕÌÑÍÉ ÓÐÒÁ×Á. óÏÏÔ×ÅÔÓÔ×ÅÎÎÏ, ÐÏÓÌÅ ÉÎ×ÅÒÔÉÒÏ×ÁÎÉÑ × ÓÔÁÒÛÉÈ ÂÁÊÔÁÈ ×ÓÅÇÄÁ ÂÕÄÕÔ ÅÄÉÎÉÃÙ, É ~w1 ÎÉËÏÇÄÁ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÒÁ×ÎÏ w2.

VA> ÍÅÎÑ ÔËÎÕÌÉ ÎÏÓÏÍ × ÎÅÏÂÈÏÄÉÍÏÓÔØ ÞÔÅÎÉÑ ËÎÉÇ, ÎÏ Ï 16-ÔÉ ÂÉÔÎÏÓÔÉ Ñ VA> É ÓÁÍ ÚÎÁÀ, ÎÏ ÄÏ ÜÔÏÇÏ Ó ÐÏÄÏÂÎÙÍ ÎÅ ÓÔÁÌËÉ×ÁÌÓÑ, ÔÁË ËÁË × ÂÏÌØÛÅ × VA> "ÒÁÊÄÅ" ÐÏÄ È51 É ÂÏÒÌÁÎÄÁÈ ÐÏÄ È86 ÐÉÓÁÌ, É ÎÁ ÜÔÉ ÇÒÁÂÌÉ ÎÅ VA> ÎÁÓÔÕÐÁÌ. ×ÏÔ É ÓÐÒÏÓÉÌ Õ "ÍÉÒÏ×ÏÇÏ ÒÁÚÕÍÁ", ËÁË ÏÂÏÊÔÉ ÜÔÏ ÂÅÚ Ñ×ÎÏÇÏ VA> ÐÒÅÏÂÒÁÚÏ×ÁÎÉÑ ÔÉÐÏ×.

úÁÄÁ×ÁÊ ÓÒÁÚÕ ÐÒÁ×ÉÌØÎÙÅ ÔÉÐÙ - ÎÅ ÐÒÉÄÅÔÓÑ ÉÈ ÐÒÅÏÂÒÁÚÏ×Ù×ÁÔØ. ÷ Ô×ÏÅÍ ÐÒÉÍÅÒÅ w1 É w2 ÄÏÌÖÎÙ ÂÙÌÉ ÂÙÔØ ÔÉÐÁ signed char. á (éíèï) ÅÝÅ ÂÏÌÅÅ ÐÒÁ×ÉÌØÎÙÍ ÂÙÌÏ ÂÙ ÎÁÐÉÓÁÔØ ÔÁË:

w1 = ~rx[2]; w2 = rx[4]; if(w1 == w2)

÷ÓÅÇÏ ÎÁÉÌÕÞÛÅÇÏ, [Team PCAD 2000] áÌÅËÓÅÊ í. ... ëÒÙÓËÁÓ. ðÏÔÏÍÕ ÞÔÏ ËÒÙÓÁ ×ÁÍ ÄÏ×ÅÒÑÅÔ.

AM> á (éíèï) ÅÝÅ ÂÏÌÅÅ ÐÒÁ×ÉÌØÎÙÍ ÂÙÌÏ ÂÙ ÎÁÐÉÓÁÔØ ÔÁË:

AM> w1 = ~rx[2]; AM> w2 = rx[4]; AM> if(w1 == w2)

if (w1^0xff == w2) -- ÉÍÈÏ, ÂÏÌÅÅ ÎÁÇÌÑÄÎÏ.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required