Gast
#595672
Guten Morgen Zusammen, ich habe ein Problem mit folgender Funktion :
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
Diese funktion soll an dem Portpin "ENC_Din" 8bit serielle daten empfangen und in die Variable spiindat schieben. Das hat auch super geklappt mit der SDCC Version 2.6.0 #4309 (Jul 28 2006). Mit den SDCC versionen ab Mai diesen Jahres funktioniert das jetzt nicht mehr. In der .lst datei der "alten" version sah das ganze dann so aus : 1 ;-------------------------------------------------------- 2 ; File Created by SDCC : FreeWare ANSI-C Compiler 3 ; Version 2.6.0 #4309 (Jul 28 2006) 4 ; This file generated Mon Apr 23 10:15:21 2007 5 ;-------------------------------------------------------- ... 534 ;Allocation info for local variables in function 'spiIn' 535 ;------------------------------------------------------------ 536 ;bitcnt Allocated to registers r3 537 ;spiindat Allocated to registers r2 538 ;------------------------------------------------------------ 539 ; spi.c:26: unsigned char spiIn () 540 ; ----------------------------------------- 541 ; function spiIn 542 ; ----------------------------------------- 543 _spiIn: 544 ; spi.c:29: unsigned char spiindat = 0; 545 ; genAssign 546 mov r2,#0x00 547 ; spi.c:30: for (bitcnt=0;bitcnt<8;++bitcnt) 548 ; genAssign 549 mov r3,#0x00 550 00101$: 551 ; genCmpLt 552 ; genCmp 553 cjne r3,#0x08,00110$ 554 00110$: 555 ; genIfxJump 556 ; Peephole 108.a removed ljmp by inverse jump logic 557 jnc 00104$ 558 ; Peephole 300 removed redundant label 00111$ 559 ; spi.c:32: ENC_CLK = 1; 560 ; genAssign 561 setb _P2_6 562 ; spi.c:33: spiindat<<=1; 563 ; genLeftShift 564 ; genLeftShiftLiteral 565 ; genlshOne 566 mov a,r2 567 ; Peephole 254 optimized left shift 568 add a,r2 569 mov r2,a 570 ; spi.c:34: spiindat+= ENC_Din; 571 ; genAssign 572 clr a 573 mov c,_P2_4 574 rlc a 575 ; genPlus 576 mov r4,a 577 ; Peephole 177.b removed redundant mov 578 ; Peephole 236.a used r2 instead of ar2 579 add a,r2 580 mov r2,a 581 ; spi.c:35: ENC_CLK = 0; 582 ; genAssign 583 clr _P2_6 584 ; spi.c:30: for (bitcnt=0;bitcnt<8;++bitcnt) 585 ; genPlus 586 ; genPlusIncr 587 inc r3 588 ; Peephole 112.b changed ljmp to sjmp 589 sjmp 00101$ 590 00104$: 591 ; spi.c:37: return spiindat; 592 ; genRet 593 mov dpl,r2 594 ; Peephole 300 removed redundant label 00105$ 595 ret Bei der Version von Heute z.B. kommt das raus : 1 ;-------------------------------------------------------- 2 ; File Created by SDCC : free open source ANSI-C Compiler 3 ; Version 2.7.2 #4871 (Jul 2 2007) 4 ; This file generated Tue Jul 03 07:41:33 2007 5 ;-------------------------------------------------------- ... 525 ;------------------------------------------------------------ 526 ;Allocation info for local variables in function 'spiIn' 527 ;------------------------------------------------------------ 528 ;bitcnt Allocated to registers r3 529 ;spiindat Allocated to registers r2 530 ;------------------------------------------------------------ 531 ; spi.c:43: unsigned char spiIn() 532 ; ----------------------------------------- 533 ; function spiIn 534 ; ----------------------------------------- 535 _spiIn: 536 ; spi.c:46: unsigned char spiindat = 0; 537 mov r2,#0x00 538 ; spi.c:47: for (bitcnt=0;bitcnt<8;++bitcnt) 539 mov r3,#0x00 540 00101$: 541 cjne r3,#0x08,00110$ 542 00110$: 543 jnc 00104$ 544 ; spi.c:49: ENC_CLK = 1; 545 setb _P2_6 546 ; spi.c:50: spiindat<<=1; 547 mov a,r2 548 add a,r2 549 mov r2,a 550 ; spi.c:51: spiindat+= ENC_Din; 551 mov c,_P2_4 552 clr a 553 rlc a 554 mov r4,a 555 add a,r2 556 mov r2,a 557 ; spi.c:52: ENC_CLK = 0; 558 clr _P2_6 559 ; spi.c:47: for (bitcnt=0;bitcnt<8;++bitcnt) 560 inc r3 561 sjmp 00101$ 562 00104$: 563 ; spi.c:54: return spiindat; 564 mov dpl,r2 565 ret Ich vermute das Problem liegt in den Zeilen 551 bis 553, da erst der Akku gelöscht wird und dann geschoben wird. Hat soetwas schon jemand gehabt und kennt jemand einen Workaround für dieses Problem. Ich habe schon versucht diese Funktion anders zu formulieren aber das brachte bis jetzt auch nicht den gewünschten erfolg. Gruß aus Köln Frank