From: Anthony A. <ant...@gm...> - 2010-01-06 23:45:30
|
I'm using: user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 2.9.4 #5556 (Oct 29 2009) (UNIX) compile flags are: sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o In the following routines, I see incorrect variable passing on the stack. int cc2430_rf_send(void *data, unsigned short len); int cc2430_rf_send_b (void *data, unsigned short len) __banked; int cc2430_rf_send(void *payload, unsigned short payload_len) { printf("sending %x bytes.\n",payload_len); printf("payload addr %08lx.\n", payload); return cc2430_rf_send_b(payload, payload_len); } int cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked { uint8_t i, counter; printf("sending %x bytes.\n",payload_len); printf("payload addr %08lx.\n", payload); } In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, dph, b instead of pushed on the stack; 996 ;------------------------------------------------------------ 997 ;Allocation info for local variables in function 'cc2430_rf_send' 998 ;------------------------------------------------------------ 999 ;payload_len Allocated to stack - offset -4 1000 ;payload Allocated to registers r2 r3 r4 1001 ;------------------------------------------------------------ 1002 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, unsigned short payload_len) 1003 ; ----------------------------------------- 1004 ; function cc2430_rf_send 1005 ; ----------------------------------------- 01E7 1006 _cc2430_rf_send: <calls to printf deleted> 0240 D0 04 1054 pop ar4 0242 D0 03 1055 pop ar3 0244 D0 02 1056 pop ar2 1057 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return cc2430_rf_send_b(payload, payload_len); 0246 E5*00 1058 mov a,_bp 0248 24 FC 1059 add a,#0xfc 024A F8 1060 mov r0,a 024B E6 1061 mov a,@r0 024C C0 E0 1062 push acc 024E 08 1063 inc r0 024F E6 1064 mov a,@r0 0250 C0 E0 1065 push acc 0252 8A 82 1066 mov dpl,r2 0254 8B 83 1067 mov dph,r3 0256 8C F0 1068 mov b,r4 0258 78r00 1069 mov r0,#_cc2430_rf_send_b 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b >> 8) 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b >> 16) 025E 12s00r00 1072 lcall __sdcc_banked_call 1087 ;------------------------------------------------------------ 1088 ;Allocation info for local variables in function 'cc2430_rf_send_b' 1089 ;------------------------------------------------------------ 1090 ;payload_len Allocated to stack - offset -4 1091 ;payload Allocated to stack - offset 1 1092 ;i Allocated to registers r5 1093 ;counter Allocated to registers r2 1094 ;------------------------------------------------------------ 1095 ; ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked 1096 ; ----------------------------------------- 1097 ; function cc2430_rf_send_b 1098 ; ----------------------------------------- 0254 1099 _cc2430_rf_send_b: 0254 C0*00 1100 push _bp 0256 85 81*00 1101 mov _bp,sp 0259 C0 82 1102 push dpl 025B C0 83 1103 push dph 025D C0 F0 1104 push b 1105 ; ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x bytes.\n",payload_len); 025F E5*00 1106 mov a,_bp 0261 24 FC 1107 add a,#0xfc 0263 F8 1108 mov r0,a 0264 E6 1109 mov a,@r0 0265 C0 E0 1110 push acc 0267 08 1111 inc r0 0268 E6 1112 mov a,@r0 0269 C0 E0 1113 push acc 026B 74r0A 1114 mov a,#__str_0 Program output is sending 2d bytes. payload_len addr 40006b00. sending 9000 bytes. payload addr 00e09100. |
From: Maarten B. <sou...@ds...> - 2010-01-07 19:54:19
|
Anthony, I see no problem with payload being sent through DPL/DPH/B. It is properly assigned when sending in cc2430_rf_send() and properly read and put on stack when receiving in cc2430_rf_send_b(). Are you messing up DPTR or B or the stack in your adapted __sdcc_banked_call except the one push of the current bank? Btw. Did you know that sdcc can also printf pointers with %p? Maarten > I'm using: > > user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v > SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 > 2.9.4 #5556 (Oct 29 2009) (UNIX) > > > compile flags are: > > sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c > ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o > sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c > ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o > > In the following routines, I see incorrect variable passing on the stack. > > int cc2430_rf_send(void *data, unsigned short len); > int cc2430_rf_send_b (void *data, unsigned short len) __banked; > > int > cc2430_rf_send(void *payload, unsigned short payload_len) > { > printf("sending %x bytes.\n",payload_len); > printf("payload addr %08lx.\n", payload); > return cc2430_rf_send_b(payload, payload_len); > } > > > > > int > cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked > { > uint8_t i, counter; > printf("sending %x bytes.\n",payload_len); > printf("payload addr %08lx.\n", payload); > } > > In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, > dph, b instead of pushed on the stack; > 996 > ;------------------------------------------------------------ > 997 ;Allocation info for local variables in > function 'cc2430_rf_send' > 998 > ;------------------------------------------------------------ > 999 ;payload_len Allocated to > stack - offset -4 > 1000 ;payload Allocated to > registers r2 r3 r4 > 1001 > ;------------------------------------------------------------ > 1002 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, > unsigned short payload_len) > 1003 ; > ----------------------------------------- > 1004 ; function cc2430_rf_send > 1005 ; > ----------------------------------------- > 01E7 1006 _cc2430_rf_send: > > <calls to printf deleted> > > 0240 D0 04 1054 pop ar4 > 0242 D0 03 1055 pop ar3 > 0244 D0 02 1056 pop ar2 > 1057 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return > cc2430_rf_send_b(payload, payload_len); > 0246 E5*00 1058 mov a,_bp > 0248 24 FC 1059 add a,#0xfc > 024A F8 1060 mov r0,a > 024B E6 1061 mov a,@r0 > 024C C0 E0 1062 push acc > 024E 08 1063 inc r0 > 024F E6 1064 mov a,@r0 > 0250 C0 E0 1065 push acc > 0252 8A 82 1066 mov dpl,r2 > 0254 8B 83 1067 mov dph,r3 > 0256 8C F0 1068 mov b,r4 > 0258 78r00 1069 mov r0,#_cc2430_rf_send_b > 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b > >> 8) > 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b > >> 16) > 025E 12s00r00 1072 lcall __sdcc_banked_call > > > > > 1087 > ;------------------------------------------------------------ > 1088 ;Allocation info for local variables in > function 'cc2430_rf_send_b' > 1089 > ;------------------------------------------------------------ > 1090 ;payload_len Allocated to > stack - offset -4 > 1091 ;payload Allocated to > stack - offset 1 > 1092 ;i Allocated to > registers r5 > 1093 ;counter Allocated to > registers r2 > 1094 > ;------------------------------------------------------------ > 1095 ; > ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, > unsigned short payload_len) __banked > 1096 ; > ----------------------------------------- > 1097 ; function cc2430_rf_send_b > 1098 ; > ----------------------------------------- > 0254 1099 _cc2430_rf_send_b: > 0254 C0*00 1100 push _bp > 0256 85 81*00 1101 mov _bp,sp > 0259 C0 82 1102 push dpl > 025B C0 83 1103 push dph > 025D C0 F0 1104 push b > 1105 ; > ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x > bytes.\n",payload_len); > 025F E5*00 1106 mov a,_bp > 0261 24 FC 1107 add a,#0xfc > 0263 F8 1108 mov r0,a > 0264 E6 1109 mov a,@r0 > 0265 C0 E0 1110 push acc > 0267 08 1111 inc r0 > 0268 E6 1112 mov a,@r0 > 0269 C0 E0 1113 push acc > 026B 74r0A 1114 mov a,#__str_0 > > > Program output is > sending 2d bytes. > payload_len addr 40006b00. > sending 9000 bytes. > payload addr 00e09100. |
From: Anthony A. <ant...@gm...> - 2010-01-07 20:17:22
|
I didn't need to adapt the __sdcc_banked_call routine, I was able to use the provided example unmodified. rf_send_b is expecting payload_len to be at SP -4 and payload to be at SP -1. rf_send doesn't put payload on the stack at all so rf_send_b doesn't find payload_len in the correct position. Maarten Brock wrote: > Anthony, > > I see no problem with payload being sent through > DPL/DPH/B. It is properly assigned when sending in > cc2430_rf_send() and properly read and put on stack when > receiving in cc2430_rf_send_b(). Are you messing up DPTR > or B or the stack in your adapted __sdcc_banked_call > except the one push of the current bank? > > Btw. Did you know that sdcc can also printf pointers > with %p? > > Maarten > > >> I'm using: >> >> user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v >> SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 >> 2.9.4 #5556 (Oct 29 2009) (UNIX) >> >> >> compile flags are: >> >> sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c >> ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o >> sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c >> ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o >> >> In the following routines, I see incorrect variable passing on the stack. >> >> int cc2430_rf_send(void *data, unsigned short len); >> int cc2430_rf_send_b (void *data, unsigned short len) __banked; >> >> int >> cc2430_rf_send(void *payload, unsigned short payload_len) >> { >> printf("sending %x bytes.\n",payload_len); >> printf("payload addr %08lx.\n", payload); >> return cc2430_rf_send_b(payload, payload_len); >> } >> >> >> >> >> int >> cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked >> { >> uint8_t i, counter; >> printf("sending %x bytes.\n",payload_len); >> printf("payload addr %08lx.\n", payload); >> } >> >> In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, >> dph, b instead of pushed on the stack; >> 996 >> ;------------------------------------------------------------ >> 997 ;Allocation info for local variables in >> function 'cc2430_rf_send' >> 998 >> ;------------------------------------------------------------ >> 999 ;payload_len Allocated to >> stack - offset -4 >> 1000 ;payload Allocated to >> registers r2 r3 r4 >> 1001 >> ;------------------------------------------------------------ >> 1002 ; >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, >> unsigned short payload_len) >> 1003 ; >> ----------------------------------------- >> 1004 ; function cc2430_rf_send >> 1005 ; >> ----------------------------------------- >> 01E7 1006 _cc2430_rf_send: >> >> <calls to printf deleted> >> >> 0240 D0 04 1054 pop ar4 >> 0242 D0 03 1055 pop ar3 >> 0244 D0 02 1056 pop ar2 >> 1057 ; >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return >> cc2430_rf_send_b(payload, payload_len); >> 0246 E5*00 1058 mov a,_bp >> 0248 24 FC 1059 add a,#0xfc >> 024A F8 1060 mov r0,a >> 024B E6 1061 mov a,@r0 >> 024C C0 E0 1062 push acc >> 024E 08 1063 inc r0 >> 024F E6 1064 mov a,@r0 >> 0250 C0 E0 1065 push acc >> 0252 8A 82 1066 mov dpl,r2 >> 0254 8B 83 1067 mov dph,r3 >> 0256 8C F0 1068 mov b,r4 >> 0258 78r00 1069 mov r0,#_cc2430_rf_send_b >> 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b >> >> 8) >> 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b >> >> 16) >> 025E 12s00r00 1072 lcall __sdcc_banked_call >> >> >> >> >> 1087 >> ;------------------------------------------------------------ >> 1088 ;Allocation info for local variables in >> function 'cc2430_rf_send_b' >> 1089 >> ;------------------------------------------------------------ >> 1090 ;payload_len Allocated to >> stack - offset -4 >> 1091 ;payload Allocated to >> stack - offset 1 >> 1092 ;i Allocated to >> registers r5 >> 1093 ;counter Allocated to >> registers r2 >> 1094 >> ;------------------------------------------------------------ >> 1095 ; >> ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, >> unsigned short payload_len) __banked >> 1096 ; >> ----------------------------------------- >> 1097 ; function cc2430_rf_send_b >> 1098 ; >> ----------------------------------------- >> 0254 1099 _cc2430_rf_send_b: >> 0254 C0*00 1100 push _bp >> 0256 85 81*00 1101 mov _bp,sp >> 0259 C0 82 1102 push dpl >> 025B C0 83 1103 push dph >> 025D C0 F0 1104 push b >> 1105 ; >> ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x >> bytes.\n",payload_len); >> 025F E5*00 1106 mov a,_bp >> 0261 24 FC 1107 add a,#0xfc >> 0263 F8 1108 mov r0,a >> 0264 E6 1109 mov a,@r0 >> 0265 C0 E0 1110 push acc >> 0267 08 1111 inc r0 >> 0268 E6 1112 mov a,@r0 >> 0269 C0 E0 1113 push acc >> 026B 74r0A 1114 mov a,#__str_0 >> >> >> Program output is >> sending 2d bytes. >> payload_len addr 40006b00. >> sending 9000 bytes. >> payload addr 00e09100. >> > > > ------------------------------------------------------------------------------ > This SF.Net email is sponsored by the Verizon Developer Community > Take advantage of Verizon's best-in-class app development support > A streamlined, 14 day to market process makes app distribution fast and easy > Join now and get one step closer to millions of Verizon customers > http://p.sf.net/sfu/verizon-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Maarten B. <sou...@ds...> - 2010-01-07 20:26:50
|
Anthony, > I didn't need to adapt the __sdcc_banked_call routine, I was able to use > the provided example unmodified. Ok. > rf_send_b is expecting payload_len to be at SP -4 and payload to be at > SP -1. rf_send doesn't put payload on the stack at all so rf_send_b > doesn't find payload_len in the correct position. No, rf_send_b wants payload at SP+1 (plus 1) and it puts it there itself at the start of the function when receiving DPL/DPH/B. It treats payload as a local variable. > Maarten Brock wrote: > > Anthony, > > > > I see no problem with payload being sent through > > DPL/DPH/B. It is properly assigned when sending in > > cc2430_rf_send() and properly read and put on stack when > > receiving in cc2430_rf_send_b(). Are you messing up DPTR > > or B or the stack in your adapted __sdcc_banked_call > > except the one push of the current bank? > > > > Btw. Did you know that sdcc can also printf pointers > > with %p? > > > > Maarten > > > > > >> I'm using: > >> > >> user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v > >> SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 > >> 2.9.4 #5556 (Oct 29 2009) (UNIX) > >> > >> > >> compile flags are: > >> > >> sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c > >> ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o > >> sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c > >> ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o > >> > >> In the following routines, I see incorrect variable passing on the stack. > >> > >> int cc2430_rf_send(void *data, unsigned short len); > >> int cc2430_rf_send_b (void *data, unsigned short len) __banked; > >> > >> int > >> cc2430_rf_send(void *payload, unsigned short payload_len) > >> { > >> printf("sending %x bytes.\n",payload_len); > >> printf("payload addr %08lx.\n", payload); > >> return cc2430_rf_send_b(payload, payload_len); > >> } > >> > >> > >> > >> > >> int > >> cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked > >> { > >> uint8_t i, counter; > >> printf("sending %x bytes.\n",payload_len); > >> printf("payload addr %08lx.\n", payload); > >> } > >> > >> In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, > >> dph, b instead of pushed on the stack; > >> 996 > >> ;------------------------------------------------------------ > >> 997 ;Allocation info for local variables in > >> function 'cc2430_rf_send' > >> 998 > >> ;------------------------------------------------------------ > >> 999 ;payload_len Allocated to > >> stack - offset -4 > >> 1000 ;payload Allocated to > >> registers r2 r3 r4 > >> 1001 > >> ;------------------------------------------------------------ > >> 1002 ; > >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, > >> unsigned short payload_len) > >> 1003 ; > >> ----------------------------------------- > >> 1004 ; function cc2430_rf_send > >> 1005 ; > >> ----------------------------------------- > >> 01E7 1006 _cc2430_rf_send: > >> > >> <calls to printf deleted> > >> > >> 0240 D0 04 1054 pop ar4 > >> 0242 D0 03 1055 pop ar3 > >> 0244 D0 02 1056 pop ar2 > >> 1057 ; > >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return > >> cc2430_rf_send_b(payload, payload_len); > >> 0246 E5*00 1058 mov a,_bp > >> 0248 24 FC 1059 add a,#0xfc > >> 024A F8 1060 mov r0,a > >> 024B E6 1061 mov a,@r0 > >> 024C C0 E0 1062 push acc > >> 024E 08 1063 inc r0 > >> 024F E6 1064 mov a,@r0 > >> 0250 C0 E0 1065 push acc > >> 0252 8A 82 1066 mov dpl,r2 > >> 0254 8B 83 1067 mov dph,r3 > >> 0256 8C F0 1068 mov b,r4 > >> 0258 78r00 1069 mov r0,#_cc2430_rf_send_b > >> 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b > >> >> 8) > >> 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b > >> >> 16) > >> 025E 12s00r00 1072 lcall __sdcc_banked_call > >> > >> > >> > >> > >> 1087 > >> ;------------------------------------------------------------ > >> 1088 ;Allocation info for local variables in > >> function 'cc2430_rf_send_b' > >> 1089 > >> ;------------------------------------------------------------ > >> 1090 ;payload_len Allocated to > >> stack - offset -4 > >> 1091 ;payload Allocated to > >> stack - offset 1 > >> 1092 ;i Allocated to > >> registers r5 > >> 1093 ;counter Allocated to > >> registers r2 > >> 1094 > >> ;------------------------------------------------------------ > >> 1095 ; > >> ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, > >> unsigned short payload_len) __banked > >> 1096 ; > >> ----------------------------------------- > >> 1097 ; function cc2430_rf_send_b > >> 1098 ; > >> ----------------------------------------- > >> 0254 1099 _cc2430_rf_send_b: > >> 0254 C0*00 1100 push _bp > >> 0256 85 81*00 1101 mov _bp,sp > >> 0259 C0 82 1102 push dpl > >> 025B C0 83 1103 push dph > >> 025D C0 F0 1104 push b > >> 1105 ; > >> ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x > >> bytes.\n",payload_len); > >> 025F E5*00 1106 mov a,_bp > >> 0261 24 FC 1107 add a,#0xfc > >> 0263 F8 1108 mov r0,a > >> 0264 E6 1109 mov a,@r0 > >> 0265 C0 E0 1110 push acc > >> 0267 08 1111 inc r0 > >> 0268 E6 1112 mov a,@r0 > >> 0269 C0 E0 1113 push acc > >> 026B 74r0A 1114 mov a,#__str_0 > >> > >> > >> Program output is > >> sending 2d bytes. > >> payload_len addr 40006b00. > >> sending 9000 bytes. > >> payload addr 00e09100. > >> |
From: Anthony A. <ant...@gm...> - 2010-01-07 20:43:07
|
Well then I'm stumped. For some reason the payload_len has changed from 2d to 9000. Take a look at the program output. Maarten Brock wrote: > Anthony, > > >> I didn't need to adapt the __sdcc_banked_call routine, I was able to use >> the provided example unmodified. >> > > Ok. > > >> rf_send_b is expecting payload_len to be at SP -4 and payload to be at >> SP -1. rf_send doesn't put payload on the stack at all so rf_send_b >> doesn't find payload_len in the correct position. >> > > No, rf_send_b wants payload at SP+1 (plus 1) and it puts it there > itself at the start of the function when receiving DPL/DPH/B. It > treats payload as a local variable. > > >> Maarten Brock wrote: >> >>> Anthony, >>> >>> I see no problem with payload being sent through >>> DPL/DPH/B. It is properly assigned when sending in >>> cc2430_rf_send() and properly read and put on stack when >>> receiving in cc2430_rf_send_b(). Are you messing up DPTR >>> or B or the stack in your adapted __sdcc_banked_call >>> except the one push of the current bank? >>> >>> Btw. Did you know that sdcc can also printf pointers >>> with %p? >>> >>> Maarten >>> >>> >>> >>>> I'm using: >>>> >>>> user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v >>>> SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 >>>> 2.9.4 #5556 (Oct 29 2009) (UNIX) >>>> >>>> >>>> compile flags are: >>>> >>>> sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c >>>> ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o >>>> sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c >>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o >>>> >>>> In the following routines, I see incorrect variable passing on the stack. >>>> >>>> int cc2430_rf_send(void *data, unsigned short len); >>>> int cc2430_rf_send_b (void *data, unsigned short len) __banked; >>>> >>>> int >>>> cc2430_rf_send(void *payload, unsigned short payload_len) >>>> { >>>> printf("sending %x bytes.\n",payload_len); >>>> printf("payload addr %08lx.\n", payload); >>>> return cc2430_rf_send_b(payload, payload_len); >>>> } >>>> >>>> >>>> >>>> >>>> int >>>> cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked >>>> { >>>> uint8_t i, counter; >>>> printf("sending %x bytes.\n",payload_len); >>>> printf("payload addr %08lx.\n", payload); >>>> } >>>> >>>> In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, >>>> dph, b instead of pushed on the stack; >>>> 996 >>>> ;------------------------------------------------------------ >>>> 997 ;Allocation info for local variables in >>>> function 'cc2430_rf_send' >>>> 998 >>>> ;------------------------------------------------------------ >>>> 999 ;payload_len Allocated to >>>> stack - offset -4 >>>> 1000 ;payload Allocated to >>>> registers r2 r3 r4 >>>> 1001 >>>> ;------------------------------------------------------------ >>>> 1002 ; >>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, >>>> unsigned short payload_len) >>>> 1003 ; >>>> ----------------------------------------- >>>> 1004 ; function cc2430_rf_send >>>> 1005 ; >>>> ----------------------------------------- >>>> 01E7 1006 _cc2430_rf_send: >>>> >>>> <calls to printf deleted> >>>> >>>> 0240 D0 04 1054 pop ar4 >>>> 0242 D0 03 1055 pop ar3 >>>> 0244 D0 02 1056 pop ar2 >>>> 1057 ; >>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return >>>> cc2430_rf_send_b(payload, payload_len); >>>> 0246 E5*00 1058 mov a,_bp >>>> 0248 24 FC 1059 add a,#0xfc >>>> 024A F8 1060 mov r0,a >>>> 024B E6 1061 mov a,@r0 >>>> 024C C0 E0 1062 push acc >>>> 024E 08 1063 inc r0 >>>> 024F E6 1064 mov a,@r0 >>>> 0250 C0 E0 1065 push acc >>>> 0252 8A 82 1066 mov dpl,r2 >>>> 0254 8B 83 1067 mov dph,r3 >>>> 0256 8C F0 1068 mov b,r4 >>>> 0258 78r00 1069 mov r0,#_cc2430_rf_send_b >>>> 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b >>>> >> 8) >>>> 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b >>>> >> 16) >>>> 025E 12s00r00 1072 lcall __sdcc_banked_call >>>> >>>> >>>> >>>> >>>> 1087 >>>> ;------------------------------------------------------------ >>>> 1088 ;Allocation info for local variables in >>>> function 'cc2430_rf_send_b' >>>> 1089 >>>> ;------------------------------------------------------------ >>>> 1090 ;payload_len Allocated to >>>> stack - offset -4 >>>> 1091 ;payload Allocated to >>>> stack - offset 1 >>>> 1092 ;i Allocated to >>>> registers r5 >>>> 1093 ;counter Allocated to >>>> registers r2 >>>> 1094 >>>> ;------------------------------------------------------------ >>>> 1095 ; >>>> ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, >>>> unsigned short payload_len) __banked >>>> 1096 ; >>>> ----------------------------------------- >>>> 1097 ; function cc2430_rf_send_b >>>> 1098 ; >>>> ----------------------------------------- >>>> 0254 1099 _cc2430_rf_send_b: >>>> 0254 C0*00 1100 push _bp >>>> 0256 85 81*00 1101 mov _bp,sp >>>> 0259 C0 82 1102 push dpl >>>> 025B C0 83 1103 push dph >>>> 025D C0 F0 1104 push b >>>> 1105 ; >>>> ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x >>>> bytes.\n",payload_len); >>>> 025F E5*00 1106 mov a,_bp >>>> 0261 24 FC 1107 add a,#0xfc >>>> 0263 F8 1108 mov r0,a >>>> 0264 E6 1109 mov a,@r0 >>>> 0265 C0 E0 1110 push acc >>>> 0267 08 1111 inc r0 >>>> 0268 E6 1112 mov a,@r0 >>>> 0269 C0 E0 1113 push acc >>>> 026B 74r0A 1114 mov a,#__str_0 >>>> >>>> >>>> Program output is >>>> sending 2d bytes. >>>> payload_len addr 40006b00. >>>> sending 9000 bytes. >>>> payload addr 00e09100. >>>> >>>> > > > ------------------------------------------------------------------------------ > This SF.Net email is sponsored by the Verizon Developer Community > Take advantage of Verizon's best-in-class app development support > A streamlined, 14 day to market process makes app distribution fast and easy > Join now and get one step closer to millions of Verizon customers > http://p.sf.net/sfu/verizon-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Maarten B. <sou...@ds...> - 2010-01-07 20:54:04
|
The output even shows different text from what's in the code. Either one is not copy/pasted here. Is there any chance you're stack is overflowing? > Well then I'm stumped. For some reason the payload_len has changed from > 2d to 9000. Take a look at the program output. > > > > Maarten Brock wrote: > > Anthony, > > > > > >> I didn't need to adapt the __sdcc_banked_call routine, I was able to use > >> the provided example unmodified. > >> > > > > Ok. > > > > > >> rf_send_b is expecting payload_len to be at SP -4 and payload to be at > >> SP -1. rf_send doesn't put payload on the stack at all so rf_send_b > >> doesn't find payload_len in the correct position. > >> > > > > No, rf_send_b wants payload at SP+1 (plus 1) and it puts it there > > itself at the start of the function when receiving DPL/DPH/B. It > > treats payload as a local variable. > > > > > >> Maarten Brock wrote: > >> > >>> Anthony, > >>> > >>> I see no problem with payload being sent through > >>> DPL/DPH/B. It is properly assigned when sending in > >>> cc2430_rf_send() and properly read and put on stack when > >>> receiving in cc2430_rf_send_b(). Are you messing up DPTR > >>> or B or the stack in your adapted __sdcc_banked_call > >>> except the one push of the current bank? > >>> > >>> Btw. Did you know that sdcc can also printf pointers > >>> with %p? > >>> > >>> Maarten > >>> > >>> > >>> > >>>> I'm using: > >>>> > >>>> user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v > >>>> SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 > >>>> 2.9.4 #5556 (Oct 29 2009) (UNIX) > >>>> > >>>> > >>>> compile flags are: > >>>> > >>>> sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c > >>>> ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o > >>>> sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c > >>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o > >>>> > >>>> In the following routines, I see incorrect variable passing on the stack. > >>>> > >>>> int cc2430_rf_send(void *data, unsigned short len); > >>>> int cc2430_rf_send_b (void *data, unsigned short len) __banked; > >>>> > >>>> int > >>>> cc2430_rf_send(void *payload, unsigned short payload_len) > >>>> { > >>>> printf("sending %x bytes.\n",payload_len); > >>>> printf("payload addr %08lx.\n", payload); > >>>> return cc2430_rf_send_b(payload, payload_len); > >>>> } > >>>> > >>>> > >>>> > >>>> > >>>> int > >>>> cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked > >>>> { > >>>> uint8_t i, counter; > >>>> printf("sending %x bytes.\n",payload_len); > >>>> printf("payload addr %08lx.\n", payload); > >>>> } > >>>> > >>>> In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, > >>>> dph, b instead of pushed on the stack; > >>>> 996 > >>>> ;------------------------------------------------------------ > >>>> 997 ;Allocation info for local variables in > >>>> function 'cc2430_rf_send' > >>>> 998 > >>>> ;------------------------------------------------------------ > >>>> 999 ;payload_len Allocated to > >>>> stack - offset -4 > >>>> 1000 ;payload Allocated to > >>>> registers r2 r3 r4 > >>>> 1001 > >>>> ;------------------------------------------------------------ > >>>> 1002 ; > >>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, > >>>> unsigned short payload_len) > >>>> 1003 ; > >>>> ----------------------------------------- > >>>> 1004 ; function cc2430_rf_send > >>>> 1005 ; > >>>> ----------------------------------------- > >>>> 01E7 1006 _cc2430_rf_send: > >>>> > >>>> <calls to printf deleted> > >>>> > >>>> 0240 D0 04 1054 pop ar4 > >>>> 0242 D0 03 1055 pop ar3 > >>>> 0244 D0 02 1056 pop ar2 > >>>> 1057 ; > >>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return > >>>> cc2430_rf_send_b(payload, payload_len); > >>>> 0246 E5*00 1058 mov a,_bp > >>>> 0248 24 FC 1059 add a,#0xfc > >>>> 024A F8 1060 mov r0,a > >>>> 024B E6 1061 mov a,@r0 > >>>> 024C C0 E0 1062 push acc > >>>> 024E 08 1063 inc r0 > >>>> 024F E6 1064 mov a,@r0 > >>>> 0250 C0 E0 1065 push acc > >>>> 0252 8A 82 1066 mov dpl,r2 > >>>> 0254 8B 83 1067 mov dph,r3 > >>>> 0256 8C F0 1068 mov b,r4 > >>>> 0258 78r00 1069 mov r0,#_cc2430_rf_send_b > >>>> 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b > >>>> >> 8) > >>>> 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b > >>>> >> 16) > >>>> 025E 12s00r00 1072 lcall __sdcc_banked_call > >>>> > >>>> > >>>> > >>>> > >>>> 1087 > >>>> ;------------------------------------------------------------ > >>>> 1088 ;Allocation info for local variables in > >>>> function 'cc2430_rf_send_b' > >>>> 1089 > >>>> ;------------------------------------------------------------ > >>>> 1090 ;payload_len Allocated to > >>>> stack - offset -4 > >>>> 1091 ;payload Allocated to > >>>> stack - offset 1 > >>>> 1092 ;i Allocated to > >>>> registers r5 > >>>> 1093 ;counter Allocated to > >>>> registers r2 > >>>> 1094 > >>>> ;------------------------------------------------------------ > >>>> 1095 ; > >>>> ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, > >>>> unsigned short payload_len) __banked > >>>> 1096 ; > >>>> ----------------------------------------- > >>>> 1097 ; function cc2430_rf_send_b > >>>> 1098 ; > >>>> ----------------------------------------- > >>>> 0254 1099 _cc2430_rf_send_b: > >>>> 0254 C0*00 1100 push _bp > >>>> 0256 85 81*00 1101 mov _bp,sp > >>>> 0259 C0 82 1102 push dpl > >>>> 025B C0 83 1103 push dph > >>>> 025D C0 F0 1104 push b > >>>> 1105 ; > >>>> ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x > >>>> bytes.\n",payload_len); > >>>> 025F E5*00 1106 mov a,_bp > >>>> 0261 24 FC 1107 add a,#0xfc > >>>> 0263 F8 1108 mov r0,a > >>>> 0264 E6 1109 mov a,@r0 > >>>> 0265 C0 E0 1110 push acc > >>>> 0267 08 1111 inc r0 > >>>> 0268 E6 1112 mov a,@r0 > >>>> 0269 C0 E0 1113 push acc > >>>> 026B 74r0A 1114 mov a,#__str_0 > >>>> > >>>> > >>>> Program output is > >>>> sending 2d bytes. > >>>> payload_len addr 40006b00. > >>>> sending 9000 bytes. > >>>> payload addr 00e09100. > >>>> > >>>> > > > > > > ------------------------------------------------------------------------------ > > This SF.Net email is sponsored by the Verizon Developer Community > > Take advantage of Verizon's best-in-class app development support > > A streamlined, 14 day to market process makes app distribution fast and easy > > Join now and get one step closer to millions of Verizon customers > > http://p.sf.net/sfu/verizon-dev2dev > > _______________________________________________ > > Sdcc-user mailing list > > Sdc...@li... > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > |
From: Anthony A. <ant...@gm...> - 2010-01-07 21:27:28
|
It should be a stack overflow. The stack supports up to 256 bytes. (?) The SP is at 0x78, so less than half full. Here is the program output now: sending 2d bytes. payload addr X:0xe091. SP 72. sending 7200 bytes. payload addr X:0xe091. SP 78. Here is the code now: int cc2430_rf_send(void *payload, unsigned short payload_len) { //cc2430_rf_payload = payload; //cc2430_rf_payload_len = payload_len; printf("sending %x bytes.\n",payload_len); printf("payload addr %p.\n", payload); printf("SP %x.\n", SP); return cc2430_rf_send_b(payload, payload_len); } int cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked //cc2430_rf_send_b(void *payload_in, unsigned short payload_len_in) __banked { uint8_t i, counter; //unsigned short payload_len=cc2430_rf_payload_len; //void *payload = cc2430_rf_payload; printf("sending %x bytes.\n",payload_len); printf("payload addr %p.\n", payload); printf("SP %x.\n", SP); } 1052 ;------------------------------------------------------------ 1053 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void *payload, unsigned short payload_len) 1054 ; ----------------------------------------- 1055 ; function cc2430_rf_send 1056 ; ----------------------------------------- 023C 1057 _cc2430_rf_send: 023C C0*00 1058 push _bp 023E 85 81*00 1059 mov _bp,sp 0241 AA 82 1060 mov r2,dpl 0243 AB 83 1061 mov r3,dph 0245 AC F0 1062 mov r4,b 1063 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("sending %x bytes.\n",payload_len); 0247 C0 02 1064 push ar2 0249 C0 03 1065 push ar3 024B C0 04 1066 push ar4 024D E5*00 1067 mov a,_bp 024F 24 FC 1068 add a,#0xfc 0251 F8 1069 mov r0,a 0252 E6 1070 mov a,@r0 0253 C0 E0 1071 push acc 0255 08 1072 inc r0 0256 E6 1073 mov a,@r0 0257 C0 E0 1074 push acc 0259 74r00 1075 mov a,#__str_0 025B C0 E0 1076 push acc 025D 74s00 1077 mov a,#(__str_0 >> 8) 025F C0 E0 1078 push acc 0261 74 80 1079 mov a,#0x80 0263 C0 E0 1080 push acc 0265 12s00r00 1081 lcall _printf 0268 E5 81 1082 mov a,sp 026A 24 FB 1083 add a,#0xfb 026C F5 81 1084 mov sp,a 026E D0 04 1085 pop ar4 0270 D0 03 1086 pop ar3 0272 D0 02 1087 pop ar2 1088 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: printf("payload addr %p.\n", payload); 0274 C0 02 1089 push ar2 0276 C0 03 1090 push ar3 0278 C0 04 1091 push ar4 027A C0 02 1092 push ar2 027C C0 03 1093 push ar3 027E C0 04 1094 push ar4 0280 74r13 1095 mov a,#__str_1 0282 C0 E0 1096 push acc 0284 74s00 1097 mov a,#(__str_1 >> 8) 0286 C0 E0 1098 push acc 0288 74 80 1099 mov a,#0x80 028A C0 E0 1100 push acc 028C 12s00r00 1101 lcall _printf 028F E5 81 1102 mov a,sp 0291 24 FA 1103 add a,#0xfa 0293 F5 81 1104 mov sp,a 1105 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:134: printf("SP %x.\n", SP); 0295 AD 81 1106 mov r5,_SP 0297 7E 00 1107 mov r6,#0x00 0299 C0 05 1108 push ar5 029B C0 06 1109 push ar6 029D 74r25 1110 mov a,#__str_2 029F C0 E0 1111 push acc 02A1 74s00 1112 mov a,#(__str_2 >> 8) 02A3 C0 E0 1113 push acc 02A5 74 80 1114 mov a,#0x80 02A7 C0 E0 1115 push acc 02A9 12s00r00 1116 lcall _printf 02AC E5 81 1117 mov a,sp 02AE 24 FB 1118 add a,#0xfb 02B0 F5 81 1119 mov sp,a 02B2 D0 04 1120 pop ar4 02B4 D0 03 1121 pop ar3 02B6 D0 02 1122 pop ar2 1123 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:135: return cc2430_rf_send_b(payload, payload_len); 02B8 E5*00 1124 mov a,_bp 02BA 24 FC 1125 add a,#0xfc 02BC F8 1126 mov r0,a 02BD E6 1127 mov a,@r0 02BE C0 E0 1128 push acc 02C0 08 1129 inc r0 02C1 E6 1130 mov a,@r0 02C2 C0 E0 1131 push acc 02C4 8A 82 1132 mov dpl,r2 02C6 8B 83 1133 mov dph,r3 02C8 8C F0 1134 mov b,r4 02CA 78r00 1135 mov r0,#_cc2430_rf_send_b 02CC 79s00 1136 mov r1,#(_cc2430_rf_send_b >> 8) 02CE 7As00 1137 mov r2,#(_cc2430_rf_send_b >> 16) 029B C0 06 1109 push ar6 029D 74r25 1110 mov a,#__str_2 029F C0 E0 1111 push acc 02A1 74s00 1112 mov a,#(__str_2 >> 8) 02A3 C0 E0 1113 push acc 02A5 74 80 1114 mov a,#0x80 02A7 C0 E0 1115 push acc 02A9 12s00r00 1116 lcall _printf 02AC E5 81 1117 mov a,sp 02AE 24 FB 1118 add a,#0xfb 02B0 F5 81 1119 mov sp,a 02B2 D0 04 1120 pop ar4 02B4 D0 03 1121 pop ar3 02B6 D0 02 1122 pop ar2 1123 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:135: return cc2430_rf_send_b(payload, payload_len); 02B8 E5*00 1124 mov a,_bp 02BA 24 FC 1125 add a,#0xfc 02BC F8 1126 mov r0,a 02BD E6 1127 mov a,@r0 02BE C0 E0 1128 push acc 02C0 08 1129 inc r0 02C1 E6 1130 mov a,@r0 02C2 C0 E0 1131 push acc 02C4 8A 82 1132 mov dpl,r2 02C6 8B 83 1133 mov dph,r3 02C8 8C F0 1134 mov b,r4 02CA 78r00 1135 mov r0,#_cc2430_rf_send_b 02CC 79s00 1136 mov r1,#(_cc2430_rf_send_b >> 8) 02CE 7As00 1137 mov r2,#(_cc2430_rf_send_b >> 16) 1115 ;------------------------------------------------------------ 1116 ;Allocation info for local variables in function 'cc2430_rf_send_b' 1117 ;------------------------------------------------------------ 1118 ;payload_len Allocated to stack - offset -4 1119 ;payload Allocated to stack - offset 1 1120 ;i Allocated to registers r5 1121 ;counter Allocated to registers r2 1122 ;------------------------------------------------------------ 1123 ; ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked 1124 ; ----------------------------------------- 1125 ; function cc2430_rf_send_b 1126 ; ----------------------------------------- 028D 1127 _cc2430_rf_send_b: 028D C0*00 1128 push _bp 028F 85 81*00 1129 mov _bp,sp 0292 C0 82 1130 push dpl 0294 C0 83 1131 push dph 0296 C0 F0 1132 push b 1133 ; ../../cpu/cc2430/dev/cc2430_rf.c:167: printf("sending %x bytes.\n",payload_len); 0298 E5*00 1134 mov a,_bp 029A 24 FC 1135 add a,#0xfc 029C F8 1136 mov r0,a 029D E6 1137 mov a,@r0 029E C0 E0 1138 push acc 02A0 08 1139 inc r0 02A1 E6 1140 mov a,@r0 02A2 C0 E0 1141 push acc 02A4 74r55 1142 mov a,#__str_2 1115 ;------------------------------------------------------------ 1116 ;Allocation info for local variables in function 'cc2430_rf_send_b' 1117 ;------------------------------------------------------------ 1118 ;payload_len Allocated to stack - offset -4 1119 ;payload Allocated to stack - offset 1 1120 ;i Allocated to registers r5 1121 ;counter Allocated to registers r2 1122 ;------------------------------------------------------------ 1123 ; ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked 1124 ; ----------------------------------------- 1125 ; function cc2430_rf_send_b 1126 ; ----------------------------------------- 028D 1127 _cc2430_rf_send_b: 028D C0*00 1128 push _bp 028F 85 81*00 1129 mov _bp,sp 0292 C0 82 1130 push dpl 0294 C0 83 1131 push dph 0296 C0 F0 1132 push b 1133 ; ../../cpu/cc2430/dev/cc2430_rf.c:167: printf("sending %x bytes.\n",payload_len); 0298 E5*00 1134 mov a,_bp 029A 24 FC 1135 add a,#0xfc 029C F8 1136 mov r0,a 029D E6 1137 mov a,@r0 029E C0 E0 1138 push acc 02A0 08 1139 inc r0 02A1 E6 1140 mov a,@r0 02A2 C0 E0 1141 push acc 02A4 74r55 1142 mov a,#__str_2 Here is crtbank.asm: __sdcc_banked_call:: push _PSBANK ;save return bank xch a,r0 ;save Acc in r0, do not assume any register bank push acc ;push LSB address mov a,r1 push acc ;push MSB address mov a,r2 ;get new bank anl a,#0x0F ;remove storage class indicator anl _PSBANK,#0xF0 orl _PSBANK,a ;select bank xch a,r0 ;restore Acc ret ;make the call Maarten Brock wrote: > The output even shows different text from what's in the > code. Either one is not copy/pasted here. > > Is there any chance you're stack is overflowing? > > > >> Well then I'm stumped. For some reason the payload_len has changed from >> 2d to 9000. Take a look at the program output. >> >> >> >> Maarten Brock wrote: >> >>> Anthony, >>> >>> >>> >>>> I didn't need to adapt the __sdcc_banked_call routine, I was able to use >>>> the provided example unmodified. >>>> >>>> >>> Ok. >>> >>> >>> >>>> rf_send_b is expecting payload_len to be at SP -4 and payload to be at >>>> SP -1. rf_send doesn't put payload on the stack at all so rf_send_b >>>> doesn't find payload_len in the correct position. >>>> >>>> >>> No, rf_send_b wants payload at SP+1 (plus 1) and it puts it there >>> itself at the start of the function when receiving DPL/DPH/B. It >>> treats payload as a local variable. >>> >>> >>> >>>> Maarten Brock wrote: >>>> >>>> >>>>> Anthony, >>>>> >>>>> I see no problem with payload being sent through >>>>> DPL/DPH/B. It is properly assigned when sending in >>>>> cc2430_rf_send() and properly read and put on stack when >>>>> receiving in cc2430_rf_send_b(). Are you messing up DPTR >>>>> or B or the stack in your adapted __sdcc_banked_call >>>>> except the one push of the current bank? >>>>> >>>>> Btw. Did you know that sdcc can also printf pointers >>>>> with %p? >>>>> >>>>> Maarten >>>>> >>>>> >>>>> >>>>> >>>>>> I'm using: >>>>>> >>>>>> user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v >>>>>> SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 >>>>>> 2.9.4 #5556 (Oct 29 2009) (UNIX) >>>>>> >>>>>> >>>>>> compile flags are: >>>>>> >>>>>> sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o >>>>>> sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o >>>>>> >>>>>> In the following routines, I see incorrect variable passing on the stack. >>>>>> >>>>>> int cc2430_rf_send(void *data, unsigned short len); >>>>>> int cc2430_rf_send_b (void *data, unsigned short len) __banked; >>>>>> >>>>>> int >>>>>> cc2430_rf_send(void *payload, unsigned short payload_len) >>>>>> { >>>>>> printf("sending %x bytes.\n",payload_len); >>>>>> printf("payload addr %08lx.\n", payload); >>>>>> return cc2430_rf_send_b(payload, payload_len); >>>>>> } >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> int >>>>>> cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked >>>>>> { >>>>>> uint8_t i, counter; >>>>>> printf("sending %x bytes.\n",payload_len); >>>>>> printf("payload addr %08lx.\n", payload); >>>>>> } >>>>>> >>>>>> In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, >>>>>> dph, b instead of pushed on the stack; >>>>>> 996 >>>>>> ;------------------------------------------------------------ >>>>>> 997 ;Allocation info for local variables in >>>>>> function 'cc2430_rf_send' >>>>>> 998 >>>>>> ;------------------------------------------------------------ >>>>>> 999 ;payload_len Allocated to >>>>>> stack - offset -4 >>>>>> 1000 ;payload Allocated to >>>>>> registers r2 r3 r4 >>>>>> 1001 >>>>>> ;------------------------------------------------------------ >>>>>> 1002 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, >>>>>> unsigned short payload_len) >>>>>> 1003 ; >>>>>> ----------------------------------------- >>>>>> 1004 ; function cc2430_rf_send >>>>>> 1005 ; >>>>>> ----------------------------------------- >>>>>> 01E7 1006 _cc2430_rf_send: >>>>>> >>>>>> <calls to printf deleted> >>>>>> >>>>>> 0240 D0 04 1054 pop ar4 >>>>>> 0242 D0 03 1055 pop ar3 >>>>>> 0244 D0 02 1056 pop ar2 >>>>>> 1057 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return >>>>>> cc2430_rf_send_b(payload, payload_len); >>>>>> 0246 E5*00 1058 mov a,_bp >>>>>> 0248 24 FC 1059 add a,#0xfc >>>>>> 024A F8 1060 mov r0,a >>>>>> 024B E6 1061 mov a,@r0 >>>>>> 024C C0 E0 1062 push acc >>>>>> 024E 08 1063 inc r0 >>>>>> 024F E6 1064 mov a,@r0 >>>>>> 0250 C0 E0 1065 push acc >>>>>> 0252 8A 82 1066 mov dpl,r2 >>>>>> 0254 8B 83 1067 mov dph,r3 >>>>>> 0256 8C F0 1068 mov b,r4 >>>>>> 0258 78r00 1069 mov r0,#_cc2430_rf_send_b >>>>>> 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b >>>>>> >> 8) >>>>>> 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b >>>>>> >> 16) >>>>>> 025E 12s00r00 1072 lcall __sdcc_banked_call >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> 1087 >>>>>> ;------------------------------------------------------------ >>>>>> 1088 ;Allocation info for local variables in >>>>>> function 'cc2430_rf_send_b' >>>>>> 1089 >>>>>> ;------------------------------------------------------------ >>>>>> 1090 ;payload_len Allocated to >>>>>> stack - offset -4 >>>>>> 1091 ;payload Allocated to >>>>>> stack - offset 1 >>>>>> 1092 ;i Allocated to >>>>>> registers r5 >>>>>> 1093 ;counter Allocated to >>>>>> registers r2 >>>>>> 1094 >>>>>> ;------------------------------------------------------------ >>>>>> 1095 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, >>>>>> unsigned short payload_len) __banked >>>>>> 1096 ; >>>>>> ----------------------------------------- >>>>>> 1097 ; function cc2430_rf_send_b >>>>>> 1098 ; >>>>>> ----------------------------------------- >>>>>> 0254 1099 _cc2430_rf_send_b: >>>>>> 0254 C0*00 1100 push _bp >>>>>> 0256 85 81*00 1101 mov _bp,sp >>>>>> 0259 C0 82 1102 push dpl >>>>>> 025B C0 83 1103 push dph >>>>>> 025D C0 F0 1104 push b >>>>>> 1105 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x >>>>>> bytes.\n",payload_len); >>>>>> 025F E5*00 1106 mov a,_bp >>>>>> 0261 24 FC 1107 add a,#0xfc >>>>>> 0263 F8 1108 mov r0,a >>>>>> 0264 E6 1109 mov a,@r0 >>>>>> 0265 C0 E0 1110 push acc >>>>>> 0267 08 1111 inc r0 >>>>>> 0268 E6 1112 mov a,@r0 >>>>>> 0269 C0 E0 1113 push acc >>>>>> 026B 74r0A 1114 mov a,#__str_0 >>>>>> >>>>>> >>>>>> Program output is >>>>>> sending 2d bytes. >>>>>> payload_len addr 40006b00. >>>>>> sending 9000 bytes. >>>>>> payload addr 00e09100. >>>>>> >>>>>> >>>>>> >>> ------------------------------------------------------------------------------ >>> This SF.Net email is sponsored by the Verizon Developer Community >>> Take advantage of Verizon's best-in-class app development support >>> A streamlined, 14 day to market process makes app distribution fast and easy >>> Join now and get one step closer to millions of Verizon customers >>> http://p.sf.net/sfu/verizon-dev2dev >>> _______________________________________________ >>> Sdcc-user mailing list >>> Sdc...@li... >>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>> >>> >> > > > > ------------------------------------------------------------------------------ > This SF.Net email is sponsored by the Verizon Developer Community > Take advantage of Verizon's best-in-class app development support > A streamlined, 14 day to market process makes app distribution fast and easy > Join now and get one step closer to millions of Verizon customers > http://p.sf.net/sfu/verizon-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Maarten B. <sou...@ds...> - 2010-01-07 22:18:28
|
> It should be a stack overflow. The stack supports up to 256 bytes. (?) > The SP is at 0x78, so less than half full. Yes, the stackpointer can go upto address 255. With these values I doubt it is stack overflow. > > Here is the program output now: > > sending 2d bytes. > payload addr X:0xe091. > SP 72. > sending 7200 bytes. > payload addr X:0xe091. > SP 78. So now the pointer keeps its value and only len is corrupted. Both rf_send() and rf_send_b() think payload is at SP-4 which is wrong for rf_send_b() because it has an extra bank pushed on the stack. The MSB of len (0x72) is not the old _bp value but probably the LSB of the return address after lcall __sdcc_banked_call. You can check this in the .rst file which is the .lst after linking. I don't know why it does this, because it should know that banked functions require an extra byte on the stack. > > Here is the code now: > > int > cc2430_rf_send(void *payload, unsigned short payload_len) > { > //cc2430_rf_payload = payload; > //cc2430_rf_payload_len = payload_len; > printf("sending %x bytes.\n",payload_len); > printf("payload addr %p.\n", payload); > printf("SP %x.\n", SP); > return cc2430_rf_send_b(payload, payload_len); > } > > int > cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked > //cc2430_rf_send_b(void *payload_in, unsigned short payload_len_in) __banked > { > uint8_t i, counter; > //unsigned short payload_len=cc2430_rf_payload_len; > //void *payload = cc2430_rf_payload; > > printf("sending %x bytes.\n",payload_len); > printf("payload addr %p.\n", payload); > printf("SP %x.\n", SP); > > } > > 1052 > ;------------------------------------------------------------ > 1053 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void *payload, > unsigned short payload_len) > 1054 ; > ----------------------------------------- > 1055 ; function cc2430_rf_send > 1056 ; > ----------------------------------------- > 023C 1057 _cc2430_rf_send: > 023C C0*00 1058 push _bp > 023E 85 81*00 1059 mov _bp,sp > 0241 AA 82 1060 mov r2,dpl > 0243 AB 83 1061 mov r3,dph > 0245 AC F0 1062 mov r4,b > 1063 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("sending %x > bytes.\n",payload_len); > 0247 C0 02 1064 push ar2 > 0249 C0 03 1065 push ar3 > 024B C0 04 1066 push ar4 > 024D E5*00 1067 mov a,_bp > 024F 24 FC 1068 add a,#0xfc > 0251 F8 1069 mov r0,a > 0252 E6 1070 mov a,@r0 > 0253 C0 E0 1071 push acc > 0255 08 1072 inc r0 > 0256 E6 1073 mov a,@r0 > 0257 C0 E0 1074 push acc > 0259 74r00 1075 mov a,#__str_0 > 025B C0 E0 1076 push acc > 025D 74s00 1077 mov a,#(__str_0 >> 8) > 025F C0 E0 1078 push acc > 0261 74 80 1079 mov a,#0x80 > 0263 C0 E0 1080 push acc > 0265 12s00r00 1081 lcall _printf > 0268 E5 81 1082 mov a,sp > 026A 24 FB 1083 add a,#0xfb > 026C F5 81 1084 mov sp,a > 026E D0 04 1085 pop ar4 > 0270 D0 03 1086 pop ar3 > 0272 D0 02 1087 pop ar2 > 1088 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: printf("payload addr %p.\n", > payload); > 0274 C0 02 1089 push ar2 > 0276 C0 03 1090 push ar3 > 0278 C0 04 1091 push ar4 > 027A C0 02 1092 push ar2 > 027C C0 03 1093 push ar3 > 027E C0 04 1094 push ar4 > 0280 74r13 1095 mov a,#__str_1 > 0282 C0 E0 1096 push acc > 0284 74s00 1097 mov a,#(__str_1 >> 8) > 0286 C0 E0 1098 push acc > 0288 74 80 1099 mov a,#0x80 > 028A C0 E0 1100 push acc > 028C 12s00r00 1101 lcall _printf > 028F E5 81 1102 mov a,sp > 0291 24 FA 1103 add a,#0xfa > 0293 F5 81 1104 mov sp,a > 1105 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:134: printf("SP %x.\n", SP); > 0295 AD 81 1106 mov r5,_SP > 0297 7E 00 1107 mov r6,#0x00 > 0299 C0 05 1108 push ar5 > 029B C0 06 1109 push ar6 > 029D 74r25 1110 mov a,#__str_2 > 029F C0 E0 1111 push acc > 02A1 74s00 1112 mov a,#(__str_2 >> 8) > 02A3 C0 E0 1113 push acc > 02A5 74 80 1114 mov a,#0x80 > 02A7 C0 E0 1115 push acc > 02A9 12s00r00 1116 lcall _printf > 02AC E5 81 1117 mov a,sp > 02AE 24 FB 1118 add a,#0xfb > 02B0 F5 81 1119 mov sp,a > 02B2 D0 04 1120 pop ar4 > 02B4 D0 03 1121 pop ar3 > 02B6 D0 02 1122 pop ar2 > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:135: return > cc2430_rf_send_b(payload, payload_len); > 02B8 E5*00 1124 mov a,_bp > 02BA 24 FC 1125 add a,#0xfc > 02BC F8 1126 mov r0,a > 02BD E6 1127 mov a,@r0 > 02BE C0 E0 1128 push acc > 02C0 08 1129 inc r0 > 02C1 E6 1130 mov a,@r0 > 02C2 C0 E0 1131 push acc > 02C4 8A 82 1132 mov dpl,r2 > 02C6 8B 83 1133 mov dph,r3 > 02C8 8C F0 1134 mov b,r4 > 02CA 78r00 1135 mov r0,#_cc2430_rf_send_b > 02CC 79s00 1136 mov r1,#(_cc2430_rf_send_b > >> 8) > 02CE 7As00 1137 mov r2,#(_cc2430_rf_send_b > >> 16) > 029B C0 06 1109 push ar6 > 029D 74r25 1110 mov a,#__str_2 > 029F C0 E0 1111 push acc > 02A1 74s00 1112 mov a,#(__str_2 >> 8) > 02A3 C0 E0 1113 push acc > 02A5 74 80 1114 mov a,#0x80 > 02A7 C0 E0 1115 push acc > 02A9 12s00r00 1116 lcall _printf > 02AC E5 81 1117 mov a,sp > 02AE 24 FB 1118 add a,#0xfb > 02B0 F5 81 1119 mov sp,a > 02B2 D0 04 1120 pop ar4 > 02B4 D0 03 1121 pop ar3 > 02B6 D0 02 1122 pop ar2 > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:135: return > cc2430_rf_send_b(payload, payload_len); > 02B8 E5*00 1124 mov a,_bp > 02BA 24 FC 1125 add a,#0xfc > 02BC F8 1126 mov r0,a > 02BD E6 1127 mov a,@r0 > 02BE C0 E0 1128 push acc > 02C0 08 1129 inc r0 > 02C1 E6 1130 mov a,@r0 > 02C2 C0 E0 1131 push acc > 02C4 8A 82 1132 mov dpl,r2 > 02C6 8B 83 1133 mov dph,r3 > 02C8 8C F0 1134 mov b,r4 > 02CA 78r00 1135 mov r0,#_cc2430_rf_send_b > 02CC 79s00 1136 mov r1,#(_cc2430_rf_send_b > >> 8) > 02CE 7As00 1137 mov r2,#(_cc2430_rf_send_b > >> 16) > > 1115 > ;------------------------------------------------------------ > 1116 ;Allocation info for local variables in > function 'cc2430_rf_send_b' > 1117 > ;------------------------------------------------------------ > 1118 ;payload_len Allocated to > stack - offset -4 > 1119 ;payload Allocated to > stack - offset 1 > 1120 ;i Allocated to > registers r5 > 1121 ;counter Allocated to > registers r2 > 1122 > ;------------------------------------------------------------ > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, > unsigned short payload_len) __banked > 1124 ; > ----------------------------------------- > 1125 ; function cc2430_rf_send_b > 1126 ; > ----------------------------------------- > 028D 1127 _cc2430_rf_send_b: > 028D C0*00 1128 push _bp > 028F 85 81*00 1129 mov _bp,sp > 0292 C0 82 1130 push dpl > 0294 C0 83 1131 push dph > 0296 C0 F0 1132 push b > 1133 ; > ../../cpu/cc2430/dev/cc2430_rf.c:167: printf("sending %x > bytes.\n",payload_len); > 0298 E5*00 1134 mov a,_bp > 029A 24 FC 1135 add a,#0xfc > 029C F8 1136 mov r0,a > 029D E6 1137 mov a,@r0 > 029E C0 E0 1138 push acc > 02A0 08 1139 inc r0 > 02A1 E6 1140 mov a,@r0 > 02A2 C0 E0 1141 push acc > 02A4 74r55 1142 mov a,#__str_2 > 1115 > ;------------------------------------------------------------ > 1116 ;Allocation info for local variables in > function 'cc2430_rf_send_b' > 1117 > ;------------------------------------------------------------ > 1118 ;payload_len Allocated to > stack - offset -4 > 1119 ;payload Allocated to > stack - offset 1 > 1120 ;i Allocated to > registers r5 > 1121 ;counter Allocated to > registers r2 > 1122 > ;------------------------------------------------------------ > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, > unsigned short payload_len) __banked > 1124 ; > ----------------------------------------- > 1125 ; function cc2430_rf_send_b > 1126 ; > ----------------------------------------- > 028D 1127 _cc2430_rf_send_b: > 028D C0*00 1128 push _bp > 028F 85 81*00 1129 mov _bp,sp > 0292 C0 82 1130 push dpl > 0294 C0 83 1131 push dph > 0296 C0 F0 1132 push b > 1133 ; > ../../cpu/cc2430/dev/cc2430_rf.c:167: printf("sending %x > bytes.\n",payload_len); > 0298 E5*00 1134 mov a,_bp > 029A 24 FC 1135 add a,#0xfc > 029C F8 1136 mov r0,a > 029D E6 1137 mov a,@r0 > 029E C0 E0 1138 push acc > 02A0 08 1139 inc r0 > 02A1 E6 1140 mov a,@r0 > 02A2 C0 E0 1141 push acc > 02A4 74r55 1142 mov a,#__str_2 > > > Here is crtbank.asm: > > __sdcc_banked_call:: > push _PSBANK ;save return bank > xch a,r0 ;save Acc in r0, do not assume any > register bank > push acc ;push LSB address > mov a,r1 > push acc ;push MSB address > mov a,r2 ;get new bank > anl a,#0x0F ;remove storage class indicator > anl _PSBANK,#0xF0 > orl _PSBANK,a ;select bank > xch a,r0 ;restore Acc > ret ;make the call > > > > Maarten Brock wrote: > > The output even shows different text from what's in the > > code. Either one is not copy/pasted here. > > > > Is there any chance you're stack is overflowing? > > > > > > > >> Well then I'm stumped. For some reason the payload_len has changed from > >> 2d to 9000. Take a look at the program output. > >> > >> > >> > >> Maarten Brock wrote: > >> > >>> Anthony, > >>> > >>> > >>> > >>>> I didn't need to adapt the __sdcc_banked_call routine, I was able to use > >>>> the provided example unmodified. > >>>> > >>>> > >>> Ok. > >>> > >>> > >>> > >>>> rf_send_b is expecting payload_len to be at SP -4 and payload to be at > >>>> SP -1. rf_send doesn't put payload on the stack at all so rf_send_b > >>>> doesn't find payload_len in the correct position. > >>>> > >>>> > >>> No, rf_send_b wants payload at SP+1 (plus 1) and it puts it there > >>> itself at the start of the function when receiving DPL/DPH/B. It > >>> treats payload as a local variable. > >>> > >>> > >>> > >>>> Maarten Brock wrote: > >>>> > >>>> > >>>>> Anthony, > >>>>> > >>>>> I see no problem with payload being sent through > >>>>> DPL/DPH/B. It is properly assigned when sending in > >>>>> cc2430_rf_send() and properly read and put on stack when > >>>>> receiving in cc2430_rf_send_b(). Are you messing up DPTR > >>>>> or B or the stack in your adapted __sdcc_banked_call > >>>>> except the one push of the current bank? > >>>>> > >>>>> Btw. Did you know that sdcc can also printf pointers > >>>>> with %p? > >>>>> > >>>>> Maarten > >>>>> > >>>>> > >>>>> > >>>>> > >>>>>> I'm using: > >>>>>> > >>>>>> user@instant-contiki:~/contiki-2.x/examples/udp-ipv6$ sdcc -v > >>>>>> SDCC : mcs51/gbz80/z80/avr/ds390/pic16/pic14/TININative/xa51/ds400/hc08 > >>>>>> 2.9.4 #5556 (Oct 29 2009) (UNIX) > >>>>>> > >>>>>> > >>>>>> compile flags are: > >>>>>> > >>>>>> sdcc --codeseg BANK1 --std-c99 --model-large --stack-auto -c > >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c -o obj-brione/cc2430_rf.o > >>>>>> sdcc --codeseg HOME --std-c99 --model-large --stack-auto -c > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c -o obj-brione/cc2430_rf_intr.o > >>>>>> > >>>>>> In the following routines, I see incorrect variable passing on the stack. > >>>>>> > >>>>>> int cc2430_rf_send(void *data, unsigned short len); > >>>>>> int cc2430_rf_send_b (void *data, unsigned short len) __banked; > >>>>>> > >>>>>> int > >>>>>> cc2430_rf_send(void *payload, unsigned short payload_len) > >>>>>> { > >>>>>> printf("sending %x bytes.\n",payload_len); > >>>>>> printf("payload addr %08lx.\n", payload); > >>>>>> return cc2430_rf_send_b(payload, payload_len); > >>>>>> } > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> int > >>>>>> cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked > >>>>>> { > >>>>>> uint8_t i, counter; > >>>>>> printf("sending %x bytes.\n",payload_len); > >>>>>> printf("payload addr %08lx.\n", payload); > >>>>>> } > >>>>>> > >>>>>> In the assembly for cc2430_rf_send the payload arg is mov'd to dpl, > >>>>>> dph, b instead of pushed on the stack; > >>>>>> 996 > >>>>>> ;------------------------------------------------------------ > >>>>>> 997 ;Allocation info for local variables in > >>>>>> function 'cc2430_rf_send' > >>>>>> 998 > >>>>>> ;------------------------------------------------------------ > >>>>>> 999 ;payload_len Allocated to > >>>>>> stack - offset -4 > >>>>>> 1000 ;payload Allocated to > >>>>>> registers r2 r3 r4 > >>>>>> 1001 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1002 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:123: cc2430_rf_send(void *payload, > >>>>>> unsigned short payload_len) > >>>>>> 1003 ; > >>>>>> ----------------------------------------- > >>>>>> 1004 ; function cc2430_rf_send > >>>>>> 1005 ; > >>>>>> ----------------------------------------- > >>>>>> 01E7 1006 _cc2430_rf_send: > >>>>>> > >>>>>> <calls to printf deleted> > >>>>>> > >>>>>> 0240 D0 04 1054 pop ar4 > >>>>>> 0242 D0 03 1055 pop ar3 > >>>>>> 0244 D0 02 1056 pop ar2 > >>>>>> 1057 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:127: return > >>>>>> cc2430_rf_send_b(payload, payload_len); > >>>>>> 0246 E5*00 1058 mov a,_bp > >>>>>> 0248 24 FC 1059 add a,#0xfc > >>>>>> 024A F8 1060 mov r0,a > >>>>>> 024B E6 1061 mov a,@r0 > >>>>>> 024C C0 E0 1062 push acc > >>>>>> 024E 08 1063 inc r0 > >>>>>> 024F E6 1064 mov a,@r0 > >>>>>> 0250 C0 E0 1065 push acc > >>>>>> 0252 8A 82 1066 mov dpl,r2 > >>>>>> 0254 8B 83 1067 mov dph,r3 > >>>>>> 0256 8C F0 1068 mov b,r4 > >>>>>> 0258 78r00 1069 mov r0,#_cc2430_rf_send_b > >>>>>> 025A 79s00 1070 mov r1,#(_cc2430_rf_send_b > >>>>>> >> 8) > >>>>>> 025C 7As00 1071 mov r2,#(_cc2430_rf_send_b > >>>>>> >> 16) > >>>>>> 025E 12s00r00 1072 lcall __sdcc_banked_call > >>>>>> > >>>>>> > >>>>>> > >>>>>> > >>>>>> 1087 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1088 ;Allocation info for local variables in > >>>>>> function 'cc2430_rf_send_b' > >>>>>> 1089 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1090 ;payload_len Allocated to > >>>>>> stack - offset -4 > >>>>>> 1091 ;payload Allocated to > >>>>>> stack - offset 1 > >>>>>> 1092 ;i Allocated to > >>>>>> registers r5 > >>>>>> 1093 ;counter Allocated to > >>>>>> registers r2 > >>>>>> 1094 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1095 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:158: cc2430_rf_send_b(void *payload, > >>>>>> unsigned short payload_len) __banked > >>>>>> 1096 ; > >>>>>> ----------------------------------------- > >>>>>> 1097 ; function cc2430_rf_send_b > >>>>>> 1098 ; > >>>>>> ----------------------------------------- > >>>>>> 0254 1099 _cc2430_rf_send_b: > >>>>>> 0254 C0*00 1100 push _bp > >>>>>> 0256 85 81*00 1101 mov _bp,sp > >>>>>> 0259 C0 82 1102 push dpl > >>>>>> 025B C0 83 1103 push dph > >>>>>> 025D C0 F0 1104 push b > >>>>>> 1105 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:161: printf("sending %x > >>>>>> bytes.\n",payload_len); > >>>>>> 025F E5*00 1106 mov a,_bp > >>>>>> 0261 24 FC 1107 add a,#0xfc > >>>>>> 0263 F8 1108 mov r0,a > >>>>>> 0264 E6 1109 mov a,@r0 > >>>>>> 0265 C0 E0 1110 push acc > >>>>>> 0267 08 1111 inc r0 > >>>>>> 0268 E6 1112 mov a,@r0 > >>>>>> 0269 C0 E0 1113 push acc > >>>>>> 026B 74r0A 1114 mov a,#__str_0 > >>>>>> > >>>>>> > >>>>>> Program output is > >>>>>> sending 2d bytes. > >>>>>> payload_len addr 40006b00. > >>>>>> sending 9000 bytes. > >>>>>> payload addr 00e09100. > >>>>>> > >>>>>> > >>>>>> > >>> ------------------------------------------------------------------------------ > >>> This SF.Net email is sponsored by the Verizon Developer Community > >>> Take advantage of Verizon's best-in-class app development support > >>> A streamlined, 14 day to market process makes app distribution fast and easy > >>> Join now and get one step closer to millions of Verizon customers > >>> http://p.sf.net/sfu/verizon-dev2dev > >>> _______________________________________________ > >>> Sdcc-user mailing list > >>> Sdc...@li... > >>> https://lists.sourceforge.net/lists/listinfo/sdcc-user > >>> > >>> > >> > > > > > > > > ------------------------------------------------------------------------------ > > This SF.Net email is sponsored by the Verizon Developer Community > > Take advantage of Verizon's best-in-class app development support > > A streamlined, 14 day to market process makes app distribution fast and easy > > Join now and get one step closer to millions of Verizon customers > > http://p.sf.net/sfu/verizon-dev2dev > > _______________________________________________ > > Sdcc-user mailing list > > Sdc...@li... > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > |
From: Anthony A. <ant...@gm...> - 2010-01-11 22:27:09
|
Maarten Brock wrote: >> It should be a stack overflow. The stack supports up to 256 bytes. (?) >> The SP is at 0x78, so less than half full. >> > > Yes, the stackpointer can go upto address 255. With these values I > doubt it is stack overflow. > > >> Here is the program output now: >> >> sending 2d bytes. >> payload addr X:0xe091. >> SP 72. >> sending 7200 bytes. >> payload addr X:0xe091. >> SP 78. >> > > So now the pointer keeps its value and only len is corrupted. Both > rf_send() and rf_send_b() think payload is at SP-4 which is wrong > for rf_send_b() because it has an extra bank pushed on the stack. > The MSB of len (0x72) is not the old _bp value but probably the LSB > of the return address after lcall __sdcc_banked_call. You can check > this in the .rst file which is the .lst after linking. > > I don't know why it does this, because it should know that banked > functions require an extra byte on the stack. > > I don't have a .rst for this file. It appears this file is not created for objects linked from a library. Any other suggestion on how to proceed with debugging this? a* |
From: Maarten B. <sou...@ds...> - 2010-01-11 22:38:16
|
Anthony, > Maarten Brock wrote: > >> It should be a stack overflow. The stack supports up to 256 bytes. (?) > >> The SP is at 0x78, so less than half full. > >> > > > > Yes, the stackpointer can go upto address 255. With these values I > > doubt it is stack overflow. > > > > > >> Here is the program output now: > >> > >> sending 2d bytes. > >> payload addr X:0xe091. > >> SP 72. > >> sending 7200 bytes. > >> payload addr X:0xe091. > >> SP 78. > >> > > > > So now the pointer keeps its value and only len is corrupted. Both > > rf_send() and rf_send_b() think payload is at SP-4 which is wrong > > for rf_send_b() because it has an extra bank pushed on the stack. > > The MSB of len (0x72) is not the old _bp value but probably the LSB > > of the return address after lcall __sdcc_banked_call. You can check > > this in the .rst file which is the .lst after linking. > > > > I don't know why it does this, because it should know that banked > > functions require an extra byte on the stack. > > > > > I don't have a .rst for this file. It appears this file is not created > for objects linked from a library. > > Any other suggestion on how to proceed with debugging this? > > a* Indeed, no .rst for library objects. But maybe you could link the object explicitly to override the library and this will generate the .rst file. That is assuming you have built the library first from source. Maarten |
From: Anthony A. <ant...@gm...> - 2010-01-11 23:16:53
|
> Indeed, no .rst for library objects. But maybe you could > link the object explicitly to override the library and > this will generate the .rst file. That is assuming you > have built the library first from source. > > Maarten > > Yep can do that. program output: sending 2d bytes. payload addr X:0xe0a0. SP 72. sending ff00 bytes. payload addr X:0xe0a0. SP 78. rst file excerpts 1047 ;------------------------------------------------------------ 1048 ;Allocation info for local variables in function 'cc2430_rf_send' 1049 ;------------------------------------------------------------ 1050 ;payload_len Allocated to stack - offset -4 1051 ;payload Allocated to registers r2 r3 r4 1052 ;------------------------------------------------------------ 1053 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void *payload, unsigned short payload_len) 1054 ; ----------------------------------------- 1055 ; function cc2430_rf_send 1056 ; ----------------------------------------- 0468 1057 _cc2430_rf_send: 0468 C0 09 1058 push _bp 046A 85 81 09 1059 mov _bp,sp 046D AA 82 1060 mov r2,dpl 046F AB 83 1061 mov r3,dph 0471 AC F0 1062 mov r4,b 1063 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x bytes.\n",payload_len); 0473 C0 02 1064 push ar2 0475 C0 03 1065 push ar3 0477 C0 04 1066 push ar4 0479 E5 09 1067 mov a,_bp 047B 24 FC 1068 add a,#0xfc 047D F8 1069 mov r0,a 047E E6 1070 mov a,@r0 047F C0 E0 1071 push acc 0481 08 1072 inc r0 0482 E6 1073 mov a,@r0 0483 C0 E0 1074 push acc 0485 74 C1 1075 mov a,#__str_0 0487 C0 E0 1076 push acc 0489 74 7C 1077 mov a,#(__str_0 >> 8) 048B C0 E0 1078 push acc 048D 74 80 1079 mov a,#0x80 048F C0 E0 1080 push acc 0491 12 3D 15 1081 lcall _printf 0494 E5 81 1082 mov a,sp 0496 24 FB 1083 add a,#0xfb 0498 F5 81 1084 mov sp,a 049A D0 04 1085 pop ar4 049C D0 03 1086 pop ar3 049E D0 02 1087 pop ar2 1088 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr %p.\n", payload); 04A0 C0 02 1089 push ar2 04A2 C0 03 1090 push ar3 04A4 C0 04 1091 push ar4 04A6 C0 02 1092 push ar2 04A8 C0 03 1093 push ar3 04AA C0 04 1094 push ar4 04AC 74 D4 1095 mov a,#__str_1 04AE C0 E0 1096 push acc 04B0 74 7C 1097 mov a,#(__str_1 >> 8) 04B2 C0 E0 1098 push acc 04B4 74 80 1099 mov a,#0x80 04B6 C0 E0 1100 push acc 04B8 12 3D 15 1101 lcall _printf 04BB E5 81 1102 mov a,sp 04BD 24 FA 1103 add a,#0xfa 04BF F5 81 1104 mov sp,a 1105 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); 04C1 AD 81 1106 mov r5,_SP 04C3 7E 00 1107 mov r6,#0x00 04C5 C0 05 1108 push ar5 04C7 C0 06 1109 push ar6 04C9 74 E6 1110 mov a,#__str_2 04CB C0 E0 1111 push acc 04CD 74 7C 1112 mov a,#(__str_2 >> 8) 04CF C0 E0 1113 push acc 04D1 74 80 1114 mov a,#0x80 04D3 C0 E0 1115 push acc 04D5 12 3D 15 1116 lcall _printf 04D8 E5 81 1117 mov a,sp 04DA 24 FB 1118 add a,#0xfb 04DC F5 81 1119 mov sp,a 04DE D0 04 1120 pop ar4 04E0 D0 03 1121 pop ar3 04E2 D0 02 1122 pop ar2 1123 ; ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return cc2430_rf_send_b(payload, payload_len); 04E4 E5 09 1124 mov a,_bp 04E6 24 FC 1125 add a,#0xfc 04E8 F8 1126 mov r0,a 04E9 E6 1127 mov a,@r0 04EA C0 E0 1128 push acc 04EC 08 1129 inc r0 04ED E6 1130 mov a,@r0 04EE C0 E0 1131 push acc 04F0 8A 82 1132 mov dpl,r2 04F2 8B 83 1133 mov dph,r3 04F4 8C F0 1134 mov b,r4 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >> 8) 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >> 16) 04FC 12 06 27 1138 lcall __sdcc_banked_call 04FF AA 82 1139 mov r2,dpl 0501 AB 83 1140 mov r3,dph 0503 15 81 1141 dec sp 0505 15 81 1142 dec sp 0507 8A 82 1143 mov dpl,r2 0509 8B 83 1144 mov dph,r3 050B D0 09 1145 pop _bp 050D 22 1146 ret 1115 ;------------------------------------------------------------ 1116 ;Allocation info for local variables in function 'cc2430_rf_send_b' 1117 ;------------------------------------------------------------ 1118 ;payload_len Allocated to stack - offset -4 1119 ;payload Allocated to stack - offset 1 1120 ;i Allocated to registers r5 1121 ;counter Allocated to registers r2 1122 ;------------------------------------------------------------ 1123 ; ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, unsigned short payload_len) __banked 1124 ; ----------------------------------------- 1125 ; function cc2430_rf_send_b 1126 ; ----------------------------------------- 828D 1127 _cc2430_rf_send_b: 828D C0 09 1128 push _bp 828F 85 81 09 1129 mov _bp,sp 8292 C0 82 1130 push dpl 8294 C0 83 1131 push dph 8296 C0 F0 1132 push b 1133 ; ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x bytes.\n",payload_len); 8298 E5 09 1134 mov a,_bp 829A 24 FC 1135 add a,#0xfc 829C F8 1136 mov r0,a 829D E6 1137 mov a,@r0 829E C0 E0 1138 push acc 82A0 08 1139 inc r0 82A1 E6 1140 mov a,@r0 82A2 C0 E0 1141 push acc 82A4 74 31 1142 mov a,#__str_2 82A6 C0 E0 1143 push acc 82A8 74 7C 1144 mov a,#(__str_2 >> 8) 82AA C0 E0 1145 push acc 82AC 74 80 1146 mov a,#0x80 82AE C0 E0 1147 push acc 82B0 12 3D 15 1148 lcall _printf 82B3 E5 81 1149 mov a,sp 82B5 24 FB 1150 add a,#0xfb 82B7 F5 81 1151 mov sp,a 1152 ; ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", payload); 82B9 A8 09 1153 mov r0,_bp 82BB 08 1154 inc r0 82BC E6 1155 mov a,@r0 82BD C0 E0 1156 push acc 82BF 08 1157 inc r0 82C0 E6 1158 mov a,@r0 82C1 C0 E0 1159 push acc 82C3 08 1160 inc r0 82C4 E6 1161 mov a,@r0 82C5 C0 E0 1162 push acc 82C7 74 44 1163 mov a,#__str_3 82C9 C0 E0 1164 push acc 82CB 74 7C 1165 mov a,#(__str_3 >> 8) 82CD C0 E0 1166 push acc 82CF 74 80 1167 mov a,#0x80 82D1 C0 E0 1168 push acc 82D3 12 3D 15 1169 lcall _printf 82D6 E5 81 1170 mov a,sp 82D8 24 FA 1171 add a,#0xfa 82DA F5 81 1172 mov sp,a 1173 ; ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); 82DC AD 81 1174 mov r5,_SP 82DE 7E 00 1175 mov r6,#0x00 82E0 C0 05 1176 push ar5 82E2 C0 06 1177 push ar6 82E4 74 56 1178 mov a,#__str_4 82E6 C0 E0 1179 push acc 82E8 74 7C 1180 mov a,#(__str_4 >> 8) 82EA C0 E0 1181 push acc 82EC 74 80 1182 mov a,#0x80 82EE C0 E0 1183 push acc 82F0 12 3D 15 1184 lcall _printf 82F3 E5 81 1185 mov a,sp 82F5 24 FB 1186 add a,#0xfb 82F7 F5 81 1187 mov sp,a |
From: Anthony A. <ant...@gm...> - 2010-01-14 19:26:42
|
Hi Maarten, any other way I can help narrow down the cause of this issue? a* Anthony Asterisk wrote: >> Indeed, no .rst for library objects. But maybe you could >> link the object explicitly to override the library and >> this will generate the .rst file. That is assuming you >> have built the library first from source. >> >> Maarten > Yep can do that. > > program output: > sending 2d bytes. > payload addr X:0xe0a0. > SP 72. > sending ff00 bytes. > payload addr X:0xe0a0. > SP 78. > > > rst file excerpts > > > 1047 > ;------------------------------------------------------------ > 1048 ;Allocation info for local variables > in function 'cc2430_rf_send' > 1049 > ;------------------------------------------------------------ > 1050 ;payload_len Allocated > to stack - offset -4 > 1051 ;payload Allocated > to registers r2 r3 r4 > 1052 > ;------------------------------------------------------------ > 1053 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void > *payload, unsigned short payload_len) > 1054 ; > ----------------------------------------- > 1055 ; function cc2430_rf_send > 1056 ; > ----------------------------------------- > 0468 1057 _cc2430_rf_send: > 0468 C0 09 1058 push _bp > 046A 85 81 09 1059 mov _bp,sp > 046D AA 82 1060 mov r2,dpl > 046F AB 83 1061 mov r3,dph > 0471 AC F0 1062 mov r4,b > 1063 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x > bytes.\n",payload_len); > 0473 C0 02 1064 push ar2 > 0475 C0 03 1065 push ar3 > 0477 C0 04 1066 push ar4 > 0479 E5 09 1067 mov a,_bp > 047B 24 FC 1068 add a,#0xfc > 047D F8 1069 mov r0,a > 047E E6 1070 mov a,@r0 > 047F C0 E0 1071 push acc > 0481 08 1072 inc r0 > 0482 E6 1073 mov a,@r0 > 0483 C0 E0 1074 push acc > > 0485 74 C1 1075 mov a,#__str_0 > 0487 C0 E0 1076 push acc > 0489 74 7C 1077 mov a,#(__str_0 >> 8) > 048B C0 E0 1078 push acc > 048D 74 80 1079 mov a,#0x80 > 048F C0 E0 1080 push acc > 0491 12 3D 15 1081 lcall _printf > 0494 E5 81 1082 mov a,sp > 0496 24 FB 1083 add a,#0xfb > 0498 F5 81 1084 mov sp,a > 049A D0 04 1085 pop ar4 > 049C D0 03 1086 pop ar3 > 049E D0 02 1087 pop ar2 > 1088 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr > %p.\n", payload); > 04A0 C0 02 1089 push ar2 > 04A2 C0 03 1090 push ar3 > 04A4 C0 04 1091 push ar4 > 04A6 C0 02 1092 push ar2 > 04A8 C0 03 1093 push ar3 > 04AA C0 04 1094 push ar4 > 04AC 74 D4 1095 mov a,#__str_1 > 04AE C0 E0 1096 push acc > 04B0 74 7C 1097 mov a,#(__str_1 >> 8) > 04B2 C0 E0 1098 push acc > 04B4 74 80 1099 mov a,#0x80 > 04B6 C0 E0 1100 push acc > 04B8 12 3D 15 1101 lcall _printf > 04BB E5 81 1102 mov a,sp > 04BD 24 FA 1103 add a,#0xfa > > 04BF F5 81 1104 mov sp,a > 1105 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); > 04C1 AD 81 1106 mov r5,_SP > 04C3 7E 00 1107 mov r6,#0x00 > 04C5 C0 05 1108 push ar5 > 04C7 C0 06 1109 push ar6 > 04C9 74 E6 1110 mov a,#__str_2 > 04CB C0 E0 1111 push acc > 04CD 74 7C 1112 mov a,#(__str_2 >> 8) > 04CF C0 E0 1113 push acc > 04D1 74 80 1114 mov a,#0x80 > 04D3 C0 E0 1115 push acc > 04D5 12 3D 15 1116 lcall _printf > 04D8 E5 81 1117 mov a,sp > 04DA 24 FB 1118 add a,#0xfb > 04DC F5 81 1119 mov sp,a > 04DE D0 04 1120 pop ar4 > 04E0 D0 03 1121 pop ar3 > 04E2 D0 02 1122 pop ar2 > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return > cc2430_rf_send_b(payload, payload_len); > 04E4 E5 09 1124 mov a,_bp > 04E6 24 FC 1125 add a,#0xfc > 04E8 F8 1126 mov r0,a > 04E9 E6 1127 mov a,@r0 > 04EA C0 E0 1128 push acc > 04EC 08 1129 inc r0 > 04ED E6 1130 mov a,@r0 > 04EE C0 E0 1131 push acc > 04F0 8A 82 1132 mov dpl,r2 > 04F2 8B 83 1133 mov dph,r3 > 04F4 8C F0 1134 mov b,r4 > 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b > 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b > >> 8) > 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b > >> 16) > 04FC 12 06 27 1138 lcall __sdcc_banked_call > 04FF AA 82 1139 mov r2,dpl > 0501 AB 83 1140 mov r3,dph > 0503 15 81 1141 dec sp > 0505 15 81 1142 dec sp > 0507 8A 82 1143 mov dpl,r2 > 0509 8B 83 1144 mov dph,r3 > 050B D0 09 1145 pop _bp > 050D 22 1146 ret > > 1115 > ;------------------------------------------------------------ > 1116 ;Allocation info for local variables > in function 'cc2430_rf_send_b' > 1117 > ;------------------------------------------------------------ > 1118 ;payload_len Allocated > to stack - offset -4 > 1119 ;payload Allocated > to stack - offset 1 > 1120 ;i Allocated > to registers r5 > 1121 ;counter Allocated > to registers r2 > 1122 > ;------------------------------------------------------------ > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, > unsigned short payload_len) __banked > 1124 ; > ----------------------------------------- > 1125 ; function cc2430_rf_send_b > 1126 ; > ----------------------------------------- > 828D 1127 _cc2430_rf_send_b: > 828D C0 09 1128 push _bp > 828F 85 81 09 1129 mov _bp,sp > 8292 C0 82 1130 push dpl > 8294 C0 83 1131 push dph > 8296 C0 F0 1132 push b > 1133 ; > ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x > bytes.\n",payload_len); > 8298 E5 09 1134 mov a,_bp > 829A 24 FC 1135 add a,#0xfc > 829C F8 1136 mov r0,a > 829D E6 1137 mov a,@r0 > 829E C0 E0 1138 push acc > 82A0 08 1139 inc r0 > 82A1 E6 1140 mov a,@r0 > 82A2 C0 E0 1141 push acc > 82A4 74 31 1142 mov a,#__str_2 > 82A6 C0 E0 1143 push acc > 82A8 74 7C 1144 mov a,#(__str_2 >> 8) > 82AA C0 E0 1145 push acc > 82AC 74 80 1146 mov a,#0x80 > 82AE C0 E0 1147 push acc > 82B0 12 3D 15 1148 lcall _printf > 82B3 E5 81 1149 mov a,sp > 82B5 24 FB 1150 add a,#0xfb > 82B7 F5 81 1151 mov sp,a > 1152 ; > ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", > payload); > 82B9 A8 09 1153 mov r0,_bp > 82BB 08 1154 inc r0 > 82BC E6 1155 mov a,@r0 > 82BD C0 E0 1156 push acc > 82BF 08 1157 inc r0 > 82C0 E6 1158 mov a,@r0 > 82C1 C0 E0 1159 push acc > 82C3 08 1160 inc r0 > 82C4 E6 1161 mov a,@r0 > 82C5 C0 E0 1162 push acc > 82C7 74 44 1163 mov a,#__str_3 > 82C9 C0 E0 1164 push acc > 82CB 74 7C 1165 mov a,#(__str_3 >> 8) > 82CD C0 E0 1166 push acc > 82CF 74 80 1167 mov a,#0x80 > 82D1 C0 E0 1168 push acc > 82D3 12 3D 15 1169 lcall _printf > 82D6 E5 81 1170 mov a,sp > 82D8 24 FA 1171 add a,#0xfa > 82DA F5 81 1172 mov sp,a > 1173 ; > ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); > 82DC AD 81 1174 mov r5,_SP > 82DE 7E 00 1175 mov r6,#0x00 > 82E0 C0 05 1176 push ar5 > 82E2 C0 06 1177 push ar6 > 82E4 74 56 1178 mov a,#__str_4 > 82E6 C0 E0 1179 push acc > 82E8 74 7C 1180 mov a,#(__str_4 >> 8) > 82EA C0 E0 1181 push acc > 82EC 74 80 1182 mov a,#0x80 > 82EE C0 E0 1183 push acc > 82F0 12 3D 15 1184 lcall _printf > 82F3 E5 81 1185 mov a,sp > 82F5 24 FB 1186 add a,#0xfb > 82F7 F5 81 1187 mov sp,a |
From: Maarten B. <sou...@ds...> - 2010-01-14 22:50:38
|
Anthony, I think I've found the bug. In mcs51/main.c(795) banked_overhead should be set to 1. And in SDCCast.c(6514) the following should be added: if (IFFUNC_ISBANKEDCALL (name->type)) stackPtr -= port->stack.direction * port->stack.banked_overhead; When I fully have --model-huge working I'll commit ot svn. Greets, Maarten > Hi Maarten, > > any other way I can help narrow down the cause of this issue? > > a* > > Anthony Asterisk wrote: >>> Indeed, no .rst for library objects. But maybe you could >>> link the object explicitly to override the library and >>> this will generate the .rst file. That is assuming you >>> have built the library first from source. >>> >>> Maarten >> Yep can do that. >> >> program output: >> sending 2d bytes. >> payload addr X:0xe0a0. >> SP 72. >> sending ff00 bytes. >> payload addr X:0xe0a0. >> SP 78. >> >> >> rst file excerpts >> >> >> 1047 >> ;------------------------------------------------------------ >> 1048 ;Allocation info for local variables >> in function 'cc2430_rf_send' >> 1049 >> ;------------------------------------------------------------ >> 1050 ;payload_len Allocated >> to stack - offset -4 >> 1051 ;payload Allocated >> to registers r2 r3 r4 >> 1052 >> ;------------------------------------------------------------ >> 1053 ; >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void >> *payload, unsigned short payload_len) >> 1054 ; >> ----------------------------------------- >> 1055 ; function cc2430_rf_send >> 1056 ; >> ----------------------------------------- >> 0468 1057 _cc2430_rf_send: >> 0468 C0 09 1058 push _bp >> 046A 85 81 09 1059 mov _bp,sp >> 046D AA 82 1060 mov r2,dpl >> 046F AB 83 1061 mov r3,dph >> 0471 AC F0 1062 mov r4,b >> 1063 ; >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x >> bytes.\n",payload_len); >> 0473 C0 02 1064 push ar2 >> 0475 C0 03 1065 push ar3 >> 0477 C0 04 1066 push ar4 >> 0479 E5 09 1067 mov a,_bp >> 047B 24 FC 1068 add a,#0xfc >> 047D F8 1069 mov r0,a >> 047E E6 1070 mov a,@r0 >> 047F C0 E0 1071 push acc >> 0481 08 1072 inc r0 >> 0482 E6 1073 mov a,@r0 >> 0483 C0 E0 1074 push acc >> >> 0485 74 C1 1075 mov a,#__str_0 >> 0487 C0 E0 1076 push acc >> 0489 74 7C 1077 mov a,#(__str_0 >> 8) >> 048B C0 E0 1078 push acc >> 048D 74 80 1079 mov a,#0x80 >> 048F C0 E0 1080 push acc >> 0491 12 3D 15 1081 lcall _printf >> 0494 E5 81 1082 mov a,sp >> 0496 24 FB 1083 add a,#0xfb >> 0498 F5 81 1084 mov sp,a >> 049A D0 04 1085 pop ar4 >> 049C D0 03 1086 pop ar3 >> 049E D0 02 1087 pop ar2 >> 1088 ; >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr >> %p.\n", payload); >> 04A0 C0 02 1089 push ar2 >> 04A2 C0 03 1090 push ar3 >> 04A4 C0 04 1091 push ar4 >> 04A6 C0 02 1092 push ar2 >> 04A8 C0 03 1093 push ar3 >> 04AA C0 04 1094 push ar4 >> 04AC 74 D4 1095 mov a,#__str_1 >> 04AE C0 E0 1096 push acc >> 04B0 74 7C 1097 mov a,#(__str_1 >> 8) >> 04B2 C0 E0 1098 push acc >> 04B4 74 80 1099 mov a,#0x80 >> 04B6 C0 E0 1100 push acc >> 04B8 12 3D 15 1101 lcall _printf >> 04BB E5 81 1102 mov a,sp >> 04BD 24 FA 1103 add a,#0xfa >> >> 04BF F5 81 1104 mov sp,a >> 1105 ; >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); >> 04C1 AD 81 1106 mov r5,_SP >> 04C3 7E 00 1107 mov r6,#0x00 >> 04C5 C0 05 1108 push ar5 >> 04C7 C0 06 1109 push ar6 >> 04C9 74 E6 1110 mov a,#__str_2 >> 04CB C0 E0 1111 push acc >> 04CD 74 7C 1112 mov a,#(__str_2 >> 8) >> 04CF C0 E0 1113 push acc >> 04D1 74 80 1114 mov a,#0x80 >> 04D3 C0 E0 1115 push acc >> 04D5 12 3D 15 1116 lcall _printf >> 04D8 E5 81 1117 mov a,sp >> 04DA 24 FB 1118 add a,#0xfb >> 04DC F5 81 1119 mov sp,a >> 04DE D0 04 1120 pop ar4 >> 04E0 D0 03 1121 pop ar3 >> 04E2 D0 02 1122 pop ar2 >> 1123 ; >> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return >> cc2430_rf_send_b(payload, payload_len); >> 04E4 E5 09 1124 mov a,_bp >> 04E6 24 FC 1125 add a,#0xfc >> 04E8 F8 1126 mov r0,a >> 04E9 E6 1127 mov a,@r0 >> 04EA C0 E0 1128 push acc >> 04EC 08 1129 inc r0 >> 04ED E6 1130 mov a,@r0 >> 04EE C0 E0 1131 push acc >> 04F0 8A 82 1132 mov dpl,r2 >> 04F2 8B 83 1133 mov dph,r3 >> 04F4 8C F0 1134 mov b,r4 >> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b >> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >> >> 8) >> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >> >> 16) >> 04FC 12 06 27 1138 lcall __sdcc_banked_call >> 04FF AA 82 1139 mov r2,dpl >> 0501 AB 83 1140 mov r3,dph >> 0503 15 81 1141 dec sp >> 0505 15 81 1142 dec sp >> 0507 8A 82 1143 mov dpl,r2 >> 0509 8B 83 1144 mov dph,r3 >> 050B D0 09 1145 pop _bp >> 050D 22 1146 ret >> >> 1115 >> ;------------------------------------------------------------ >> 1116 ;Allocation info for local variables >> in function 'cc2430_rf_send_b' >> 1117 >> ;------------------------------------------------------------ >> 1118 ;payload_len Allocated >> to stack - offset -4 >> 1119 ;payload Allocated >> to stack - offset 1 >> 1120 ;i Allocated >> to registers r5 >> 1121 ;counter Allocated >> to registers r2 >> 1122 >> ;------------------------------------------------------------ >> 1123 ; >> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, >> unsigned short payload_len) __banked >> 1124 ; >> ----------------------------------------- >> 1125 ; function cc2430_rf_send_b >> 1126 ; >> ----------------------------------------- >> 828D 1127 _cc2430_rf_send_b: >> 828D C0 09 1128 push _bp >> 828F 85 81 09 1129 mov _bp,sp >> 8292 C0 82 1130 push dpl >> 8294 C0 83 1131 push dph >> 8296 C0 F0 1132 push b >> 1133 ; >> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x >> bytes.\n",payload_len); >> 8298 E5 09 1134 mov a,_bp >> 829A 24 FC 1135 add a,#0xfc >> 829C F8 1136 mov r0,a >> 829D E6 1137 mov a,@r0 >> 829E C0 E0 1138 push acc >> 82A0 08 1139 inc r0 >> 82A1 E6 1140 mov a,@r0 >> 82A2 C0 E0 1141 push acc >> 82A4 74 31 1142 mov a,#__str_2 >> 82A6 C0 E0 1143 push acc >> 82A8 74 7C 1144 mov a,#(__str_2 >> 8) >> 82AA C0 E0 1145 push acc >> 82AC 74 80 1146 mov a,#0x80 >> 82AE C0 E0 1147 push acc >> 82B0 12 3D 15 1148 lcall _printf >> 82B3 E5 81 1149 mov a,sp >> 82B5 24 FB 1150 add a,#0xfb >> 82B7 F5 81 1151 mov sp,a >> 1152 ; >> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", >> payload); >> 82B9 A8 09 1153 mov r0,_bp >> 82BB 08 1154 inc r0 >> 82BC E6 1155 mov a,@r0 >> 82BD C0 E0 1156 push acc >> 82BF 08 1157 inc r0 >> 82C0 E6 1158 mov a,@r0 >> 82C1 C0 E0 1159 push acc >> 82C3 08 1160 inc r0 >> 82C4 E6 1161 mov a,@r0 >> 82C5 C0 E0 1162 push acc >> 82C7 74 44 1163 mov a,#__str_3 >> 82C9 C0 E0 1164 push acc >> 82CB 74 7C 1165 mov a,#(__str_3 >> 8) >> 82CD C0 E0 1166 push acc >> 82CF 74 80 1167 mov a,#0x80 >> 82D1 C0 E0 1168 push acc >> 82D3 12 3D 15 1169 lcall _printf >> 82D6 E5 81 1170 mov a,sp >> 82D8 24 FA 1171 add a,#0xfa >> 82DA F5 81 1172 mov sp,a >> 1173 ; >> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); >> 82DC AD 81 1174 mov r5,_SP >> 82DE 7E 00 1175 mov r6,#0x00 >> 82E0 C0 05 1176 push ar5 >> 82E2 C0 06 1177 push ar6 >> 82E4 74 56 1178 mov a,#__str_4 >> 82E6 C0 E0 1179 push acc >> 82E8 74 7C 1180 mov a,#(__str_4 >> 8) >> 82EA C0 E0 1181 push acc >> 82EC 74 80 1182 mov a,#0x80 >> 82EE C0 E0 1183 push acc >> 82F0 12 3D 15 1184 lcall _printf >> 82F3 E5 81 1185 mov a,sp >> 82F5 24 FB 1186 add a,#0xfb >> 82F7 F5 81 1187 mov sp,a > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for > Conference > attendees to learn about information security's most important issues > through > interactions with peers, luminaries and emerging and established > companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > |
From: Anthony A. <ant...@gm...> - 2010-01-14 23:26:38
|
Great, I'm glad you were able to find the bug. I'll try your fix in my local build. a* Maarten Brock wrote: > Anthony, > > I think I've found the bug. > > In mcs51/main.c(795) banked_overhead should be set to 1. > And in SDCCast.c(6514) the following should be added: > if (IFFUNC_ISBANKEDCALL (name->type)) > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > When I fully have --model-huge working I'll commit ot svn. > > Greets, > Maarten > > >> Hi Maarten, >> >> any other way I can help narrow down the cause of this issue? >> >> a* >> >> Anthony Asterisk wrote: >> >>>> Indeed, no .rst for library objects. But maybe you could >>>> link the object explicitly to override the library and >>>> this will generate the .rst file. That is assuming you >>>> have built the library first from source. >>>> >>>> Maarten >>>> >>> Yep can do that. >>> >>> program output: >>> sending 2d bytes. >>> payload addr X:0xe0a0. >>> SP 72. >>> sending ff00 bytes. >>> payload addr X:0xe0a0. >>> SP 78. >>> >>> >>> rst file excerpts >>> >>> >>> 1047 >>> ;------------------------------------------------------------ >>> 1048 ;Allocation info for local variables >>> in function 'cc2430_rf_send' >>> 1049 >>> ;------------------------------------------------------------ >>> 1050 ;payload_len Allocated >>> to stack - offset -4 >>> 1051 ;payload Allocated >>> to registers r2 r3 r4 >>> 1052 >>> ;------------------------------------------------------------ >>> 1053 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void >>> *payload, unsigned short payload_len) >>> 1054 ; >>> ----------------------------------------- >>> 1055 ; function cc2430_rf_send >>> 1056 ; >>> ----------------------------------------- >>> 0468 1057 _cc2430_rf_send: >>> 0468 C0 09 1058 push _bp >>> 046A 85 81 09 1059 mov _bp,sp >>> 046D AA 82 1060 mov r2,dpl >>> 046F AB 83 1061 mov r3,dph >>> 0471 AC F0 1062 mov r4,b >>> 1063 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x >>> bytes.\n",payload_len); >>> 0473 C0 02 1064 push ar2 >>> 0475 C0 03 1065 push ar3 >>> 0477 C0 04 1066 push ar4 >>> 0479 E5 09 1067 mov a,_bp >>> 047B 24 FC 1068 add a,#0xfc >>> 047D F8 1069 mov r0,a >>> 047E E6 1070 mov a,@r0 >>> 047F C0 E0 1071 push acc >>> 0481 08 1072 inc r0 >>> 0482 E6 1073 mov a,@r0 >>> 0483 C0 E0 1074 push acc >>> >>> 0485 74 C1 1075 mov a,#__str_0 >>> 0487 C0 E0 1076 push acc >>> 0489 74 7C 1077 mov a,#(__str_0>> 8) >>> 048B C0 E0 1078 push acc >>> 048D 74 80 1079 mov a,#0x80 >>> 048F C0 E0 1080 push acc >>> 0491 12 3D 15 1081 lcall _printf >>> 0494 E5 81 1082 mov a,sp >>> 0496 24 FB 1083 add a,#0xfb >>> 0498 F5 81 1084 mov sp,a >>> 049A D0 04 1085 pop ar4 >>> 049C D0 03 1086 pop ar3 >>> 049E D0 02 1087 pop ar2 >>> 1088 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr >>> %p.\n", payload); >>> 04A0 C0 02 1089 push ar2 >>> 04A2 C0 03 1090 push ar3 >>> 04A4 C0 04 1091 push ar4 >>> 04A6 C0 02 1092 push ar2 >>> 04A8 C0 03 1093 push ar3 >>> 04AA C0 04 1094 push ar4 >>> 04AC 74 D4 1095 mov a,#__str_1 >>> 04AE C0 E0 1096 push acc >>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) >>> 04B2 C0 E0 1098 push acc >>> 04B4 74 80 1099 mov a,#0x80 >>> 04B6 C0 E0 1100 push acc >>> 04B8 12 3D 15 1101 lcall _printf >>> 04BB E5 81 1102 mov a,sp >>> 04BD 24 FA 1103 add a,#0xfa >>> >>> 04BF F5 81 1104 mov sp,a >>> 1105 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); >>> 04C1 AD 81 1106 mov r5,_SP >>> 04C3 7E 00 1107 mov r6,#0x00 >>> 04C5 C0 05 1108 push ar5 >>> 04C7 C0 06 1109 push ar6 >>> 04C9 74 E6 1110 mov a,#__str_2 >>> 04CB C0 E0 1111 push acc >>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) >>> 04CF C0 E0 1113 push acc >>> 04D1 74 80 1114 mov a,#0x80 >>> 04D3 C0 E0 1115 push acc >>> 04D5 12 3D 15 1116 lcall _printf >>> 04D8 E5 81 1117 mov a,sp >>> 04DA 24 FB 1118 add a,#0xfb >>> 04DC F5 81 1119 mov sp,a >>> 04DE D0 04 1120 pop ar4 >>> 04E0 D0 03 1121 pop ar3 >>> 04E2 D0 02 1122 pop ar2 >>> 1123 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return >>> cc2430_rf_send_b(payload, payload_len); >>> 04E4 E5 09 1124 mov a,_bp >>> 04E6 24 FC 1125 add a,#0xfc >>> 04E8 F8 1126 mov r0,a >>> 04E9 E6 1127 mov a,@r0 >>> 04EA C0 E0 1128 push acc >>> 04EC 08 1129 inc r0 >>> 04ED E6 1130 mov a,@r0 >>> 04EE C0 E0 1131 push acc >>> 04F0 8A 82 1132 mov dpl,r2 >>> 04F2 8B 83 1133 mov dph,r3 >>> 04F4 8C F0 1134 mov b,r4 >>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b >>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >>> >>>>> 8) >>>>> >>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >>> >>>>> 16) >>>>> >>> 04FC 12 06 27 1138 lcall __sdcc_banked_call >>> 04FF AA 82 1139 mov r2,dpl >>> 0501 AB 83 1140 mov r3,dph >>> 0503 15 81 1141 dec sp >>> 0505 15 81 1142 dec sp >>> 0507 8A 82 1143 mov dpl,r2 >>> 0509 8B 83 1144 mov dph,r3 >>> 050B D0 09 1145 pop _bp >>> 050D 22 1146 ret >>> >>> 1115 >>> ;------------------------------------------------------------ >>> 1116 ;Allocation info for local variables >>> in function 'cc2430_rf_send_b' >>> 1117 >>> ;------------------------------------------------------------ >>> 1118 ;payload_len Allocated >>> to stack - offset -4 >>> 1119 ;payload Allocated >>> to stack - offset 1 >>> 1120 ;i Allocated >>> to registers r5 >>> 1121 ;counter Allocated >>> to registers r2 >>> 1122 >>> ;------------------------------------------------------------ >>> 1123 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, >>> unsigned short payload_len) __banked >>> 1124 ; >>> ----------------------------------------- >>> 1125 ; function cc2430_rf_send_b >>> 1126 ; >>> ----------------------------------------- >>> 828D 1127 _cc2430_rf_send_b: >>> 828D C0 09 1128 push _bp >>> 828F 85 81 09 1129 mov _bp,sp >>> 8292 C0 82 1130 push dpl >>> 8294 C0 83 1131 push dph >>> 8296 C0 F0 1132 push b >>> 1133 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x >>> bytes.\n",payload_len); >>> 8298 E5 09 1134 mov a,_bp >>> 829A 24 FC 1135 add a,#0xfc >>> 829C F8 1136 mov r0,a >>> 829D E6 1137 mov a,@r0 >>> 829E C0 E0 1138 push acc >>> 82A0 08 1139 inc r0 >>> 82A1 E6 1140 mov a,@r0 >>> 82A2 C0 E0 1141 push acc >>> 82A4 74 31 1142 mov a,#__str_2 >>> 82A6 C0 E0 1143 push acc >>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) >>> 82AA C0 E0 1145 push acc >>> 82AC 74 80 1146 mov a,#0x80 >>> 82AE C0 E0 1147 push acc >>> 82B0 12 3D 15 1148 lcall _printf >>> 82B3 E5 81 1149 mov a,sp >>> 82B5 24 FB 1150 add a,#0xfb >>> 82B7 F5 81 1151 mov sp,a >>> 1152 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", >>> payload); >>> 82B9 A8 09 1153 mov r0,_bp >>> 82BB 08 1154 inc r0 >>> 82BC E6 1155 mov a,@r0 >>> 82BD C0 E0 1156 push acc >>> 82BF 08 1157 inc r0 >>> 82C0 E6 1158 mov a,@r0 >>> 82C1 C0 E0 1159 push acc >>> 82C3 08 1160 inc r0 >>> 82C4 E6 1161 mov a,@r0 >>> 82C5 C0 E0 1162 push acc >>> 82C7 74 44 1163 mov a,#__str_3 >>> 82C9 C0 E0 1164 push acc >>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) >>> 82CD C0 E0 1166 push acc >>> 82CF 74 80 1167 mov a,#0x80 >>> 82D1 C0 E0 1168 push acc >>> 82D3 12 3D 15 1169 lcall _printf >>> 82D6 E5 81 1170 mov a,sp >>> 82D8 24 FA 1171 add a,#0xfa >>> 82DA F5 81 1172 mov sp,a >>> 1173 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); >>> 82DC AD 81 1174 mov r5,_SP >>> 82DE 7E 00 1175 mov r6,#0x00 >>> 82E0 C0 05 1176 push ar5 >>> 82E2 C0 06 1177 push ar6 >>> 82E4 74 56 1178 mov a,#__str_4 >>> 82E6 C0 E0 1179 push acc >>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) >>> 82EA C0 E0 1181 push acc >>> 82EC 74 80 1182 mov a,#0x80 >>> 82EE C0 E0 1183 push acc >>> 82F0 12 3D 15 1184 lcall _printf >>> 82F3 E5 81 1185 mov a,sp >>> 82F5 24 FB 1186 add a,#0xfb >>> 82F7 F5 81 1187 mov sp,a >>> >> ------------------------------------------------------------------------------ >> Throughout its 18-year history, RSA Conference consistently attracts the >> world's best and brightest in the field, creating opportunities for >> Conference >> attendees to learn about information security's most important issues >> through >> interactions with peers, luminaries and emerging and established >> companies. >> http://p.sf.net/sfu/rsaconf-dev2dev >> _______________________________________________ >> Sdcc-user mailing list >> Sdc...@li... >> https://lists.sourceforge.net/lists/listinfo/sdcc-user >> >> >> > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Anthony A. <ant...@gm...> - 2010-01-18 22:43:52
|
Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty sure I got the correct location in mcs51/main.c, but the change is SDCCCast might be different. Does this look good to you? if (options.dump_tree) PA(ex); if (fatalError) goto skipall; * if (IFFUNC_ISBANKEDCALL (name->type)) stackPtr -= port->stack.direction * port->stack.banked_overhead; * /* Do not generate code for inline functions unless extern also. */ #if 0 if (FUNC_ISINLINE (name->type) && !IS_EXTERN (fetype)) goto skipall; #else /* Temporary hack: always generate code for static inline functions. */ /* Ideally static inline functions should only be generated if needed. */ if (FUNC_ISINLINE (name->type) && !IS_EXTERN (fetype) && !IS_STATIC (fetype)) goto skipall; #endif Maarten Brock wrote: > Anthony, > > I think I've found the bug. > > In mcs51/main.c(795) banked_overhead should be set to 1. > And in SDCCast.c(6514) the following should be added: > if (IFFUNC_ISBANKEDCALL (name->type)) > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > When I fully have --model-huge working I'll commit ot svn. > > Greets, > Maarten > > >> Hi Maarten, >> >> any other way I can help narrow down the cause of this issue? >> >> a* >> >> Anthony Asterisk wrote: >> >>>> Indeed, no .rst for library objects. But maybe you could >>>> link the object explicitly to override the library and >>>> this will generate the .rst file. That is assuming you >>>> have built the library first from source. >>>> >>>> Maarten >>>> >>> Yep can do that. >>> >>> program output: >>> sending 2d bytes. >>> payload addr X:0xe0a0. >>> SP 72. >>> sending ff00 bytes. >>> payload addr X:0xe0a0. >>> SP 78. >>> >>> >>> rst file excerpts >>> >>> >>> 1047 >>> ;------------------------------------------------------------ >>> 1048 ;Allocation info for local variables >>> in function 'cc2430_rf_send' >>> 1049 >>> ;------------------------------------------------------------ >>> 1050 ;payload_len Allocated >>> to stack - offset -4 >>> 1051 ;payload Allocated >>> to registers r2 r3 r4 >>> 1052 >>> ;------------------------------------------------------------ >>> 1053 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void >>> *payload, unsigned short payload_len) >>> 1054 ; >>> ----------------------------------------- >>> 1055 ; function cc2430_rf_send >>> 1056 ; >>> ----------------------------------------- >>> 0468 1057 _cc2430_rf_send: >>> 0468 C0 09 1058 push _bp >>> 046A 85 81 09 1059 mov _bp,sp >>> 046D AA 82 1060 mov r2,dpl >>> 046F AB 83 1061 mov r3,dph >>> 0471 AC F0 1062 mov r4,b >>> 1063 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x >>> bytes.\n",payload_len); >>> 0473 C0 02 1064 push ar2 >>> 0475 C0 03 1065 push ar3 >>> 0477 C0 04 1066 push ar4 >>> 0479 E5 09 1067 mov a,_bp >>> 047B 24 FC 1068 add a,#0xfc >>> 047D F8 1069 mov r0,a >>> 047E E6 1070 mov a,@r0 >>> 047F C0 E0 1071 push acc >>> 0481 08 1072 inc r0 >>> 0482 E6 1073 mov a,@r0 >>> 0483 C0 E0 1074 push acc >>> >>> 0485 74 C1 1075 mov a,#__str_0 >>> 0487 C0 E0 1076 push acc >>> 0489 74 7C 1077 mov a,#(__str_0>> 8) >>> 048B C0 E0 1078 push acc >>> 048D 74 80 1079 mov a,#0x80 >>> 048F C0 E0 1080 push acc >>> 0491 12 3D 15 1081 lcall _printf >>> 0494 E5 81 1082 mov a,sp >>> 0496 24 FB 1083 add a,#0xfb >>> 0498 F5 81 1084 mov sp,a >>> 049A D0 04 1085 pop ar4 >>> 049C D0 03 1086 pop ar3 >>> 049E D0 02 1087 pop ar2 >>> 1088 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr >>> %p.\n", payload); >>> 04A0 C0 02 1089 push ar2 >>> 04A2 C0 03 1090 push ar3 >>> 04A4 C0 04 1091 push ar4 >>> 04A6 C0 02 1092 push ar2 >>> 04A8 C0 03 1093 push ar3 >>> 04AA C0 04 1094 push ar4 >>> 04AC 74 D4 1095 mov a,#__str_1 >>> 04AE C0 E0 1096 push acc >>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) >>> 04B2 C0 E0 1098 push acc >>> 04B4 74 80 1099 mov a,#0x80 >>> 04B6 C0 E0 1100 push acc >>> 04B8 12 3D 15 1101 lcall _printf >>> 04BB E5 81 1102 mov a,sp >>> 04BD 24 FA 1103 add a,#0xfa >>> >>> 04BF F5 81 1104 mov sp,a >>> 1105 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); >>> 04C1 AD 81 1106 mov r5,_SP >>> 04C3 7E 00 1107 mov r6,#0x00 >>> 04C5 C0 05 1108 push ar5 >>> 04C7 C0 06 1109 push ar6 >>> 04C9 74 E6 1110 mov a,#__str_2 >>> 04CB C0 E0 1111 push acc >>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) >>> 04CF C0 E0 1113 push acc >>> 04D1 74 80 1114 mov a,#0x80 >>> 04D3 C0 E0 1115 push acc >>> 04D5 12 3D 15 1116 lcall _printf >>> 04D8 E5 81 1117 mov a,sp >>> 04DA 24 FB 1118 add a,#0xfb >>> 04DC F5 81 1119 mov sp,a >>> 04DE D0 04 1120 pop ar4 >>> 04E0 D0 03 1121 pop ar3 >>> 04E2 D0 02 1122 pop ar2 >>> 1123 ; >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return >>> cc2430_rf_send_b(payload, payload_len); >>> 04E4 E5 09 1124 mov a,_bp >>> 04E6 24 FC 1125 add a,#0xfc >>> 04E8 F8 1126 mov r0,a >>> 04E9 E6 1127 mov a,@r0 >>> 04EA C0 E0 1128 push acc >>> 04EC 08 1129 inc r0 >>> 04ED E6 1130 mov a,@r0 >>> 04EE C0 E0 1131 push acc >>> 04F0 8A 82 1132 mov dpl,r2 >>> 04F2 8B 83 1133 mov dph,r3 >>> 04F4 8C F0 1134 mov b,r4 >>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b >>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >>> >>>>> 8) >>>>> >>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >>> >>>>> 16) >>>>> >>> 04FC 12 06 27 1138 lcall __sdcc_banked_call >>> 04FF AA 82 1139 mov r2,dpl >>> 0501 AB 83 1140 mov r3,dph >>> 0503 15 81 1141 dec sp >>> 0505 15 81 1142 dec sp >>> 0507 8A 82 1143 mov dpl,r2 >>> 0509 8B 83 1144 mov dph,r3 >>> 050B D0 09 1145 pop _bp >>> 050D 22 1146 ret >>> >>> 1115 >>> ;------------------------------------------------------------ >>> 1116 ;Allocation info for local variables >>> in function 'cc2430_rf_send_b' >>> 1117 >>> ;------------------------------------------------------------ >>> 1118 ;payload_len Allocated >>> to stack - offset -4 >>> 1119 ;payload Allocated >>> to stack - offset 1 >>> 1120 ;i Allocated >>> to registers r5 >>> 1121 ;counter Allocated >>> to registers r2 >>> 1122 >>> ;------------------------------------------------------------ >>> 1123 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, >>> unsigned short payload_len) __banked >>> 1124 ; >>> ----------------------------------------- >>> 1125 ; function cc2430_rf_send_b >>> 1126 ; >>> ----------------------------------------- >>> 828D 1127 _cc2430_rf_send_b: >>> 828D C0 09 1128 push _bp >>> 828F 85 81 09 1129 mov _bp,sp >>> 8292 C0 82 1130 push dpl >>> 8294 C0 83 1131 push dph >>> 8296 C0 F0 1132 push b >>> 1133 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x >>> bytes.\n",payload_len); >>> 8298 E5 09 1134 mov a,_bp >>> 829A 24 FC 1135 add a,#0xfc >>> 829C F8 1136 mov r0,a >>> 829D E6 1137 mov a,@r0 >>> 829E C0 E0 1138 push acc >>> 82A0 08 1139 inc r0 >>> 82A1 E6 1140 mov a,@r0 >>> 82A2 C0 E0 1141 push acc >>> 82A4 74 31 1142 mov a,#__str_2 >>> 82A6 C0 E0 1143 push acc >>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) >>> 82AA C0 E0 1145 push acc >>> 82AC 74 80 1146 mov a,#0x80 >>> 82AE C0 E0 1147 push acc >>> 82B0 12 3D 15 1148 lcall _printf >>> 82B3 E5 81 1149 mov a,sp >>> 82B5 24 FB 1150 add a,#0xfb >>> 82B7 F5 81 1151 mov sp,a >>> 1152 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", >>> payload); >>> 82B9 A8 09 1153 mov r0,_bp >>> 82BB 08 1154 inc r0 >>> 82BC E6 1155 mov a,@r0 >>> 82BD C0 E0 1156 push acc >>> 82BF 08 1157 inc r0 >>> 82C0 E6 1158 mov a,@r0 >>> 82C1 C0 E0 1159 push acc >>> 82C3 08 1160 inc r0 >>> 82C4 E6 1161 mov a,@r0 >>> 82C5 C0 E0 1162 push acc >>> 82C7 74 44 1163 mov a,#__str_3 >>> 82C9 C0 E0 1164 push acc >>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) >>> 82CD C0 E0 1166 push acc >>> 82CF 74 80 1167 mov a,#0x80 >>> 82D1 C0 E0 1168 push acc >>> 82D3 12 3D 15 1169 lcall _printf >>> 82D6 E5 81 1170 mov a,sp >>> 82D8 24 FA 1171 add a,#0xfa >>> 82DA F5 81 1172 mov sp,a >>> 1173 ; >>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); >>> 82DC AD 81 1174 mov r5,_SP >>> 82DE 7E 00 1175 mov r6,#0x00 >>> 82E0 C0 05 1176 push ar5 >>> 82E2 C0 06 1177 push ar6 >>> 82E4 74 56 1178 mov a,#__str_4 >>> 82E6 C0 E0 1179 push acc >>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) >>> 82EA C0 E0 1181 push acc >>> 82EC 74 80 1182 mov a,#0x80 >>> 82EE C0 E0 1183 push acc >>> 82F0 12 3D 15 1184 lcall _printf >>> 82F3 E5 81 1185 mov a,sp >>> 82F5 24 FB 1186 add a,#0xfb >>> 82F7 F5 81 1187 mov sp,a >>> >> ------------------------------------------------------------------------------ >> Throughout its 18-year history, RSA Conference consistently attracts the >> world's best and brightest in the field, creating opportunities for >> Conference >> attendees to learn about information security's most important issues >> through >> interactions with peers, luminaries and emerging and established >> companies. >> http://p.sf.net/sfu/rsaconf-dev2dev >> _______________________________________________ >> Sdcc-user mailing list >> Sdc...@li... >> https://lists.sourceforge.net/lists/listinfo/sdcc-user >> >> >> > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Maarten B. <sou...@ds...> - 2010-01-18 22:52:06
|
No, not quite. This is where it should be: if (IFFUNC_ISREENT (name->type) || options.stackAuto) { if (options.useXstack) xstackPtr -= port->stack.direction * port->stack.reent_overhead; else stackPtr -= port->stack.direction * port->stack.reent_overhead; } if (IFFUNC_ISBANKEDCALL (name->type)) stackPtr -= port->stack.direction * port->stack.banked_overhead; fetype = getSpec (name->type); /* get the specifier for the function */ /* if this is a reentrant function then */ if (IFFUNC_ISREENT (name->type)) reentrant++; > Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty > sure I got the correct location in mcs51/main.c, but the change is > SDCCCast might be different. Does this look good to you? > > > if (options.dump_tree) > PA(ex); > if (fatalError) > goto skipall; > > * if (IFFUNC_ISBANKEDCALL (name->type)) > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > * > /* Do not generate code for inline functions unless extern also. */ > #if 0 > if (FUNC_ISINLINE (name->type) && !IS_EXTERN (fetype)) > goto skipall; > #else > /* Temporary hack: always generate code for static inline functions. */ > /* Ideally static inline functions should only be generated if needed. */ > if (FUNC_ISINLINE (name->type) && !IS_EXTERN (fetype) && !IS_STATIC > (fetype)) > goto skipall; > #endif > > > Maarten Brock wrote: > > Anthony, > > > > I think I've found the bug. > > > > In mcs51/main.c(795) banked_overhead should be set to 1. > > And in SDCCast.c(6514) the following should be added: > > if (IFFUNC_ISBANKEDCALL (name->type)) > > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > > > When I fully have --model-huge working I'll commit ot svn. > > > > Greets, > > Maarten > > > > > >> Hi Maarten, > >> > >> any other way I can help narrow down the cause of this issue? > >> > >> a* > >> > >> Anthony Asterisk wrote: > >> > >>>> Indeed, no .rst for library objects. But maybe you could > >>>> link the object explicitly to override the library and > >>>> this will generate the .rst file. That is assuming you > >>>> have built the library first from source. > >>>> > >>>> Maarten > >>>> > >>> Yep can do that. > >>> > >>> program output: > >>> sending 2d bytes. > >>> payload addr X:0xe0a0. > >>> SP 72. > >>> sending ff00 bytes. > >>> payload addr X:0xe0a0. > >>> SP 78. > >>> > >>> > >>> rst file excerpts > >>> > >>> > >>> 1047 > >>> ;------------------------------------------------------------ > >>> 1048 ;Allocation info for local variables > >>> in function 'cc2430_rf_send' > >>> 1049 > >>> ;------------------------------------------------------------ > >>> 1050 ;payload_len Allocated > >>> to stack - offset -4 > >>> 1051 ;payload Allocated > >>> to registers r2 r3 r4 > >>> 1052 > >>> ;------------------------------------------------------------ > >>> 1053 ; > >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void > >>> *payload, unsigned short payload_len) > >>> 1054 ; > >>> ----------------------------------------- > >>> 1055 ; function cc2430_rf_send > >>> 1056 ; > >>> ----------------------------------------- > >>> 0468 1057 _cc2430_rf_send: > >>> 0468 C0 09 1058 push _bp > >>> 046A 85 81 09 1059 mov _bp,sp > >>> 046D AA 82 1060 mov r2,dpl > >>> 046F AB 83 1061 mov r3,dph > >>> 0471 AC F0 1062 mov r4,b > >>> 1063 ; > >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x > >>> bytes.\n",payload_len); > >>> 0473 C0 02 1064 push ar2 > >>> 0475 C0 03 1065 push ar3 > >>> 0477 C0 04 1066 push ar4 > >>> 0479 E5 09 1067 mov a,_bp > >>> 047B 24 FC 1068 add a,#0xfc > >>> 047D F8 1069 mov r0,a > >>> 047E E6 1070 mov a,@r0 > >>> 047F C0 E0 1071 push acc > >>> 0481 08 1072 inc r0 > >>> 0482 E6 1073 mov a,@r0 > >>> 0483 C0 E0 1074 push acc > >>> > >>> 0485 74 C1 1075 mov a,#__str_0 > >>> 0487 C0 E0 1076 push acc > >>> 0489 74 7C 1077 mov a,#(__str_0>> 8) > >>> 048B C0 E0 1078 push acc > >>> 048D 74 80 1079 mov a,#0x80 > >>> 048F C0 E0 1080 push acc > >>> 0491 12 3D 15 1081 lcall _printf > >>> 0494 E5 81 1082 mov a,sp > >>> 0496 24 FB 1083 add a,#0xfb > >>> 0498 F5 81 1084 mov sp,a > >>> 049A D0 04 1085 pop ar4 > >>> 049C D0 03 1086 pop ar3 > >>> 049E D0 02 1087 pop ar2 > >>> 1088 ; > >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr > >>> %p.\n", payload); > >>> 04A0 C0 02 1089 push ar2 > >>> 04A2 C0 03 1090 push ar3 > >>> 04A4 C0 04 1091 push ar4 > >>> 04A6 C0 02 1092 push ar2 > >>> 04A8 C0 03 1093 push ar3 > >>> 04AA C0 04 1094 push ar4 > >>> 04AC 74 D4 1095 mov a,#__str_1 > >>> 04AE C0 E0 1096 push acc > >>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) > >>> 04B2 C0 E0 1098 push acc > >>> 04B4 74 80 1099 mov a,#0x80 > >>> 04B6 C0 E0 1100 push acc > >>> 04B8 12 3D 15 1101 lcall _printf > >>> 04BB E5 81 1102 mov a,sp > >>> 04BD 24 FA 1103 add a,#0xfa > >>> > >>> 04BF F5 81 1104 mov sp,a > >>> 1105 ; > >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); > >>> 04C1 AD 81 1106 mov r5,_SP > >>> 04C3 7E 00 1107 mov r6,#0x00 > >>> 04C5 C0 05 1108 push ar5 > >>> 04C7 C0 06 1109 push ar6 > >>> 04C9 74 E6 1110 mov a,#__str_2 > >>> 04CB C0 E0 1111 push acc > >>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) > >>> 04CF C0 E0 1113 push acc > >>> 04D1 74 80 1114 mov a,#0x80 > >>> 04D3 C0 E0 1115 push acc > >>> 04D5 12 3D 15 1116 lcall _printf > >>> 04D8 E5 81 1117 mov a,sp > >>> 04DA 24 FB 1118 add a,#0xfb > >>> 04DC F5 81 1119 mov sp,a > >>> 04DE D0 04 1120 pop ar4 > >>> 04E0 D0 03 1121 pop ar3 > >>> 04E2 D0 02 1122 pop ar2 > >>> 1123 ; > >>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return > >>> cc2430_rf_send_b(payload, payload_len); > >>> 04E4 E5 09 1124 mov a,_bp > >>> 04E6 24 FC 1125 add a,#0xfc > >>> 04E8 F8 1126 mov r0,a > >>> 04E9 E6 1127 mov a,@r0 > >>> 04EA C0 E0 1128 push acc > >>> 04EC 08 1129 inc r0 > >>> 04ED E6 1130 mov a,@r0 > >>> 04EE C0 E0 1131 push acc > >>> 04F0 8A 82 1132 mov dpl,r2 > >>> 04F2 8B 83 1133 mov dph,r3 > >>> 04F4 8C F0 1134 mov b,r4 > >>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b > >>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b > >>> > >>>>> 8) > >>>>> > >>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b > >>> > >>>>> 16) > >>>>> > >>> 04FC 12 06 27 1138 lcall __sdcc_banked_call > >>> 04FF AA 82 1139 mov r2,dpl > >>> 0501 AB 83 1140 mov r3,dph > >>> 0503 15 81 1141 dec sp > >>> 0505 15 81 1142 dec sp > >>> 0507 8A 82 1143 mov dpl,r2 > >>> 0509 8B 83 1144 mov dph,r3 > >>> 050B D0 09 1145 pop _bp > >>> 050D 22 1146 ret > >>> > >>> 1115 > >>> ;------------------------------------------------------------ > >>> 1116 ;Allocation info for local variables > >>> in function 'cc2430_rf_send_b' > >>> 1117 > >>> ;------------------------------------------------------------ > >>> 1118 ;payload_len Allocated > >>> to stack - offset -4 > >>> 1119 ;payload Allocated > >>> to stack - offset 1 > >>> 1120 ;i Allocated > >>> to registers r5 > >>> 1121 ;counter Allocated > >>> to registers r2 > >>> 1122 > >>> ;------------------------------------------------------------ > >>> 1123 ; > >>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, > >>> unsigned short payload_len) __banked > >>> 1124 ; > >>> ----------------------------------------- > >>> 1125 ; function cc2430_rf_send_b > >>> 1126 ; > >>> ----------------------------------------- > >>> 828D 1127 _cc2430_rf_send_b: > >>> 828D C0 09 1128 push _bp > >>> 828F 85 81 09 1129 mov _bp,sp > >>> 8292 C0 82 1130 push dpl > >>> 8294 C0 83 1131 push dph > >>> 8296 C0 F0 1132 push b > >>> 1133 ; > >>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x > >>> bytes.\n",payload_len); > >>> 8298 E5 09 1134 mov a,_bp > >>> 829A 24 FC 1135 add a,#0xfc > >>> 829C F8 1136 mov r0,a > >>> 829D E6 1137 mov a,@r0 > >>> 829E C0 E0 1138 push acc > >>> 82A0 08 1139 inc r0 > >>> 82A1 E6 1140 mov a,@r0 > >>> 82A2 C0 E0 1141 push acc > >>> 82A4 74 31 1142 mov a,#__str_2 > >>> 82A6 C0 E0 1143 push acc > >>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) > >>> 82AA C0 E0 1145 push acc > >>> 82AC 74 80 1146 mov a,#0x80 > >>> 82AE C0 E0 1147 push acc > >>> 82B0 12 3D 15 1148 lcall _printf > >>> 82B3 E5 81 1149 mov a,sp > >>> 82B5 24 FB 1150 add a,#0xfb > >>> 82B7 F5 81 1151 mov sp,a > >>> 1152 ; > >>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", > >>> payload); > >>> 82B9 A8 09 1153 mov r0,_bp > >>> 82BB 08 1154 inc r0 > >>> 82BC E6 1155 mov a,@r0 > >>> 82BD C0 E0 1156 push acc > >>> 82BF 08 1157 inc r0 > >>> 82C0 E6 1158 mov a,@r0 > >>> 82C1 C0 E0 1159 push acc > >>> 82C3 08 1160 inc r0 > >>> 82C4 E6 1161 mov a,@r0 > >>> 82C5 C0 E0 1162 push acc > >>> 82C7 74 44 1163 mov a,#__str_3 > >>> 82C9 C0 E0 1164 push acc > >>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) > >>> 82CD C0 E0 1166 push acc > >>> 82CF 74 80 1167 mov a,#0x80 > >>> 82D1 C0 E0 1168 push acc > >>> 82D3 12 3D 15 1169 lcall _printf > >>> 82D6 E5 81 1170 mov a,sp > >>> 82D8 24 FA 1171 add a,#0xfa > >>> 82DA F5 81 1172 mov sp,a > >>> 1173 ; > >>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); > >>> 82DC AD 81 1174 mov r5,_SP > >>> 82DE 7E 00 1175 mov r6,#0x00 > >>> 82E0 C0 05 1176 push ar5 > >>> 82E2 C0 06 1177 push ar6 > >>> 82E4 74 56 1178 mov a,#__str_4 > >>> 82E6 C0 E0 1179 push acc > >>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) > >>> 82EA C0 E0 1181 push acc > >>> 82EC 74 80 1182 mov a,#0x80 > >>> 82EE C0 E0 1183 push acc > >>> 82F0 12 3D 15 1184 lcall _printf > >>> 82F3 E5 81 1185 mov a,sp > >>> 82F5 24 FB 1186 add a,#0xfb > >>> 82F7 F5 81 1187 mov sp,a > >>> > >> ------------------------------------------------------------------------------ > >> Throughout its 18-year history, RSA Conference consistently attracts the > >> world's best and brightest in the field, creating opportunities for > >> Conference > >> attendees to learn about information security's most important issues > >> through > >> interactions with peers, luminaries and emerging and established > >> companies. > >> http://p.sf.net/sfu/rsaconf-dev2dev > >> _______________________________________________ > >> Sdcc-user mailing list > >> Sdc...@li... > >> https://lists.sourceforge.net/lists/listinfo/sdcc-user > >> > >> > >> > > > > > > ------------------------------------------------------------------------------ > > Throughout its 18-year history, RSA Conference consistently attracts the > > world's best and brightest in the field, creating opportunities for Conference > > attendees to learn about information security's most important issues through > > interactions with peers, luminaries and emerging and established companies. > > http://p.sf.net/sfu/rsaconf-dev2dev > > _______________________________________________ > > Sdcc-user mailing list > > Sdc...@li... > > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > |
From: Anthony A. <ant...@gm...> - 2010-01-20 17:25:31
|
Thanks Maarten, your fix has helped! I look forward to your full release. Let me know if you need any assistance with testing. Anthony Maarten Brock wrote: > No, not quite. This is where it should be: > > if (IFFUNC_ISREENT (name->type) || options.stackAuto) > { > if (options.useXstack) > xstackPtr -= port->stack.direction * port->stack.reent_overhead; > else > stackPtr -= port->stack.direction * port->stack.reent_overhead; > } > > if (IFFUNC_ISBANKEDCALL (name->type)) > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > fetype = getSpec (name->type); /* get the specifier for the function */ > /* if this is a reentrant function then */ > if (IFFUNC_ISREENT (name->type)) > reentrant++; > > > > >> Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty >> sure I got the correct location in mcs51/main.c, but the change is >> SDCCCast might be different. Does this look good to you? >> >> >> if (options.dump_tree) >> PA(ex); >> if (fatalError) >> goto skipall; >> >> * if (IFFUNC_ISBANKEDCALL (name->type)) >> stackPtr -= port->stack.direction * port->stack.banked_overhead; >> >> * >> /* Do not generate code for inline functions unless extern also. */ >> #if 0 >> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)) >> goto skipall; >> #else >> /* Temporary hack: always generate code for static inline functions. */ >> /* Ideally static inline functions should only be generated if needed. */ >> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)&& !IS_STATIC >> (fetype)) >> goto skipall; >> #endif >> >> >> Maarten Brock wrote: >> >>> Anthony, >>> >>> I think I've found the bug. >>> >>> In mcs51/main.c(795) banked_overhead should be set to 1. >>> And in SDCCast.c(6514) the following should be added: >>> if (IFFUNC_ISBANKEDCALL (name->type)) >>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>> >>> When I fully have --model-huge working I'll commit ot svn. >>> >>> Greets, >>> Maarten >>> >>> >>> >>>> Hi Maarten, >>>> >>>> any other way I can help narrow down the cause of this issue? >>>> >>>> a* >>>> >>>> Anthony Asterisk wrote: >>>> >>>> >>>>>> Indeed, no .rst for library objects. But maybe you could >>>>>> link the object explicitly to override the library and >>>>>> this will generate the .rst file. That is assuming you >>>>>> have built the library first from source. >>>>>> >>>>>> Maarten >>>>>> >>>>>> >>>>> Yep can do that. >>>>> >>>>> program output: >>>>> sending 2d bytes. >>>>> payload addr X:0xe0a0. >>>>> SP 72. >>>>> sending ff00 bytes. >>>>> payload addr X:0xe0a0. >>>>> SP 78. >>>>> >>>>> >>>>> rst file excerpts >>>>> >>>>> >>>>> 1047 >>>>> ;------------------------------------------------------------ >>>>> 1048 ;Allocation info for local variables >>>>> in function 'cc2430_rf_send' >>>>> 1049 >>>>> ;------------------------------------------------------------ >>>>> 1050 ;payload_len Allocated >>>>> to stack - offset -4 >>>>> 1051 ;payload Allocated >>>>> to registers r2 r3 r4 >>>>> 1052 >>>>> ;------------------------------------------------------------ >>>>> 1053 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void >>>>> *payload, unsigned short payload_len) >>>>> 1054 ; >>>>> ----------------------------------------- >>>>> 1055 ; function cc2430_rf_send >>>>> 1056 ; >>>>> ----------------------------------------- >>>>> 0468 1057 _cc2430_rf_send: >>>>> 0468 C0 09 1058 push _bp >>>>> 046A 85 81 09 1059 mov _bp,sp >>>>> 046D AA 82 1060 mov r2,dpl >>>>> 046F AB 83 1061 mov r3,dph >>>>> 0471 AC F0 1062 mov r4,b >>>>> 1063 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x >>>>> bytes.\n",payload_len); >>>>> 0473 C0 02 1064 push ar2 >>>>> 0475 C0 03 1065 push ar3 >>>>> 0477 C0 04 1066 push ar4 >>>>> 0479 E5 09 1067 mov a,_bp >>>>> 047B 24 FC 1068 add a,#0xfc >>>>> 047D F8 1069 mov r0,a >>>>> 047E E6 1070 mov a,@r0 >>>>> 047F C0 E0 1071 push acc >>>>> 0481 08 1072 inc r0 >>>>> 0482 E6 1073 mov a,@r0 >>>>> 0483 C0 E0 1074 push acc >>>>> >>>>> 0485 74 C1 1075 mov a,#__str_0 >>>>> 0487 C0 E0 1076 push acc >>>>> 0489 74 7C 1077 mov a,#(__str_0>> 8) >>>>> 048B C0 E0 1078 push acc >>>>> 048D 74 80 1079 mov a,#0x80 >>>>> 048F C0 E0 1080 push acc >>>>> 0491 12 3D 15 1081 lcall _printf >>>>> 0494 E5 81 1082 mov a,sp >>>>> 0496 24 FB 1083 add a,#0xfb >>>>> 0498 F5 81 1084 mov sp,a >>>>> 049A D0 04 1085 pop ar4 >>>>> 049C D0 03 1086 pop ar3 >>>>> 049E D0 02 1087 pop ar2 >>>>> 1088 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr >>>>> %p.\n", payload); >>>>> 04A0 C0 02 1089 push ar2 >>>>> 04A2 C0 03 1090 push ar3 >>>>> 04A4 C0 04 1091 push ar4 >>>>> 04A6 C0 02 1092 push ar2 >>>>> 04A8 C0 03 1093 push ar3 >>>>> 04AA C0 04 1094 push ar4 >>>>> 04AC 74 D4 1095 mov a,#__str_1 >>>>> 04AE C0 E0 1096 push acc >>>>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) >>>>> 04B2 C0 E0 1098 push acc >>>>> 04B4 74 80 1099 mov a,#0x80 >>>>> 04B6 C0 E0 1100 push acc >>>>> 04B8 12 3D 15 1101 lcall _printf >>>>> 04BB E5 81 1102 mov a,sp >>>>> 04BD 24 FA 1103 add a,#0xfa >>>>> >>>>> 04BF F5 81 1104 mov sp,a >>>>> 1105 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); >>>>> 04C1 AD 81 1106 mov r5,_SP >>>>> 04C3 7E 00 1107 mov r6,#0x00 >>>>> 04C5 C0 05 1108 push ar5 >>>>> 04C7 C0 06 1109 push ar6 >>>>> 04C9 74 E6 1110 mov a,#__str_2 >>>>> 04CB C0 E0 1111 push acc >>>>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) >>>>> 04CF C0 E0 1113 push acc >>>>> 04D1 74 80 1114 mov a,#0x80 >>>>> 04D3 C0 E0 1115 push acc >>>>> 04D5 12 3D 15 1116 lcall _printf >>>>> 04D8 E5 81 1117 mov a,sp >>>>> 04DA 24 FB 1118 add a,#0xfb >>>>> 04DC F5 81 1119 mov sp,a >>>>> 04DE D0 04 1120 pop ar4 >>>>> 04E0 D0 03 1121 pop ar3 >>>>> 04E2 D0 02 1122 pop ar2 >>>>> 1123 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return >>>>> cc2430_rf_send_b(payload, payload_len); >>>>> 04E4 E5 09 1124 mov a,_bp >>>>> 04E6 24 FC 1125 add a,#0xfc >>>>> 04E8 F8 1126 mov r0,a >>>>> 04E9 E6 1127 mov a,@r0 >>>>> 04EA C0 E0 1128 push acc >>>>> 04EC 08 1129 inc r0 >>>>> 04ED E6 1130 mov a,@r0 >>>>> 04EE C0 E0 1131 push acc >>>>> 04F0 8A 82 1132 mov dpl,r2 >>>>> 04F2 8B 83 1133 mov dph,r3 >>>>> 04F4 8C F0 1134 mov b,r4 >>>>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b >>>>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >>>>> >>>>> >>>>>>> 8) >>>>>>> >>>>>>> >>>>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >>>>> >>>>> >>>>>>> 16) >>>>>>> >>>>>>> >>>>> 04FC 12 06 27 1138 lcall __sdcc_banked_call >>>>> 04FF AA 82 1139 mov r2,dpl >>>>> 0501 AB 83 1140 mov r3,dph >>>>> 0503 15 81 1141 dec sp >>>>> 0505 15 81 1142 dec sp >>>>> 0507 8A 82 1143 mov dpl,r2 >>>>> 0509 8B 83 1144 mov dph,r3 >>>>> 050B D0 09 1145 pop _bp >>>>> 050D 22 1146 ret >>>>> >>>>> 1115 >>>>> ;------------------------------------------------------------ >>>>> 1116 ;Allocation info for local variables >>>>> in function 'cc2430_rf_send_b' >>>>> 1117 >>>>> ;------------------------------------------------------------ >>>>> 1118 ;payload_len Allocated >>>>> to stack - offset -4 >>>>> 1119 ;payload Allocated >>>>> to stack - offset 1 >>>>> 1120 ;i Allocated >>>>> to registers r5 >>>>> 1121 ;counter Allocated >>>>> to registers r2 >>>>> 1122 >>>>> ;------------------------------------------------------------ >>>>> 1123 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, >>>>> unsigned short payload_len) __banked >>>>> 1124 ; >>>>> ----------------------------------------- >>>>> 1125 ; function cc2430_rf_send_b >>>>> 1126 ; >>>>> ----------------------------------------- >>>>> 828D 1127 _cc2430_rf_send_b: >>>>> 828D C0 09 1128 push _bp >>>>> 828F 85 81 09 1129 mov _bp,sp >>>>> 8292 C0 82 1130 push dpl >>>>> 8294 C0 83 1131 push dph >>>>> 8296 C0 F0 1132 push b >>>>> 1133 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x >>>>> bytes.\n",payload_len); >>>>> 8298 E5 09 1134 mov a,_bp >>>>> 829A 24 FC 1135 add a,#0xfc >>>>> 829C F8 1136 mov r0,a >>>>> 829D E6 1137 mov a,@r0 >>>>> 829E C0 E0 1138 push acc >>>>> 82A0 08 1139 inc r0 >>>>> 82A1 E6 1140 mov a,@r0 >>>>> 82A2 C0 E0 1141 push acc >>>>> 82A4 74 31 1142 mov a,#__str_2 >>>>> 82A6 C0 E0 1143 push acc >>>>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) >>>>> 82AA C0 E0 1145 push acc >>>>> 82AC 74 80 1146 mov a,#0x80 >>>>> 82AE C0 E0 1147 push acc >>>>> 82B0 12 3D 15 1148 lcall _printf >>>>> 82B3 E5 81 1149 mov a,sp >>>>> 82B5 24 FB 1150 add a,#0xfb >>>>> 82B7 F5 81 1151 mov sp,a >>>>> 1152 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", >>>>> payload); >>>>> 82B9 A8 09 1153 mov r0,_bp >>>>> 82BB 08 1154 inc r0 >>>>> 82BC E6 1155 mov a,@r0 >>>>> 82BD C0 E0 1156 push acc >>>>> 82BF 08 1157 inc r0 >>>>> 82C0 E6 1158 mov a,@r0 >>>>> 82C1 C0 E0 1159 push acc >>>>> 82C3 08 1160 inc r0 >>>>> 82C4 E6 1161 mov a,@r0 >>>>> 82C5 C0 E0 1162 push acc >>>>> 82C7 74 44 1163 mov a,#__str_3 >>>>> 82C9 C0 E0 1164 push acc >>>>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) >>>>> 82CD C0 E0 1166 push acc >>>>> 82CF 74 80 1167 mov a,#0x80 >>>>> 82D1 C0 E0 1168 push acc >>>>> 82D3 12 3D 15 1169 lcall _printf >>>>> 82D6 E5 81 1170 mov a,sp >>>>> 82D8 24 FA 1171 add a,#0xfa >>>>> 82DA F5 81 1172 mov sp,a >>>>> 1173 ; >>>>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); >>>>> 82DC AD 81 1174 mov r5,_SP >>>>> 82DE 7E 00 1175 mov r6,#0x00 >>>>> 82E0 C0 05 1176 push ar5 >>>>> 82E2 C0 06 1177 push ar6 >>>>> 82E4 74 56 1178 mov a,#__str_4 >>>>> 82E6 C0 E0 1179 push acc >>>>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) >>>>> 82EA C0 E0 1181 push acc >>>>> 82EC 74 80 1182 mov a,#0x80 >>>>> 82EE C0 E0 1183 push acc >>>>> 82F0 12 3D 15 1184 lcall _printf >>>>> 82F3 E5 81 1185 mov a,sp >>>>> 82F5 24 FB 1186 add a,#0xfb >>>>> 82F7 F5 81 1187 mov sp,a >>>>> >>>>> >>>> ------------------------------------------------------------------------------ >>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>> world's best and brightest in the field, creating opportunities for >>>> Conference >>>> attendees to learn about information security's most important issues >>>> through >>>> interactions with peers, luminaries and emerging and established >>>> companies. >>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>> _______________________________________________ >>>> Sdcc-user mailing list >>>> Sdc...@li... >>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>> >>>> >>>> >>>> >>> ------------------------------------------------------------------------------ >>> Throughout its 18-year history, RSA Conference consistently attracts the >>> world's best and brightest in the field, creating opportunities for Conference >>> attendees to learn about information security's most important issues through >>> interactions with peers, luminaries and emerging and established companies. >>> http://p.sf.net/sfu/rsaconf-dev2dev >>> _______________________________________________ >>> Sdcc-user mailing list >>> Sdc...@li... >>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>> >>> >> > > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies. > http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Anthony A. <ant...@gm...> - 2010-02-25 23:06:06
|
Hi Maarten, I was wondering how are you progressing on the huge memory model? I have been using the banked features pretty extensively but the requirement to explicitly mark code banked has limited what code I can move into the non-default banks. I would love if there was a way to make this all much more flexible. a* Anthony Asterisk wrote: > Thanks Maarten, your fix has helped! I look forward to your full > release. Let me know if you need any assistance with testing. > > Anthony > > Maarten Brock wrote: >> No, not quite. This is where it should be: >> >> if (IFFUNC_ISREENT (name->type) || options.stackAuto) >> { >> if (options.useXstack) >> xstackPtr -= port->stack.direction * port->stack.reent_overhead; >> else >> stackPtr -= port->stack.direction * port->stack.reent_overhead; >> } >> >> if (IFFUNC_ISBANKEDCALL (name->type)) >> stackPtr -= port->stack.direction * port->stack.banked_overhead; >> >> fetype = getSpec (name->type); /* get the specifier for the function */ >> /* if this is a reentrant function then */ >> if (IFFUNC_ISREENT (name->type)) >> reentrant++; >> >> >> >> >>> Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty >>> sure I got the correct location in mcs51/main.c, but the change is >>> SDCCCast might be different. Does this look good to you? >>> >>> >>> if (options.dump_tree) >>> PA(ex); >>> if (fatalError) >>> goto skipall; >>> >>> * if (IFFUNC_ISBANKEDCALL (name->type)) >>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>> >>> * >>> /* Do not generate code for inline functions unless extern also. */ >>> #if 0 >>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)) >>> goto skipall; >>> #else >>> /* Temporary hack: always generate code for static inline functions. */ >>> /* Ideally static inline functions should only be generated if needed. */ >>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)&& !IS_STATIC >>> (fetype)) >>> goto skipall; >>> #endif >>> >>> >>> Maarten Brock wrote: >>> >>>> Anthony, >>>> >>>> I think I've found the bug. >>>> >>>> In mcs51/main.c(795) banked_overhead should be set to 1. >>>> And in SDCCast.c(6514) the following should be added: >>>> if (IFFUNC_ISBANKEDCALL (name->type)) >>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>>> >>>> When I fully have --model-huge working I'll commit ot svn. >>>> >>>> Greets, >>>> Maarten >>>> >>>> >>>> >>>>> Hi Maarten, >>>>> >>>>> any other way I can help narrow down the cause of this issue? >>>>> >>>>> a* >>>>> >>>>> Anthony Asterisk wrote: >>>>> >>>>> >>>>>>> Indeed, no .rst for library objects. But maybe you could >>>>>>> link the object explicitly to override the library and >>>>>>> this will generate the .rst file. That is assuming you >>>>>>> have built the library first from source. >>>>>>> >>>>>>> Maarten >>>>>>> >>>>>>> >>>>>> Yep can do that. >>>>>> >>>>>> program output: >>>>>> sending 2d bytes. >>>>>> payload addr X:0xe0a0. >>>>>> SP 72. >>>>>> sending ff00 bytes. >>>>>> payload addr X:0xe0a0. >>>>>> SP 78. >>>>>> >>>>>> >>>>>> rst file excerpts >>>>>> >>>>>> >>>>>> 1047 >>>>>> ;------------------------------------------------------------ >>>>>> 1048 ;Allocation info for local variables >>>>>> in function 'cc2430_rf_send' >>>>>> 1049 >>>>>> ;------------------------------------------------------------ >>>>>> 1050 ;payload_len Allocated >>>>>> to stack - offset -4 >>>>>> 1051 ;payload Allocated >>>>>> to registers r2 r3 r4 >>>>>> 1052 >>>>>> ;------------------------------------------------------------ >>>>>> 1053 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void >>>>>> *payload, unsigned short payload_len) >>>>>> 1054 ; >>>>>> ----------------------------------------- >>>>>> 1055 ; function cc2430_rf_send >>>>>> 1056 ; >>>>>> ----------------------------------------- >>>>>> 0468 1057 _cc2430_rf_send: >>>>>> 0468 C0 09 1058 push _bp >>>>>> 046A 85 81 09 1059 mov _bp,sp >>>>>> 046D AA 82 1060 mov r2,dpl >>>>>> 046F AB 83 1061 mov r3,dph >>>>>> 0471 AC F0 1062 mov r4,b >>>>>> 1063 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x >>>>>> bytes.\n",payload_len); >>>>>> 0473 C0 02 1064 push ar2 >>>>>> 0475 C0 03 1065 push ar3 >>>>>> 0477 C0 04 1066 push ar4 >>>>>> 0479 E5 09 1067 mov a,_bp >>>>>> 047B 24 FC 1068 add a,#0xfc >>>>>> 047D F8 1069 mov r0,a >>>>>> 047E E6 1070 mov a,@r0 >>>>>> 047F C0 E0 1071 push acc >>>>>> 0481 08 1072 inc r0 >>>>>> 0482 E6 1073 mov a,@r0 >>>>>> 0483 C0 E0 1074 push acc >>>>>> >>>>>> 0485 74 C1 1075 mov a,#__str_0 >>>>>> 0487 C0 E0 1076 push acc >>>>>> 0489 74 7C 1077 mov a,#(__str_0>> 8) >>>>>> 048B C0 E0 1078 push acc >>>>>> 048D 74 80 1079 mov a,#0x80 >>>>>> 048F C0 E0 1080 push acc >>>>>> 0491 12 3D 15 1081 lcall _printf >>>>>> 0494 E5 81 1082 mov a,sp >>>>>> 0496 24 FB 1083 add a,#0xfb >>>>>> 0498 F5 81 1084 mov sp,a >>>>>> 049A D0 04 1085 pop ar4 >>>>>> 049C D0 03 1086 pop ar3 >>>>>> 049E D0 02 1087 pop ar2 >>>>>> 1088 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr >>>>>> %p.\n", payload); >>>>>> 04A0 C0 02 1089 push ar2 >>>>>> 04A2 C0 03 1090 push ar3 >>>>>> 04A4 C0 04 1091 push ar4 >>>>>> 04A6 C0 02 1092 push ar2 >>>>>> 04A8 C0 03 1093 push ar3 >>>>>> 04AA C0 04 1094 push ar4 >>>>>> 04AC 74 D4 1095 mov a,#__str_1 >>>>>> 04AE C0 E0 1096 push acc >>>>>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) >>>>>> 04B2 C0 E0 1098 push acc >>>>>> 04B4 74 80 1099 mov a,#0x80 >>>>>> 04B6 C0 E0 1100 push acc >>>>>> 04B8 12 3D 15 1101 lcall _printf >>>>>> 04BB E5 81 1102 mov a,sp >>>>>> 04BD 24 FA 1103 add a,#0xfa >>>>>> >>>>>> 04BF F5 81 1104 mov sp,a >>>>>> 1105 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); >>>>>> 04C1 AD 81 1106 mov r5,_SP >>>>>> 04C3 7E 00 1107 mov r6,#0x00 >>>>>> 04C5 C0 05 1108 push ar5 >>>>>> 04C7 C0 06 1109 push ar6 >>>>>> 04C9 74 E6 1110 mov a,#__str_2 >>>>>> 04CB C0 E0 1111 push acc >>>>>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) >>>>>> 04CF C0 E0 1113 push acc >>>>>> 04D1 74 80 1114 mov a,#0x80 >>>>>> 04D3 C0 E0 1115 push acc >>>>>> 04D5 12 3D 15 1116 lcall _printf >>>>>> 04D8 E5 81 1117 mov a,sp >>>>>> 04DA 24 FB 1118 add a,#0xfb >>>>>> 04DC F5 81 1119 mov sp,a >>>>>> 04DE D0 04 1120 pop ar4 >>>>>> 04E0 D0 03 1121 pop ar3 >>>>>> 04E2 D0 02 1122 pop ar2 >>>>>> 1123 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return >>>>>> cc2430_rf_send_b(payload, payload_len); >>>>>> 04E4 E5 09 1124 mov a,_bp >>>>>> 04E6 24 FC 1125 add a,#0xfc >>>>>> 04E8 F8 1126 mov r0,a >>>>>> 04E9 E6 1127 mov a,@r0 >>>>>> 04EA C0 E0 1128 push acc >>>>>> 04EC 08 1129 inc r0 >>>>>> 04ED E6 1130 mov a,@r0 >>>>>> 04EE C0 E0 1131 push acc >>>>>> 04F0 8A 82 1132 mov dpl,r2 >>>>>> 04F2 8B 83 1133 mov dph,r3 >>>>>> 04F4 8C F0 1134 mov b,r4 >>>>>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b >>>>>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >>>>>> >>>>>> >>>>>>>> 8) >>>>>>>> >>>>>>>> >>>>>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >>>>>> >>>>>> >>>>>>>> 16) >>>>>>>> >>>>>>>> >>>>>> 04FC 12 06 27 1138 lcall __sdcc_banked_call >>>>>> 04FF AA 82 1139 mov r2,dpl >>>>>> 0501 AB 83 1140 mov r3,dph >>>>>> 0503 15 81 1141 dec sp >>>>>> 0505 15 81 1142 dec sp >>>>>> 0507 8A 82 1143 mov dpl,r2 >>>>>> 0509 8B 83 1144 mov dph,r3 >>>>>> 050B D0 09 1145 pop _bp >>>>>> 050D 22 1146 ret >>>>>> >>>>>> 1115 >>>>>> ;------------------------------------------------------------ >>>>>> 1116 ;Allocation info for local variables >>>>>> in function 'cc2430_rf_send_b' >>>>>> 1117 >>>>>> ;------------------------------------------------------------ >>>>>> 1118 ;payload_len Allocated >>>>>> to stack - offset -4 >>>>>> 1119 ;payload Allocated >>>>>> to stack - offset 1 >>>>>> 1120 ;i Allocated >>>>>> to registers r5 >>>>>> 1121 ;counter Allocated >>>>>> to registers r2 >>>>>> 1122 >>>>>> ;------------------------------------------------------------ >>>>>> 1123 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, >>>>>> unsigned short payload_len) __banked >>>>>> 1124 ; >>>>>> ----------------------------------------- >>>>>> 1125 ; function cc2430_rf_send_b >>>>>> 1126 ; >>>>>> ----------------------------------------- >>>>>> 828D 1127 _cc2430_rf_send_b: >>>>>> 828D C0 09 1128 push _bp >>>>>> 828F 85 81 09 1129 mov _bp,sp >>>>>> 8292 C0 82 1130 push dpl >>>>>> 8294 C0 83 1131 push dph >>>>>> 8296 C0 F0 1132 push b >>>>>> 1133 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x >>>>>> bytes.\n",payload_len); >>>>>> 8298 E5 09 1134 mov a,_bp >>>>>> 829A 24 FC 1135 add a,#0xfc >>>>>> 829C F8 1136 mov r0,a >>>>>> 829D E6 1137 mov a,@r0 >>>>>> 829E C0 E0 1138 push acc >>>>>> 82A0 08 1139 inc r0 >>>>>> 82A1 E6 1140 mov a,@r0 >>>>>> 82A2 C0 E0 1141 push acc >>>>>> 82A4 74 31 1142 mov a,#__str_2 >>>>>> 82A6 C0 E0 1143 push acc >>>>>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) >>>>>> 82AA C0 E0 1145 push acc >>>>>> 82AC 74 80 1146 mov a,#0x80 >>>>>> 82AE C0 E0 1147 push acc >>>>>> 82B0 12 3D 15 1148 lcall _printf >>>>>> 82B3 E5 81 1149 mov a,sp >>>>>> 82B5 24 FB 1150 add a,#0xfb >>>>>> 82B7 F5 81 1151 mov sp,a >>>>>> 1152 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", >>>>>> payload); >>>>>> 82B9 A8 09 1153 mov r0,_bp >>>>>> 82BB 08 1154 inc r0 >>>>>> 82BC E6 1155 mov a,@r0 >>>>>> 82BD C0 E0 1156 push acc >>>>>> 82BF 08 1157 inc r0 >>>>>> 82C0 E6 1158 mov a,@r0 >>>>>> 82C1 C0 E0 1159 push acc >>>>>> 82C3 08 1160 inc r0 >>>>>> 82C4 E6 1161 mov a,@r0 >>>>>> 82C5 C0 E0 1162 push acc >>>>>> 82C7 74 44 1163 mov a,#__str_3 >>>>>> 82C9 C0 E0 1164 push acc >>>>>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) >>>>>> 82CD C0 E0 1166 push acc >>>>>> 82CF 74 80 1167 mov a,#0x80 >>>>>> 82D1 C0 E0 1168 push acc >>>>>> 82D3 12 3D 15 1169 lcall _printf >>>>>> 82D6 E5 81 1170 mov a,sp >>>>>> 82D8 24 FA 1171 add a,#0xfa >>>>>> 82DA F5 81 1172 mov sp,a >>>>>> 1173 ; >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); >>>>>> 82DC AD 81 1174 mov r5,_SP >>>>>> 82DE 7E 00 1175 mov r6,#0x00 >>>>>> 82E0 C0 05 1176 push ar5 >>>>>> 82E2 C0 06 1177 push ar6 >>>>>> 82E4 74 56 1178 mov a,#__str_4 >>>>>> 82E6 C0 E0 1179 push acc >>>>>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) >>>>>> 82EA C0 E0 1181 push acc >>>>>> 82EC 74 80 1182 mov a,#0x80 >>>>>> 82EE C0 E0 1183 push acc >>>>>> 82F0 12 3D 15 1184 lcall _printf >>>>>> 82F3 E5 81 1185 mov a,sp >>>>>> 82F5 24 FB 1186 add a,#0xfb >>>>>> 82F7 F5 81 1187 mov sp,a >>>>>> >>>>>> >>>>> ------------------------------------------------------------------------------ >>>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>>> world's best and brightest in the field, creating opportunities for >>>>> Conference >>>>> attendees to learn about information security's most important issues >>>>> through >>>>> interactions with peers, luminaries and emerging and established >>>>> companies. >>>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>>> _______________________________________________ >>>>> Sdcc-user mailing list >>>>> Sdc...@li... >>>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>>> >>>>> >>>>> >>>>> >>>> ------------------------------------------------------------------------------ >>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>> world's best and brightest in the field, creating opportunities for Conference >>>> attendees to learn about information security's most important issues through >>>> interactions with peers, luminaries and emerging and established companies. >>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>> _______________________________________________ >>>> Sdcc-user mailing list >>>> Sdc...@li... >>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>> >>>> >>> >> >> >> >> ------------------------------------------------------------------------------ >> Throughout its 18-year history, RSA Conference consistently attracts the >> world's best and brightest in the field, creating opportunities for Conference >> attendees to learn about information security's most important issues through >> interactions with peers, luminaries and emerging and established companies. >> http://p.sf.net/sfu/rsaconf-dev2dev >> _______________________________________________ >> Sdcc-user mailing list >> Sdc...@li... >> https://lists.sourceforge.net/lists/listinfo/sdcc-user >> |
From: Maarten B. <sou...@ds...> - 2010-02-26 08:01:00
|
I think you missed my announcement. It is already in the latest revision. I still need to document it though. Use --model-huge and all functions will be banked including the library (except some lowest level helper functions). The library therefor must also be build with this switch. Maarten > Hi Maarten, I was wondering how are you progressing on the huge memory > model? > > I have been using the banked features pretty extensively but the > requirement to explicitly mark code banked has limited what code I can > move into the non-default banks. I would love if there was a way to > make this all much more flexible. > > a* > > Anthony Asterisk wrote: > > Thanks Maarten, your fix has helped! I look forward to your full > > release. Let me know if you need any assistance with testing. > > > > Anthony > > > > Maarten Brock wrote: > >> No, not quite. This is where it should be: > >> > >> if (IFFUNC_ISREENT (name->type) || options.stackAuto) > >> { > >> if (options.useXstack) > >> xstackPtr -= port->stack.direction * port->stack.reent_overhead; > >> else > >> stackPtr -= port->stack.direction * port->stack.reent_overhead; > >> } > >> > >> if (IFFUNC_ISBANKEDCALL (name->type)) > >> stackPtr -= port->stack.direction * port->stack.banked_overhead; > >> > >> fetype = getSpec (name->type); /* get the specifier for the function */ > >> /* if this is a reentrant function then */ > >> if (IFFUNC_ISREENT (name->type)) > >> reentrant++; > >> > >> > >> > >> > >>> Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty > >>> sure I got the correct location in mcs51/main.c, but the change is > >>> SDCCCast might be different. Does this look good to you? > >>> > >>> > >>> if (options.dump_tree) > >>> PA(ex); > >>> if (fatalError) > >>> goto skipall; > >>> > >>> * if (IFFUNC_ISBANKEDCALL (name->type)) > >>> stackPtr -= port->stack.direction * port->stack.banked_overhead; > >>> > >>> * > >>> /* Do not generate code for inline functions unless extern also. */ > >>> #if 0 > >>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)) > >>> goto skipall; > >>> #else > >>> /* Temporary hack: always generate code for static inline functions. */ > >>> /* Ideally static inline functions should only be generated if needed. */ > >>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)&& !IS_STATIC > >>> (fetype)) > >>> goto skipall; > >>> #endif > >>> > >>> > >>> Maarten Brock wrote: > >>> > >>>> Anthony, > >>>> > >>>> I think I've found the bug. > >>>> > >>>> In mcs51/main.c(795) banked_overhead should be set to 1. > >>>> And in SDCCast.c(6514) the following should be added: > >>>> if (IFFUNC_ISBANKEDCALL (name->type)) > >>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; > >>>> > >>>> When I fully have --model-huge working I'll commit ot svn. > >>>> > >>>> Greets, > >>>> Maarten > >>>> > >>>> > >>>> > >>>>> Hi Maarten, > >>>>> > >>>>> any other way I can help narrow down the cause of this issue? > >>>>> > >>>>> a* > >>>>> > >>>>> Anthony Asterisk wrote: > >>>>> > >>>>> > >>>>>>> Indeed, no .rst for library objects. But maybe you could > >>>>>>> link the object explicitly to override the library and > >>>>>>> this will generate the .rst file. That is assuming you > >>>>>>> have built the library first from source. > >>>>>>> > >>>>>>> Maarten > >>>>>>> > >>>>>>> > >>>>>> Yep can do that. > >>>>>> > >>>>>> program output: > >>>>>> sending 2d bytes. > >>>>>> payload addr X:0xe0a0. > >>>>>> SP 72. > >>>>>> sending ff00 bytes. > >>>>>> payload addr X:0xe0a0. > >>>>>> SP 78. > >>>>>> > >>>>>> > >>>>>> rst file excerpts > >>>>>> > >>>>>> > >>>>>> 1047 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1048 ;Allocation info for local variables > >>>>>> in function 'cc2430_rf_send' > >>>>>> 1049 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1050 ;payload_len Allocated > >>>>>> to stack - offset -4 > >>>>>> 1051 ;payload Allocated > >>>>>> to registers r2 r3 r4 > >>>>>> 1052 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1053 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void > >>>>>> *payload, unsigned short payload_len) > >>>>>> 1054 ; > >>>>>> ----------------------------------------- > >>>>>> 1055 ; function cc2430_rf_send > >>>>>> 1056 ; > >>>>>> ----------------------------------------- > >>>>>> 0468 1057 _cc2430_rf_send: > >>>>>> 0468 C0 09 1058 push _bp > >>>>>> 046A 85 81 09 1059 mov _bp,sp > >>>>>> 046D AA 82 1060 mov r2,dpl > >>>>>> 046F AB 83 1061 mov r3,dph > >>>>>> 0471 AC F0 1062 mov r4,b > >>>>>> 1063 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x > >>>>>> bytes.\n",payload_len); > >>>>>> 0473 C0 02 1064 push ar2 > >>>>>> 0475 C0 03 1065 push ar3 > >>>>>> 0477 C0 04 1066 push ar4 > >>>>>> 0479 E5 09 1067 mov a,_bp > >>>>>> 047B 24 FC 1068 add a,#0xfc > >>>>>> 047D F8 1069 mov r0,a > >>>>>> 047E E6 1070 mov a,@r0 > >>>>>> 047F C0 E0 1071 push acc > >>>>>> 0481 08 1072 inc r0 > >>>>>> 0482 E6 1073 mov a,@r0 > >>>>>> 0483 C0 E0 1074 push acc > >>>>>> > >>>>>> 0485 74 C1 1075 mov a,#__str_0 > >>>>>> 0487 C0 E0 1076 push acc > >>>>>> 0489 74 7C 1077 mov a,#(__str_0>> 8) > >>>>>> 048B C0 E0 1078 push acc > >>>>>> 048D 74 80 1079 mov a,#0x80 > >>>>>> 048F C0 E0 1080 push acc > >>>>>> 0491 12 3D 15 1081 lcall _printf > >>>>>> 0494 E5 81 1082 mov a,sp > >>>>>> 0496 24 FB 1083 add a,#0xfb > >>>>>> 0498 F5 81 1084 mov sp,a > >>>>>> 049A D0 04 1085 pop ar4 > >>>>>> 049C D0 03 1086 pop ar3 > >>>>>> 049E D0 02 1087 pop ar2 > >>>>>> 1088 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr > >>>>>> %p.\n", payload); > >>>>>> 04A0 C0 02 1089 push ar2 > >>>>>> 04A2 C0 03 1090 push ar3 > >>>>>> 04A4 C0 04 1091 push ar4 > >>>>>> 04A6 C0 02 1092 push ar2 > >>>>>> 04A8 C0 03 1093 push ar3 > >>>>>> 04AA C0 04 1094 push ar4 > >>>>>> 04AC 74 D4 1095 mov a,#__str_1 > >>>>>> 04AE C0 E0 1096 push acc > >>>>>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) > >>>>>> 04B2 C0 E0 1098 push acc > >>>>>> 04B4 74 80 1099 mov a,#0x80 > >>>>>> 04B6 C0 E0 1100 push acc > >>>>>> 04B8 12 3D 15 1101 lcall _printf > >>>>>> 04BB E5 81 1102 mov a,sp > >>>>>> 04BD 24 FA 1103 add a,#0xfa > >>>>>> > >>>>>> 04BF F5 81 1104 mov sp,a > >>>>>> 1105 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); > >>>>>> 04C1 AD 81 1106 mov r5,_SP > >>>>>> 04C3 7E 00 1107 mov r6,#0x00 > >>>>>> 04C5 C0 05 1108 push ar5 > >>>>>> 04C7 C0 06 1109 push ar6 > >>>>>> 04C9 74 E6 1110 mov a,#__str_2 > >>>>>> 04CB C0 E0 1111 push acc > >>>>>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) > >>>>>> 04CF C0 E0 1113 push acc > >>>>>> 04D1 74 80 1114 mov a,#0x80 > >>>>>> 04D3 C0 E0 1115 push acc > >>>>>> 04D5 12 3D 15 1116 lcall _printf > >>>>>> 04D8 E5 81 1117 mov a,sp > >>>>>> 04DA 24 FB 1118 add a,#0xfb > >>>>>> 04DC F5 81 1119 mov sp,a > >>>>>> 04DE D0 04 1120 pop ar4 > >>>>>> 04E0 D0 03 1121 pop ar3 > >>>>>> 04E2 D0 02 1122 pop ar2 > >>>>>> 1123 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return > >>>>>> cc2430_rf_send_b(payload, payload_len); > >>>>>> 04E4 E5 09 1124 mov a,_bp > >>>>>> 04E6 24 FC 1125 add a,#0xfc > >>>>>> 04E8 F8 1126 mov r0,a > >>>>>> 04E9 E6 1127 mov a,@r0 > >>>>>> 04EA C0 E0 1128 push acc > >>>>>> 04EC 08 1129 inc r0 > >>>>>> 04ED E6 1130 mov a,@r0 > >>>>>> 04EE C0 E0 1131 push acc > >>>>>> 04F0 8A 82 1132 mov dpl,r2 > >>>>>> 04F2 8B 83 1133 mov dph,r3 > >>>>>> 04F4 8C F0 1134 mov b,r4 > >>>>>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b > >>>>>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b > >>>>>> > >>>>>> > >>>>>>>> 8) > >>>>>>>> > >>>>>>>> > >>>>>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b > >>>>>> > >>>>>> > >>>>>>>> 16) > >>>>>>>> > >>>>>>>> > >>>>>> 04FC 12 06 27 1138 lcall __sdcc_banked_call > >>>>>> 04FF AA 82 1139 mov r2,dpl > >>>>>> 0501 AB 83 1140 mov r3,dph > >>>>>> 0503 15 81 1141 dec sp > >>>>>> 0505 15 81 1142 dec sp > >>>>>> 0507 8A 82 1143 mov dpl,r2 > >>>>>> 0509 8B 83 1144 mov dph,r3 > >>>>>> 050B D0 09 1145 pop _bp > >>>>>> 050D 22 1146 ret > >>>>>> > >>>>>> 1115 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1116 ;Allocation info for local variables > >>>>>> in function 'cc2430_rf_send_b' > >>>>>> 1117 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1118 ;payload_len Allocated > >>>>>> to stack - offset -4 > >>>>>> 1119 ;payload Allocated > >>>>>> to stack - offset 1 > >>>>>> 1120 ;i Allocated > >>>>>> to registers r5 > >>>>>> 1121 ;counter Allocated > >>>>>> to registers r2 > >>>>>> 1122 > >>>>>> ;------------------------------------------------------------ > >>>>>> 1123 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, > >>>>>> unsigned short payload_len) __banked > >>>>>> 1124 ; > >>>>>> ----------------------------------------- > >>>>>> 1125 ; function cc2430_rf_send_b > >>>>>> 1126 ; > >>>>>> ----------------------------------------- > >>>>>> 828D 1127 _cc2430_rf_send_b: > >>>>>> 828D C0 09 1128 push _bp > >>>>>> 828F 85 81 09 1129 mov _bp,sp > >>>>>> 8292 C0 82 1130 push dpl > >>>>>> 8294 C0 83 1131 push dph > >>>>>> 8296 C0 F0 1132 push b > >>>>>> 1133 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x > >>>>>> bytes.\n",payload_len); > >>>>>> 8298 E5 09 1134 mov a,_bp > >>>>>> 829A 24 FC 1135 add a,#0xfc > >>>>>> 829C F8 1136 mov r0,a > >>>>>> 829D E6 1137 mov a,@r0 > >>>>>> 829E C0 E0 1138 push acc > >>>>>> 82A0 08 1139 inc r0 > >>>>>> 82A1 E6 1140 mov a,@r0 > >>>>>> 82A2 C0 E0 1141 push acc > >>>>>> 82A4 74 31 1142 mov a,#__str_2 > >>>>>> 82A6 C0 E0 1143 push acc > >>>>>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) > >>>>>> 82AA C0 E0 1145 push acc > >>>>>> 82AC 74 80 1146 mov a,#0x80 > >>>>>> 82AE C0 E0 1147 push acc > >>>>>> 82B0 12 3D 15 1148 lcall _printf > >>>>>> 82B3 E5 81 1149 mov a,sp > >>>>>> 82B5 24 FB 1150 add a,#0xfb > >>>>>> 82B7 F5 81 1151 mov sp,a > >>>>>> 1152 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", > >>>>>> payload); > >>>>>> 82B9 A8 09 1153 mov r0,_bp > >>>>>> 82BB 08 1154 inc r0 > >>>>>> 82BC E6 1155 mov a,@r0 > >>>>>> 82BD C0 E0 1156 push acc > >>>>>> 82BF 08 1157 inc r0 > >>>>>> 82C0 E6 1158 mov a,@r0 > >>>>>> 82C1 C0 E0 1159 push acc > >>>>>> 82C3 08 1160 inc r0 > >>>>>> 82C4 E6 1161 mov a,@r0 > >>>>>> 82C5 C0 E0 1162 push acc > >>>>>> 82C7 74 44 1163 mov a,#__str_3 > >>>>>> 82C9 C0 E0 1164 push acc > >>>>>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) > >>>>>> 82CD C0 E0 1166 push acc > >>>>>> 82CF 74 80 1167 mov a,#0x80 > >>>>>> 82D1 C0 E0 1168 push acc > >>>>>> 82D3 12 3D 15 1169 lcall _printf > >>>>>> 82D6 E5 81 1170 mov a,sp > >>>>>> 82D8 24 FA 1171 add a,#0xfa > >>>>>> 82DA F5 81 1172 mov sp,a > >>>>>> 1173 ; > >>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); > >>>>>> 82DC AD 81 1174 mov r5,_SP > >>>>>> 82DE 7E 00 1175 mov r6,#0x00 > >>>>>> 82E0 C0 05 1176 push ar5 > >>>>>> 82E2 C0 06 1177 push ar6 > >>>>>> 82E4 74 56 1178 mov a,#__str_4 > >>>>>> 82E6 C0 E0 1179 push acc > >>>>>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) > >>>>>> 82EA C0 E0 1181 push acc > >>>>>> 82EC 74 80 1182 mov a,#0x80 > >>>>>> 82EE C0 E0 1183 push acc > >>>>>> 82F0 12 3D 15 1184 lcall _printf > >>>>>> 82F3 E5 81 1185 mov a,sp > >>>>>> 82F5 24 FB 1186 add a,#0xfb > >>>>>> 82F7 F5 81 1187 mov sp,a > >>>>>> > >>>>>> > >>>>> ------------------------------------------------------------------------------ > >>>>> Throughout its 18-year history, RSA Conference consistently attracts the > >>>>> world's best and brightest in the field, creating opportunities for > >>>>> Conference > >>>>> attendees to learn about information security's most important issues > >>>>> through > >>>>> interactions with peers, luminaries and emerging and established > >>>>> companies. > >>>>> http://p.sf.net/sfu/rsaconf-dev2dev > >>>>> _______________________________________________ > >>>>> Sdcc-user mailing list > >>>>> Sdc...@li... > >>>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user > >>>>> > >>>>> > >>>>> > >>>>> > >>>> ------------------------------------------------------------------------------ > >>>> Throughout its 18-year history, RSA Conference consistently attracts the > >>>> world's best and brightest in the field, creating opportunities for Conference > >>>> attendees to learn about information security's most important issues through > >>>> interactions with peers, luminaries and emerging and established companies. > >>>> http://p.sf.net/sfu/rsaconf-dev2dev > >>>> _______________________________________________ > >>>> Sdcc-user mailing list > >>>> Sdc...@li... > >>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user > >>>> > >>>> > >>> > >> > >> > >> > >> ------------------------------------------------------------------------------ > >> Throughout its 18-year history, RSA Conference consistently attracts the > >> world's best and brightest in the field, creating opportunities for Conference > >> attendees to learn about information security's most important issues through > >> interactions with peers, luminaries and emerging and established companies. > >> http://p.sf.net/sfu/rsaconf-dev2dev > >> _______________________________________________ > >> Sdcc-user mailing list > >> Sdc...@li... > >> https://lists.sourceforge.net/lists/listinfo/sdcc-user > >> > > |
From: Anthony A. <ant...@gm...> - 2010-02-26 19:44:42
|
I looked for the announcement but didn't find it in the sdcc-users list or on the sdcc sourceforge NEWS section. Where should I download the version that has this support? Looking on sourceforge, I only see snapshots, and version 2.9.0 which does not include this.. Maarten Brock wrote: > I think you missed my announcement. It is already in the > latest revision. I still need to document it though. Use > --model-huge and all functions will be banked including > the library (except some lowest level helper functions). > The library therefor must also be build with this > switch. > > Maarten > > >> Hi Maarten, I was wondering how are you progressing on the huge memory >> model? >> >> I have been using the banked features pretty extensively but the >> requirement to explicitly mark code banked has limited what code I can >> move into the non-default banks. I would love if there was a way to >> make this all much more flexible. >> >> a* >> >> Anthony Asterisk wrote: >> >>> Thanks Maarten, your fix has helped! I look forward to your full >>> release. Let me know if you need any assistance with testing. >>> >>> Anthony >>> >>> Maarten Brock wrote: >>> >>>> No, not quite. This is where it should be: >>>> >>>> if (IFFUNC_ISREENT (name->type) || options.stackAuto) >>>> { >>>> if (options.useXstack) >>>> xstackPtr -= port->stack.direction * port->stack.reent_overhead; >>>> else >>>> stackPtr -= port->stack.direction * port->stack.reent_overhead; >>>> } >>>> >>>> if (IFFUNC_ISBANKEDCALL (name->type)) >>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>>> >>>> fetype = getSpec (name->type); /* get the specifier for the function */ >>>> /* if this is a reentrant function then */ >>>> if (IFFUNC_ISREENT (name->type)) >>>> reentrant++; >>>> >>>> >>>> >>>> >>>> >>>>> Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty >>>>> sure I got the correct location in mcs51/main.c, but the change is >>>>> SDCCCast might be different. Does this look good to you? >>>>> >>>>> >>>>> if (options.dump_tree) >>>>> PA(ex); >>>>> if (fatalError) >>>>> goto skipall; >>>>> >>>>> * if (IFFUNC_ISBANKEDCALL (name->type)) >>>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>>>> >>>>> * >>>>> /* Do not generate code for inline functions unless extern also. */ >>>>> #if 0 >>>>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)) >>>>> goto skipall; >>>>> #else >>>>> /* Temporary hack: always generate code for static inline functions. */ >>>>> /* Ideally static inline functions should only be generated if needed. */ >>>>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)&& !IS_STATIC >>>>> (fetype)) >>>>> goto skipall; >>>>> #endif >>>>> >>>>> >>>>> Maarten Brock wrote: >>>>> >>>>> >>>>>> Anthony, >>>>>> >>>>>> I think I've found the bug. >>>>>> >>>>>> In mcs51/main.c(795) banked_overhead should be set to 1. >>>>>> And in SDCCast.c(6514) the following should be added: >>>>>> if (IFFUNC_ISBANKEDCALL (name->type)) >>>>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>>>>> >>>>>> When I fully have --model-huge working I'll commit ot svn. >>>>>> >>>>>> Greets, >>>>>> Maarten >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> Hi Maarten, >>>>>>> >>>>>>> any other way I can help narrow down the cause of this issue? >>>>>>> >>>>>>> a* >>>>>>> >>>>>>> Anthony Asterisk wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>>>> Indeed, no .rst for library objects. But maybe you could >>>>>>>>> link the object explicitly to override the library and >>>>>>>>> this will generate the .rst file. That is assuming you >>>>>>>>> have built the library first from source. >>>>>>>>> >>>>>>>>> Maarten >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> Yep can do that. >>>>>>>> >>>>>>>> program output: >>>>>>>> sending 2d bytes. >>>>>>>> payload addr X:0xe0a0. >>>>>>>> SP 72. >>>>>>>> sending ff00 bytes. >>>>>>>> payload addr X:0xe0a0. >>>>>>>> SP 78. >>>>>>>> >>>>>>>> >>>>>>>> rst file excerpts >>>>>>>> >>>>>>>> >>>>>>>> 1047 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1048 ;Allocation info for local variables >>>>>>>> in function 'cc2430_rf_send' >>>>>>>> 1049 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1050 ;payload_len Allocated >>>>>>>> to stack - offset -4 >>>>>>>> 1051 ;payload Allocated >>>>>>>> to registers r2 r3 r4 >>>>>>>> 1052 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1053 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void >>>>>>>> *payload, unsigned short payload_len) >>>>>>>> 1054 ; >>>>>>>> ----------------------------------------- >>>>>>>> 1055 ; function cc2430_rf_send >>>>>>>> 1056 ; >>>>>>>> ----------------------------------------- >>>>>>>> 0468 1057 _cc2430_rf_send: >>>>>>>> 0468 C0 09 1058 push _bp >>>>>>>> 046A 85 81 09 1059 mov _bp,sp >>>>>>>> 046D AA 82 1060 mov r2,dpl >>>>>>>> 046F AB 83 1061 mov r3,dph >>>>>>>> 0471 AC F0 1062 mov r4,b >>>>>>>> 1063 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x >>>>>>>> bytes.\n",payload_len); >>>>>>>> 0473 C0 02 1064 push ar2 >>>>>>>> 0475 C0 03 1065 push ar3 >>>>>>>> 0477 C0 04 1066 push ar4 >>>>>>>> 0479 E5 09 1067 mov a,_bp >>>>>>>> 047B 24 FC 1068 add a,#0xfc >>>>>>>> 047D F8 1069 mov r0,a >>>>>>>> 047E E6 1070 mov a,@r0 >>>>>>>> 047F C0 E0 1071 push acc >>>>>>>> 0481 08 1072 inc r0 >>>>>>>> 0482 E6 1073 mov a,@r0 >>>>>>>> 0483 C0 E0 1074 push acc >>>>>>>> >>>>>>>> 0485 74 C1 1075 mov a,#__str_0 >>>>>>>> 0487 C0 E0 1076 push acc >>>>>>>> 0489 74 7C 1077 mov a,#(__str_0>> 8) >>>>>>>> 048B C0 E0 1078 push acc >>>>>>>> 048D 74 80 1079 mov a,#0x80 >>>>>>>> 048F C0 E0 1080 push acc >>>>>>>> 0491 12 3D 15 1081 lcall _printf >>>>>>>> 0494 E5 81 1082 mov a,sp >>>>>>>> 0496 24 FB 1083 add a,#0xfb >>>>>>>> 0498 F5 81 1084 mov sp,a >>>>>>>> 049A D0 04 1085 pop ar4 >>>>>>>> 049C D0 03 1086 pop ar3 >>>>>>>> 049E D0 02 1087 pop ar2 >>>>>>>> 1088 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr >>>>>>>> %p.\n", payload); >>>>>>>> 04A0 C0 02 1089 push ar2 >>>>>>>> 04A2 C0 03 1090 push ar3 >>>>>>>> 04A4 C0 04 1091 push ar4 >>>>>>>> 04A6 C0 02 1092 push ar2 >>>>>>>> 04A8 C0 03 1093 push ar3 >>>>>>>> 04AA C0 04 1094 push ar4 >>>>>>>> 04AC 74 D4 1095 mov a,#__str_1 >>>>>>>> 04AE C0 E0 1096 push acc >>>>>>>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) >>>>>>>> 04B2 C0 E0 1098 push acc >>>>>>>> 04B4 74 80 1099 mov a,#0x80 >>>>>>>> 04B6 C0 E0 1100 push acc >>>>>>>> 04B8 12 3D 15 1101 lcall _printf >>>>>>>> 04BB E5 81 1102 mov a,sp >>>>>>>> 04BD 24 FA 1103 add a,#0xfa >>>>>>>> >>>>>>>> 04BF F5 81 1104 mov sp,a >>>>>>>> 1105 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); >>>>>>>> 04C1 AD 81 1106 mov r5,_SP >>>>>>>> 04C3 7E 00 1107 mov r6,#0x00 >>>>>>>> 04C5 C0 05 1108 push ar5 >>>>>>>> 04C7 C0 06 1109 push ar6 >>>>>>>> 04C9 74 E6 1110 mov a,#__str_2 >>>>>>>> 04CB C0 E0 1111 push acc >>>>>>>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) >>>>>>>> 04CF C0 E0 1113 push acc >>>>>>>> 04D1 74 80 1114 mov a,#0x80 >>>>>>>> 04D3 C0 E0 1115 push acc >>>>>>>> 04D5 12 3D 15 1116 lcall _printf >>>>>>>> 04D8 E5 81 1117 mov a,sp >>>>>>>> 04DA 24 FB 1118 add a,#0xfb >>>>>>>> 04DC F5 81 1119 mov sp,a >>>>>>>> 04DE D0 04 1120 pop ar4 >>>>>>>> 04E0 D0 03 1121 pop ar3 >>>>>>>> 04E2 D0 02 1122 pop ar2 >>>>>>>> 1123 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return >>>>>>>> cc2430_rf_send_b(payload, payload_len); >>>>>>>> 04E4 E5 09 1124 mov a,_bp >>>>>>>> 04E6 24 FC 1125 add a,#0xfc >>>>>>>> 04E8 F8 1126 mov r0,a >>>>>>>> 04E9 E6 1127 mov a,@r0 >>>>>>>> 04EA C0 E0 1128 push acc >>>>>>>> 04EC 08 1129 inc r0 >>>>>>>> 04ED E6 1130 mov a,@r0 >>>>>>>> 04EE C0 E0 1131 push acc >>>>>>>> 04F0 8A 82 1132 mov dpl,r2 >>>>>>>> 04F2 8B 83 1133 mov dph,r3 >>>>>>>> 04F4 8C F0 1134 mov b,r4 >>>>>>>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b >>>>>>>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>>> 8) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>>> 16) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> 04FC 12 06 27 1138 lcall __sdcc_banked_call >>>>>>>> 04FF AA 82 1139 mov r2,dpl >>>>>>>> 0501 AB 83 1140 mov r3,dph >>>>>>>> 0503 15 81 1141 dec sp >>>>>>>> 0505 15 81 1142 dec sp >>>>>>>> 0507 8A 82 1143 mov dpl,r2 >>>>>>>> 0509 8B 83 1144 mov dph,r3 >>>>>>>> 050B D0 09 1145 pop _bp >>>>>>>> 050D 22 1146 ret >>>>>>>> >>>>>>>> 1115 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1116 ;Allocation info for local variables >>>>>>>> in function 'cc2430_rf_send_b' >>>>>>>> 1117 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1118 ;payload_len Allocated >>>>>>>> to stack - offset -4 >>>>>>>> 1119 ;payload Allocated >>>>>>>> to stack - offset 1 >>>>>>>> 1120 ;i Allocated >>>>>>>> to registers r5 >>>>>>>> 1121 ;counter Allocated >>>>>>>> to registers r2 >>>>>>>> 1122 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1123 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, >>>>>>>> unsigned short payload_len) __banked >>>>>>>> 1124 ; >>>>>>>> ----------------------------------------- >>>>>>>> 1125 ; function cc2430_rf_send_b >>>>>>>> 1126 ; >>>>>>>> ----------------------------------------- >>>>>>>> 828D 1127 _cc2430_rf_send_b: >>>>>>>> 828D C0 09 1128 push _bp >>>>>>>> 828F 85 81 09 1129 mov _bp,sp >>>>>>>> 8292 C0 82 1130 push dpl >>>>>>>> 8294 C0 83 1131 push dph >>>>>>>> 8296 C0 F0 1132 push b >>>>>>>> 1133 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x >>>>>>>> bytes.\n",payload_len); >>>>>>>> 8298 E5 09 1134 mov a,_bp >>>>>>>> 829A 24 FC 1135 add a,#0xfc >>>>>>>> 829C F8 1136 mov r0,a >>>>>>>> 829D E6 1137 mov a,@r0 >>>>>>>> 829E C0 E0 1138 push acc >>>>>>>> 82A0 08 1139 inc r0 >>>>>>>> 82A1 E6 1140 mov a,@r0 >>>>>>>> 82A2 C0 E0 1141 push acc >>>>>>>> 82A4 74 31 1142 mov a,#__str_2 >>>>>>>> 82A6 C0 E0 1143 push acc >>>>>>>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) >>>>>>>> 82AA C0 E0 1145 push acc >>>>>>>> 82AC 74 80 1146 mov a,#0x80 >>>>>>>> 82AE C0 E0 1147 push acc >>>>>>>> 82B0 12 3D 15 1148 lcall _printf >>>>>>>> 82B3 E5 81 1149 mov a,sp >>>>>>>> 82B5 24 FB 1150 add a,#0xfb >>>>>>>> 82B7 F5 81 1151 mov sp,a >>>>>>>> 1152 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", >>>>>>>> payload); >>>>>>>> 82B9 A8 09 1153 mov r0,_bp >>>>>>>> 82BB 08 1154 inc r0 >>>>>>>> 82BC E6 1155 mov a,@r0 >>>>>>>> 82BD C0 E0 1156 push acc >>>>>>>> 82BF 08 1157 inc r0 >>>>>>>> 82C0 E6 1158 mov a,@r0 >>>>>>>> 82C1 C0 E0 1159 push acc >>>>>>>> 82C3 08 1160 inc r0 >>>>>>>> 82C4 E6 1161 mov a,@r0 >>>>>>>> 82C5 C0 E0 1162 push acc >>>>>>>> 82C7 74 44 1163 mov a,#__str_3 >>>>>>>> 82C9 C0 E0 1164 push acc >>>>>>>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) >>>>>>>> 82CD C0 E0 1166 push acc >>>>>>>> 82CF 74 80 1167 mov a,#0x80 >>>>>>>> 82D1 C0 E0 1168 push acc >>>>>>>> 82D3 12 3D 15 1169 lcall _printf >>>>>>>> 82D6 E5 81 1170 mov a,sp >>>>>>>> 82D8 24 FA 1171 add a,#0xfa >>>>>>>> 82DA F5 81 1172 mov sp,a >>>>>>>> 1173 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); >>>>>>>> 82DC AD 81 1174 mov r5,_SP >>>>>>>> 82DE 7E 00 1175 mov r6,#0x00 >>>>>>>> 82E0 C0 05 1176 push ar5 >>>>>>>> 82E2 C0 06 1177 push ar6 >>>>>>>> 82E4 74 56 1178 mov a,#__str_4 >>>>>>>> 82E6 C0 E0 1179 push acc >>>>>>>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) >>>>>>>> 82EA C0 E0 1181 push acc >>>>>>>> 82EC 74 80 1182 mov a,#0x80 >>>>>>>> 82EE C0 E0 1183 push acc >>>>>>>> 82F0 12 3D 15 1184 lcall _printf >>>>>>>> 82F3 E5 81 1185 mov a,sp >>>>>>>> 82F5 24 FB 1186 add a,#0xfb >>>>>>>> 82F7 F5 81 1187 mov sp,a >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>>>>> world's best and brightest in the field, creating opportunities for >>>>>>> Conference >>>>>>> attendees to learn about information security's most important issues >>>>>>> through >>>>>>> interactions with peers, luminaries and emerging and established >>>>>>> companies. >>>>>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>>>>> _______________________________________________ >>>>>>> Sdcc-user mailing list >>>>>>> Sdc...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>>>> world's best and brightest in the field, creating opportunities for Conference >>>>>> attendees to learn about information security's most important issues through >>>>>> interactions with peers, luminaries and emerging and established companies. >>>>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>>>> _______________________________________________ >>>>>> Sdcc-user mailing list >>>>>> Sdc...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>> world's best and brightest in the field, creating opportunities for Conference >>>> attendees to learn about information security's most important issues through >>>> interactions with peers, luminaries and emerging and established companies. >>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>> _______________________________________________ >>>> Sdcc-user mailing list >>>> Sdc...@li... >>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>> >>>> >> > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Anthony A. <ant...@gm...> - 2010-02-26 08:31:08
|
Oh GREAT!!! I'll give it a try tomorrow, thanks! a* Maarten Brock wrote: > I think you missed my announcement. It is already in the > latest revision. I still need to document it though. Use > --model-huge and all functions will be banked including > the library (except some lowest level helper functions). > The library therefor must also be build with this > switch. > > Maarten > > >> Hi Maarten, I was wondering how are you progressing on the huge memory >> model? >> >> I have been using the banked features pretty extensively but the >> requirement to explicitly mark code banked has limited what code I can >> move into the non-default banks. I would love if there was a way to >> make this all much more flexible. >> >> a* >> >> Anthony Asterisk wrote: >> >>> Thanks Maarten, your fix has helped! I look forward to your full >>> release. Let me know if you need any assistance with testing. >>> >>> Anthony >>> >>> Maarten Brock wrote: >>> >>>> No, not quite. This is where it should be: >>>> >>>> if (IFFUNC_ISREENT (name->type) || options.stackAuto) >>>> { >>>> if (options.useXstack) >>>> xstackPtr -= port->stack.direction * port->stack.reent_overhead; >>>> else >>>> stackPtr -= port->stack.direction * port->stack.reent_overhead; >>>> } >>>> >>>> if (IFFUNC_ISBANKEDCALL (name->type)) >>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>>> >>>> fetype = getSpec (name->type); /* get the specifier for the function */ >>>> /* if this is a reentrant function then */ >>>> if (IFFUNC_ISREENT (name->type)) >>>> reentrant++; >>>> >>>> >>>> >>>> >>>> >>>>> Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty >>>>> sure I got the correct location in mcs51/main.c, but the change is >>>>> SDCCCast might be different. Does this look good to you? >>>>> >>>>> >>>>> if (options.dump_tree) >>>>> PA(ex); >>>>> if (fatalError) >>>>> goto skipall; >>>>> >>>>> * if (IFFUNC_ISBANKEDCALL (name->type)) >>>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>>>> >>>>> * >>>>> /* Do not generate code for inline functions unless extern also. */ >>>>> #if 0 >>>>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)) >>>>> goto skipall; >>>>> #else >>>>> /* Temporary hack: always generate code for static inline functions. */ >>>>> /* Ideally static inline functions should only be generated if needed. */ >>>>> if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)&& !IS_STATIC >>>>> (fetype)) >>>>> goto skipall; >>>>> #endif >>>>> >>>>> >>>>> Maarten Brock wrote: >>>>> >>>>> >>>>>> Anthony, >>>>>> >>>>>> I think I've found the bug. >>>>>> >>>>>> In mcs51/main.c(795) banked_overhead should be set to 1. >>>>>> And in SDCCast.c(6514) the following should be added: >>>>>> if (IFFUNC_ISBANKEDCALL (name->type)) >>>>>> stackPtr -= port->stack.direction * port->stack.banked_overhead; >>>>>> >>>>>> When I fully have --model-huge working I'll commit ot svn. >>>>>> >>>>>> Greets, >>>>>> Maarten >>>>>> >>>>>> >>>>>> >>>>>> >>>>>>> Hi Maarten, >>>>>>> >>>>>>> any other way I can help narrow down the cause of this issue? >>>>>>> >>>>>>> a* >>>>>>> >>>>>>> Anthony Asterisk wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>>>> Indeed, no .rst for library objects. But maybe you could >>>>>>>>> link the object explicitly to override the library and >>>>>>>>> this will generate the .rst file. That is assuming you >>>>>>>>> have built the library first from source. >>>>>>>>> >>>>>>>>> Maarten >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>> Yep can do that. >>>>>>>> >>>>>>>> program output: >>>>>>>> sending 2d bytes. >>>>>>>> payload addr X:0xe0a0. >>>>>>>> SP 72. >>>>>>>> sending ff00 bytes. >>>>>>>> payload addr X:0xe0a0. >>>>>>>> SP 78. >>>>>>>> >>>>>>>> >>>>>>>> rst file excerpts >>>>>>>> >>>>>>>> >>>>>>>> 1047 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1048 ;Allocation info for local variables >>>>>>>> in function 'cc2430_rf_send' >>>>>>>> 1049 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1050 ;payload_len Allocated >>>>>>>> to stack - offset -4 >>>>>>>> 1051 ;payload Allocated >>>>>>>> to registers r2 r3 r4 >>>>>>>> 1052 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1053 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void >>>>>>>> *payload, unsigned short payload_len) >>>>>>>> 1054 ; >>>>>>>> ----------------------------------------- >>>>>>>> 1055 ; function cc2430_rf_send >>>>>>>> 1056 ; >>>>>>>> ----------------------------------------- >>>>>>>> 0468 1057 _cc2430_rf_send: >>>>>>>> 0468 C0 09 1058 push _bp >>>>>>>> 046A 85 81 09 1059 mov _bp,sp >>>>>>>> 046D AA 82 1060 mov r2,dpl >>>>>>>> 046F AB 83 1061 mov r3,dph >>>>>>>> 0471 AC F0 1062 mov r4,b >>>>>>>> 1063 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x >>>>>>>> bytes.\n",payload_len); >>>>>>>> 0473 C0 02 1064 push ar2 >>>>>>>> 0475 C0 03 1065 push ar3 >>>>>>>> 0477 C0 04 1066 push ar4 >>>>>>>> 0479 E5 09 1067 mov a,_bp >>>>>>>> 047B 24 FC 1068 add a,#0xfc >>>>>>>> 047D F8 1069 mov r0,a >>>>>>>> 047E E6 1070 mov a,@r0 >>>>>>>> 047F C0 E0 1071 push acc >>>>>>>> 0481 08 1072 inc r0 >>>>>>>> 0482 E6 1073 mov a,@r0 >>>>>>>> 0483 C0 E0 1074 push acc >>>>>>>> >>>>>>>> 0485 74 C1 1075 mov a,#__str_0 >>>>>>>> 0487 C0 E0 1076 push acc >>>>>>>> 0489 74 7C 1077 mov a,#(__str_0>> 8) >>>>>>>> 048B C0 E0 1078 push acc >>>>>>>> 048D 74 80 1079 mov a,#0x80 >>>>>>>> 048F C0 E0 1080 push acc >>>>>>>> 0491 12 3D 15 1081 lcall _printf >>>>>>>> 0494 E5 81 1082 mov a,sp >>>>>>>> 0496 24 FB 1083 add a,#0xfb >>>>>>>> 0498 F5 81 1084 mov sp,a >>>>>>>> 049A D0 04 1085 pop ar4 >>>>>>>> 049C D0 03 1086 pop ar3 >>>>>>>> 049E D0 02 1087 pop ar2 >>>>>>>> 1088 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr >>>>>>>> %p.\n", payload); >>>>>>>> 04A0 C0 02 1089 push ar2 >>>>>>>> 04A2 C0 03 1090 push ar3 >>>>>>>> 04A4 C0 04 1091 push ar4 >>>>>>>> 04A6 C0 02 1092 push ar2 >>>>>>>> 04A8 C0 03 1093 push ar3 >>>>>>>> 04AA C0 04 1094 push ar4 >>>>>>>> 04AC 74 D4 1095 mov a,#__str_1 >>>>>>>> 04AE C0 E0 1096 push acc >>>>>>>> 04B0 74 7C 1097 mov a,#(__str_1>> 8) >>>>>>>> 04B2 C0 E0 1098 push acc >>>>>>>> 04B4 74 80 1099 mov a,#0x80 >>>>>>>> 04B6 C0 E0 1100 push acc >>>>>>>> 04B8 12 3D 15 1101 lcall _printf >>>>>>>> 04BB E5 81 1102 mov a,sp >>>>>>>> 04BD 24 FA 1103 add a,#0xfa >>>>>>>> >>>>>>>> 04BF F5 81 1104 mov sp,a >>>>>>>> 1105 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); >>>>>>>> 04C1 AD 81 1106 mov r5,_SP >>>>>>>> 04C3 7E 00 1107 mov r6,#0x00 >>>>>>>> 04C5 C0 05 1108 push ar5 >>>>>>>> 04C7 C0 06 1109 push ar6 >>>>>>>> 04C9 74 E6 1110 mov a,#__str_2 >>>>>>>> 04CB C0 E0 1111 push acc >>>>>>>> 04CD 74 7C 1112 mov a,#(__str_2>> 8) >>>>>>>> 04CF C0 E0 1113 push acc >>>>>>>> 04D1 74 80 1114 mov a,#0x80 >>>>>>>> 04D3 C0 E0 1115 push acc >>>>>>>> 04D5 12 3D 15 1116 lcall _printf >>>>>>>> 04D8 E5 81 1117 mov a,sp >>>>>>>> 04DA 24 FB 1118 add a,#0xfb >>>>>>>> 04DC F5 81 1119 mov sp,a >>>>>>>> 04DE D0 04 1120 pop ar4 >>>>>>>> 04E0 D0 03 1121 pop ar3 >>>>>>>> 04E2 D0 02 1122 pop ar2 >>>>>>>> 1123 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return >>>>>>>> cc2430_rf_send_b(payload, payload_len); >>>>>>>> 04E4 E5 09 1124 mov a,_bp >>>>>>>> 04E6 24 FC 1125 add a,#0xfc >>>>>>>> 04E8 F8 1126 mov r0,a >>>>>>>> 04E9 E6 1127 mov a,@r0 >>>>>>>> 04EA C0 E0 1128 push acc >>>>>>>> 04EC 08 1129 inc r0 >>>>>>>> 04ED E6 1130 mov a,@r0 >>>>>>>> 04EE C0 E0 1131 push acc >>>>>>>> 04F0 8A 82 1132 mov dpl,r2 >>>>>>>> 04F2 8B 83 1133 mov dph,r3 >>>>>>>> 04F4 8C F0 1134 mov b,r4 >>>>>>>> 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b >>>>>>>> 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>>> 8) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>>>> 16) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>> 04FC 12 06 27 1138 lcall __sdcc_banked_call >>>>>>>> 04FF AA 82 1139 mov r2,dpl >>>>>>>> 0501 AB 83 1140 mov r3,dph >>>>>>>> 0503 15 81 1141 dec sp >>>>>>>> 0505 15 81 1142 dec sp >>>>>>>> 0507 8A 82 1143 mov dpl,r2 >>>>>>>> 0509 8B 83 1144 mov dph,r3 >>>>>>>> 050B D0 09 1145 pop _bp >>>>>>>> 050D 22 1146 ret >>>>>>>> >>>>>>>> 1115 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1116 ;Allocation info for local variables >>>>>>>> in function 'cc2430_rf_send_b' >>>>>>>> 1117 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1118 ;payload_len Allocated >>>>>>>> to stack - offset -4 >>>>>>>> 1119 ;payload Allocated >>>>>>>> to stack - offset 1 >>>>>>>> 1120 ;i Allocated >>>>>>>> to registers r5 >>>>>>>> 1121 ;counter Allocated >>>>>>>> to registers r2 >>>>>>>> 1122 >>>>>>>> ;------------------------------------------------------------ >>>>>>>> 1123 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, >>>>>>>> unsigned short payload_len) __banked >>>>>>>> 1124 ; >>>>>>>> ----------------------------------------- >>>>>>>> 1125 ; function cc2430_rf_send_b >>>>>>>> 1126 ; >>>>>>>> ----------------------------------------- >>>>>>>> 828D 1127 _cc2430_rf_send_b: >>>>>>>> 828D C0 09 1128 push _bp >>>>>>>> 828F 85 81 09 1129 mov _bp,sp >>>>>>>> 8292 C0 82 1130 push dpl >>>>>>>> 8294 C0 83 1131 push dph >>>>>>>> 8296 C0 F0 1132 push b >>>>>>>> 1133 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x >>>>>>>> bytes.\n",payload_len); >>>>>>>> 8298 E5 09 1134 mov a,_bp >>>>>>>> 829A 24 FC 1135 add a,#0xfc >>>>>>>> 829C F8 1136 mov r0,a >>>>>>>> 829D E6 1137 mov a,@r0 >>>>>>>> 829E C0 E0 1138 push acc >>>>>>>> 82A0 08 1139 inc r0 >>>>>>>> 82A1 E6 1140 mov a,@r0 >>>>>>>> 82A2 C0 E0 1141 push acc >>>>>>>> 82A4 74 31 1142 mov a,#__str_2 >>>>>>>> 82A6 C0 E0 1143 push acc >>>>>>>> 82A8 74 7C 1144 mov a,#(__str_2>> 8) >>>>>>>> 82AA C0 E0 1145 push acc >>>>>>>> 82AC 74 80 1146 mov a,#0x80 >>>>>>>> 82AE C0 E0 1147 push acc >>>>>>>> 82B0 12 3D 15 1148 lcall _printf >>>>>>>> 82B3 E5 81 1149 mov a,sp >>>>>>>> 82B5 24 FB 1150 add a,#0xfb >>>>>>>> 82B7 F5 81 1151 mov sp,a >>>>>>>> 1152 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", >>>>>>>> payload); >>>>>>>> 82B9 A8 09 1153 mov r0,_bp >>>>>>>> 82BB 08 1154 inc r0 >>>>>>>> 82BC E6 1155 mov a,@r0 >>>>>>>> 82BD C0 E0 1156 push acc >>>>>>>> 82BF 08 1157 inc r0 >>>>>>>> 82C0 E6 1158 mov a,@r0 >>>>>>>> 82C1 C0 E0 1159 push acc >>>>>>>> 82C3 08 1160 inc r0 >>>>>>>> 82C4 E6 1161 mov a,@r0 >>>>>>>> 82C5 C0 E0 1162 push acc >>>>>>>> 82C7 74 44 1163 mov a,#__str_3 >>>>>>>> 82C9 C0 E0 1164 push acc >>>>>>>> 82CB 74 7C 1165 mov a,#(__str_3>> 8) >>>>>>>> 82CD C0 E0 1166 push acc >>>>>>>> 82CF 74 80 1167 mov a,#0x80 >>>>>>>> 82D1 C0 E0 1168 push acc >>>>>>>> 82D3 12 3D 15 1169 lcall _printf >>>>>>>> 82D6 E5 81 1170 mov a,sp >>>>>>>> 82D8 24 FA 1171 add a,#0xfa >>>>>>>> 82DA F5 81 1172 mov sp,a >>>>>>>> 1173 ; >>>>>>>> ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); >>>>>>>> 82DC AD 81 1174 mov r5,_SP >>>>>>>> 82DE 7E 00 1175 mov r6,#0x00 >>>>>>>> 82E0 C0 05 1176 push ar5 >>>>>>>> 82E2 C0 06 1177 push ar6 >>>>>>>> 82E4 74 56 1178 mov a,#__str_4 >>>>>>>> 82E6 C0 E0 1179 push acc >>>>>>>> 82E8 74 7C 1180 mov a,#(__str_4>> 8) >>>>>>>> 82EA C0 E0 1181 push acc >>>>>>>> 82EC 74 80 1182 mov a,#0x80 >>>>>>>> 82EE C0 E0 1183 push acc >>>>>>>> 82F0 12 3D 15 1184 lcall _printf >>>>>>>> 82F3 E5 81 1185 mov a,sp >>>>>>>> 82F5 24 FB 1186 add a,#0xfb >>>>>>>> 82F7 F5 81 1187 mov sp,a >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> ------------------------------------------------------------------------------ >>>>>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>>>>> world's best and brightest in the field, creating opportunities for >>>>>>> Conference >>>>>>> attendees to learn about information security's most important issues >>>>>>> through >>>>>>> interactions with peers, luminaries and emerging and established >>>>>>> companies. >>>>>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>>>>> _______________________________________________ >>>>>>> Sdcc-user mailing list >>>>>>> Sdc...@li... >>>>>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> ------------------------------------------------------------------------------ >>>>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>>>> world's best and brightest in the field, creating opportunities for Conference >>>>>> attendees to learn about information security's most important issues through >>>>>> interactions with peers, luminaries and emerging and established companies. >>>>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>>>> _______________________________________________ >>>>>> Sdcc-user mailing list >>>>>> Sdc...@li... >>>>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>>> ------------------------------------------------------------------------------ >>>> Throughout its 18-year history, RSA Conference consistently attracts the >>>> world's best and brightest in the field, creating opportunities for Conference >>>> attendees to learn about information security's most important issues through >>>> interactions with peers, luminaries and emerging and established companies. >>>> http://p.sf.net/sfu/rsaconf-dev2dev >>>> _______________________________________________ >>>> Sdcc-user mailing list >>>> Sdc...@li... >>>> https://lists.sourceforge.net/lists/listinfo/sdcc-user >>>> >>>> >> > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > |
From: Sébastien L. <sq...@gm...> - 2010-02-26 09:02:51
|
probably off topic, sorry, but what I miss in the 8051 port is a 16 bit-stack pointer in xdata mode :( On Fri, Feb 26, 2010 at 9:30 AM, Anthony Asterisk < ant...@gm...> wrote: > Oh GREAT!!! > > I'll give it a try tomorrow, thanks! > > a* > > > Maarten Brock wrote: > > I think you missed my announcement. It is already in the > latest revision. I still need to document it though. Use > --model-huge and all functions will be banked including > the library (except some lowest level helper functions). > The library therefor must also be build with this > switch. > > Maarten > > > > Hi Maarten, I was wondering how are you progressing on the huge memory > model? > > I have been using the banked features pretty extensively but the > requirement to explicitly mark code banked has limited what code I can > move into the non-default banks. I would love if there was a way to > make this all much more flexible. > > a* > > Anthony Asterisk wrote: > > > Thanks Maarten, your fix has helped! I look forward to your full > release. Let me know if you need any assistance with testing. > > Anthony > > Maarten Brock wrote: > > > No, not quite. This is where it should be: > > if (IFFUNC_ISREENT (name->type) || options.stackAuto) > { > if (options.useXstack) > xstackPtr -= port->stack.direction * port->stack.reent_overhead; > else > stackPtr -= port->stack.direction * port->stack.reent_overhead; > } > > if (IFFUNC_ISBANKEDCALL (name->type)) > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > fetype = getSpec (name->type); /* get the specifier for the function */ > /* if this is a reentrant function then */ > if (IFFUNC_ISREENT (name->type)) > reentrant++; > > > > > > > Hi Maarten. I'm not sure my line numbers line up with your. I'm pretty > sure I got the correct location in mcs51/main.c, but the change is > SDCCCast might be different. Does this look good to you? > > > if (options.dump_tree) > PA(ex); > if (fatalError) > goto skipall; > > * if (IFFUNC_ISBANKEDCALL (name->type)) > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > * > /* Do not generate code for inline functions unless extern also. */ > #if 0 > if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)) > goto skipall; > #else > /* Temporary hack: always generate code for static inline functions. */ > /* Ideally static inline functions should only be generated if needed. */ > if (FUNC_ISINLINE (name->type)&& !IS_EXTERN (fetype)&& !IS_STATIC > (fetype)) > goto skipall; > #endif > > > Maarten Brock wrote: > > > > Anthony, > > I think I've found the bug. > > In mcs51/main.c(795) banked_overhead should be set to 1. > And in SDCCast.c(6514) the following should be added: > if (IFFUNC_ISBANKEDCALL (name->type)) > stackPtr -= port->stack.direction * port->stack.banked_overhead; > > When I fully have --model-huge working I'll commit ot svn. > > Greets, > Maarten > > > > > > Hi Maarten, > > any other way I can help narrow down the cause of this issue? > > a* > > Anthony Asterisk wrote: > > > > > Indeed, no .rst for library objects. But maybe you could > link the object explicitly to override the library and > this will generate the .rst file. That is assuming you > have built the library first from source. > > Maarten > > > > > Yep can do that. > > program output: > sending 2d bytes. > payload addr X:0xe0a0. > SP 72. > sending ff00 bytes. > payload addr X:0xe0a0. > SP 78. > > > rst file excerpts > > > 1047 > ;------------------------------------------------------------ > 1048 ;Allocation info for local variables > in function 'cc2430_rf_send' > 1049 > ;------------------------------------------------------------ > 1050 ;payload_len Allocated > to stack - offset -4 > 1051 ;payload Allocated > to registers r2 r3 r4 > 1052 > ;------------------------------------------------------------ > 1053 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:128: cc2430_rf_send(void > *payload, unsigned short payload_len) > 1054 ; > ----------------------------------------- > 1055 ; function cc2430_rf_send > 1056 ; > ----------------------------------------- > 0468 1057 _cc2430_rf_send: > 0468 C0 09 1058 push _bp > 046A 85 81 09 1059 mov _bp,sp > 046D AA 82 1060 mov r2,dpl > 046F AB 83 1061 mov r3,dph > 0471 AC F0 1062 mov r4,b > 1063 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:130: printf("sending %x > bytes.\n",payload_len); > 0473 C0 02 1064 push ar2 > 0475 C0 03 1065 push ar3 > 0477 C0 04 1066 push ar4 > 0479 E5 09 1067 mov a,_bp > 047B 24 FC 1068 add a,#0xfc > 047D F8 1069 mov r0,a > 047E E6 1070 mov a,@r0 > 047F C0 E0 1071 push acc > 0481 08 1072 inc r0 > 0482 E6 1073 mov a,@r0 > 0483 C0 E0 1074 push acc > > 0485 74 C1 1075 mov a,#__str_0 > 0487 C0 E0 1076 push acc > 0489 74 7C 1077 mov a,#(__str_0>> 8) > 048B C0 E0 1078 push acc > 048D 74 80 1079 mov a,#0x80 > 048F C0 E0 1080 push acc > 0491 12 3D 15 1081 lcall _printf > 0494 E5 81 1082 mov a,sp > 0496 24 FB 1083 add a,#0xfb > 0498 F5 81 1084 mov sp,a > 049A D0 04 1085 pop ar4 > 049C D0 03 1086 pop ar3 > 049E D0 02 1087 pop ar2 > 1088 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:131: printf("payload addr > %p.\n", payload); > 04A0 C0 02 1089 push ar2 > 04A2 C0 03 1090 push ar3 > 04A4 C0 04 1091 push ar4 > 04A6 C0 02 1092 push ar2 > 04A8 C0 03 1093 push ar3 > 04AA C0 04 1094 push ar4 > 04AC 74 D4 1095 mov a,#__str_1 > 04AE C0 E0 1096 push acc > 04B0 74 7C 1097 mov a,#(__str_1>> 8) > 04B2 C0 E0 1098 push acc > 04B4 74 80 1099 mov a,#0x80 > 04B6 C0 E0 1100 push acc > 04B8 12 3D 15 1101 lcall _printf > 04BB E5 81 1102 mov a,sp > 04BD 24 FA 1103 add a,#0xfa > > 04BF F5 81 1104 mov sp,a > 1105 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:132: printf("SP %x.\n", SP); > 04C1 AD 81 1106 mov r5,_SP > 04C3 7E 00 1107 mov r6,#0x00 > 04C5 C0 05 1108 push ar5 > 04C7 C0 06 1109 push ar6 > 04C9 74 E6 1110 mov a,#__str_2 > 04CB C0 E0 1111 push acc > 04CD 74 7C 1112 mov a,#(__str_2>> 8) > 04CF C0 E0 1113 push acc > 04D1 74 80 1114 mov a,#0x80 > 04D3 C0 E0 1115 push acc > 04D5 12 3D 15 1116 lcall _printf > 04D8 E5 81 1117 mov a,sp > 04DA 24 FB 1118 add a,#0xfb > 04DC F5 81 1119 mov sp,a > 04DE D0 04 1120 pop ar4 > 04E0 D0 03 1121 pop ar3 > 04E2 D0 02 1122 pop ar2 > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf_intr.c:133: return > cc2430_rf_send_b(payload, payload_len); > 04E4 E5 09 1124 mov a,_bp > 04E6 24 FC 1125 add a,#0xfc > 04E8 F8 1126 mov r0,a > 04E9 E6 1127 mov a,@r0 > 04EA C0 E0 1128 push acc > 04EC 08 1129 inc r0 > 04ED E6 1130 mov a,@r0 > 04EE C0 E0 1131 push acc > 04F0 8A 82 1132 mov dpl,r2 > 04F2 8B 83 1133 mov dph,r3 > 04F4 8C F0 1134 mov b,r4 > 04F6 78 8D 1135 mov r0,#_cc2430_rf_send_b > 04F8 79 82 1136 mov r1,#(_cc2430_rf_send_b > > > > > 8) > > > > > 04FA 7A 02 1137 mov r2,#(_cc2430_rf_send_b > > > > > 16) > > > > > 04FC 12 06 27 1138 lcall __sdcc_banked_call > 04FF AA 82 1139 mov r2,dpl > 0501 AB 83 1140 mov r3,dph > 0503 15 81 1141 dec sp > 0505 15 81 1142 dec sp > 0507 8A 82 1143 mov dpl,r2 > 0509 8B 83 1144 mov dph,r3 > 050B D0 09 1145 pop _bp > 050D 22 1146 ret > > 1115 > ;------------------------------------------------------------ > 1116 ;Allocation info for local variables > in function 'cc2430_rf_send_b' > 1117 > ;------------------------------------------------------------ > 1118 ;payload_len Allocated > to stack - offset -4 > 1119 ;payload Allocated > to stack - offset 1 > 1120 ;i Allocated > to registers r5 > 1121 ;counter Allocated > to registers r2 > 1122 > ;------------------------------------------------------------ > 1123 ; > ../../cpu/cc2430/dev/cc2430_rf.c:160: cc2430_rf_send_b(void *payload, > unsigned short payload_len) __banked > 1124 ; > ----------------------------------------- > 1125 ; function cc2430_rf_send_b > 1126 ; > ----------------------------------------- > 828D 1127 _cc2430_rf_send_b: > 828D C0 09 1128 push _bp > 828F 85 81 09 1129 mov _bp,sp > 8292 C0 82 1130 push dpl > 8294 C0 83 1131 push dph > 8296 C0 F0 1132 push b > 1133 ; > ../../cpu/cc2430/dev/cc2430_rf.c:164: printf("sending %x > bytes.\n",payload_len); > 8298 E5 09 1134 mov a,_bp > 829A 24 FC 1135 add a,#0xfc > 829C F8 1136 mov r0,a > 829D E6 1137 mov a,@r0 > 829E C0 E0 1138 push acc > 82A0 08 1139 inc r0 > 82A1 E6 1140 mov a,@r0 > 82A2 C0 E0 1141 push acc > 82A4 74 31 1142 mov a,#__str_2 > 82A6 C0 E0 1143 push acc > 82A8 74 7C 1144 mov a,#(__str_2>> 8) > 82AA C0 E0 1145 push acc > 82AC 74 80 1146 mov a,#0x80 > 82AE C0 E0 1147 push acc > 82B0 12 3D 15 1148 lcall _printf > 82B3 E5 81 1149 mov a,sp > 82B5 24 FB 1150 add a,#0xfb > 82B7 F5 81 1151 mov sp,a > 1152 ; > ../../cpu/cc2430/dev/cc2430_rf.c:165: printf("payload addr %p.\n", > payload); > 82B9 A8 09 1153 mov r0,_bp > 82BB 08 1154 inc r0 > 82BC E6 1155 mov a,@r0 > 82BD C0 E0 1156 push acc > 82BF 08 1157 inc r0 > 82C0 E6 1158 mov a,@r0 > 82C1 C0 E0 1159 push acc > 82C3 08 1160 inc r0 > 82C4 E6 1161 mov a,@r0 > 82C5 C0 E0 1162 push acc > 82C7 74 44 1163 mov a,#__str_3 > 82C9 C0 E0 1164 push acc > 82CB 74 7C 1165 mov a,#(__str_3>> 8) > 82CD C0 E0 1166 push acc > 82CF 74 80 1167 mov a,#0x80 > 82D1 C0 E0 1168 push acc > 82D3 12 3D 15 1169 lcall _printf > 82D6 E5 81 1170 mov a,sp > 82D8 24 FA 1171 add a,#0xfa > 82DA F5 81 1172 mov sp,a > 1173 ; > ../../cpu/cc2430/dev/cc2430_rf.c:166: printf("SP %x.\n", SP); > 82DC AD 81 1174 mov r5,_SP > 82DE 7E 00 1175 mov r6,#0x00 > 82E0 C0 05 1176 push ar5 > 82E2 C0 06 1177 push ar6 > 82E4 74 56 1178 mov a,#__str_4 > 82E6 C0 E0 1179 push acc > 82E8 74 7C 1180 mov a,#(__str_4>> 8) > 82EA C0 E0 1181 push acc > 82EC 74 80 1182 mov a,#0x80 > 82EE C0 E0 1183 push acc > 82F0 12 3D 15 1184 lcall _printf > 82F3 E5 81 1185 mov a,sp > 82F5 24 FB 1186 add a,#0xfb > 82F7 F5 81 1187 mov sp,a > > > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for > Conference > attendees to learn about information security's most important issues > through > interactions with peers, luminaries and emerging and established > companies.http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Sdcc-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies.http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Sdcc-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > ------------------------------------------------------------------------------ > Throughout its 18-year history, RSA Conference consistently attracts the > world's best and brightest in the field, creating opportunities for Conference > attendees to learn about information security's most important issues through > interactions with peers, luminaries and emerging and established companies.http://p.sf.net/sfu/rsaconf-dev2dev > _______________________________________________ > Sdcc-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/sdcc-user > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta.http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Sdcc-user mailing lis...@li...https://lists.sourceforge.net/lists/listinfo/sdcc-user > > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > |
From: Frieder F. <fri...@we...> - 2010-02-26 11:39:26
Attachments:
stackadjust.c
|
Hi Sébastien, Am 26.02.2010 10:02, schrieb Sébastien Lorquet: > probably off topic, sorry, but what I miss in the 8051 port is a 16 > bit-stack pointer in xdata mode :( Would swapping out contents of the 8051 hardware stack to xdata memory help? Appending untested sample code that tries to implement this. (expect some bugs in that code) You'd have to call _stackadjust at strategic places in your code. (eventually you can patch the function genCall in sdcc/sdcc/src/mcs51/gen.c to additionally emit an lcall __stackadjust (well, probably not a good idea)) Compile with: sdcc --std-sdcc99 -c stackadjust.c Occasionally swapping in and out is probably cheaper than always emulating a 16 bit-stack pointer in xdata mode. Greetings, Frieder /*-----8<--------------stackadjust.c----------------------------------*/ /* GPL+LE */ #include <8052.h> #define STACK_SWAP_WATERMARK 0x18 #define STACK_SWAP_SIZE 0x10 #define STACK_SWAP_HYSTERESIS 0x08 unsigned char __xdata stack_swap_area[0x200]; unsigned char __xdata * __data stack_swap_ptr = stack_swap_area; /* defined in crtstart.asm */ extern __idata unsigned char* _start__stack; /* inlineable helper functions *similar* to memcpy */ static void inline memcpy_xi (__xdata unsigned char* dst, __idata unsigned char* src, unsigned char size) { do { *dst++ = *src++; } while( --size ); } static void inline memcpy_ix (__idata unsigned char* dst, __xdata unsigned char* src, unsigned char size) { do { *dst++ = *src++; } while( --size ); } static void inline memcpy_ii (__idata unsigned char* dst, __idata unsigned char* src, unsigned char size) { do { *dst++ = *src++; } while( --size ); } static void inline memcpy_ii_topdown (__idata unsigned char* dst, __idata unsigned char* src, unsigned char size) { src += size; dst += size; do { *--dst = *--src; } while( --size ); } /* Untested! Just something that could be used as a start for an implementation in assembler * Checks whether the 8051 hardware stack is above or below a watermark * and then eventually swaps content to/from xdata memory */ void _stackadjust (void) { if (SP >= (unsigned char)((unsigned char)&_start__stack + STACK_SWAP_WATERMARK + STACK_SWAP_HYSTERESIS/2)) { /* 8051 hardware stack was too large */ __critical { // copying to external memory memcpy_xi (stack_swap_ptr, (unsigned char __idata *)&_start__stack, STACK_SWAP_SIZE ); stack_swap_ptr += STACK_SWAP_SIZE; // moving contents of stack memcpy_ii ( (unsigned char __idata *)&_start__stack, (unsigned char __idata *)&_start__stack + STACK_SWAP_SIZE, (unsigned char)(SP - (unsigned char)&_start__stack - STACK_SWAP_SIZE)); SP -= STACK_SWAP_SIZE; } } else if ( SP <= (unsigned char)((unsigned char)&_start__stack + STACK_SWAP_WATERMARK - STACK_SWAP_HYSTERESIS/2) && stack_swap_ptr != stack_swap_area ) { __critical { SP += STACK_SWAP_SIZE; // copying contents memcpy_ii_topdown ( (unsigned char __idata *)&_start__stack + STACK_SWAP_SIZE, (unsigned char __idata *)&_start__stack, (SP - (unsigned char)&_start__stack - STACK_SWAP_SIZE)); // copying from external memory memcpy_ix ((unsigned char __idata *)&_start__stack, stack_swap_ptr, STACK_SWAP_SIZE ); stack_swap_ptr -= STACK_SWAP_SIZE; } } } |
From: Sébastien L. <sq...@gm...> - 2010-02-26 14:31:03
|
Oh, that's a pretty cool idea ! Thanks for the tip! Sebastien </offtopic> :-) On Fri, Feb 26, 2010 at 12:38 PM, Frieder Ferlemann < fri...@we...> wrote: > Hi Sébastien, > > Am 26.02.2010 10:02, schrieb Sébastien Lorquet: > > probably off topic, sorry, but what I miss in the 8051 port is a 16 > > bit-stack pointer in xdata mode :( > > Would swapping out contents of the 8051 hardware stack to > xdata memory help? > > Appending untested sample code that tries to implement this. > (expect some bugs in that code) > > You'd have to call _stackadjust at strategic places in your code. > (eventually you can patch the function genCall in sdcc/sdcc/src/mcs51/gen.c > to additionally emit an lcall __stackadjust (well, probably not a good > idea)) > > Compile with: sdcc --std-sdcc99 -c stackadjust.c > > Occasionally swapping in and out is probably cheaper than > always emulating a 16 bit-stack pointer in xdata mode. > > Greetings, > Frieder > > > > > > /*-----8<--------------stackadjust.c----------------------------------*/ > /* GPL+LE */ > > #include <8052.h> > > #define STACK_SWAP_WATERMARK 0x18 > #define STACK_SWAP_SIZE 0x10 > #define STACK_SWAP_HYSTERESIS 0x08 > > unsigned char __xdata stack_swap_area[0x200]; > unsigned char __xdata * __data stack_swap_ptr = stack_swap_area; > > /* defined in crtstart.asm */ > extern __idata unsigned char* _start__stack; > > /* inlineable helper functions *similar* to memcpy */ > static void inline memcpy_xi (__xdata unsigned char* dst, __idata unsigned > char* src, unsigned char size) > { > do > { > *dst++ = *src++; > } while( --size ); > } > static void inline memcpy_ix (__idata unsigned char* dst, __xdata unsigned > char* src, unsigned char size) > { > do > { > *dst++ = *src++; > } while( --size ); > } > static void inline memcpy_ii (__idata unsigned char* dst, __idata unsigned > char* src, unsigned char size) > { > do > { > *dst++ = *src++; > } while( --size ); > } > static void inline memcpy_ii_topdown (__idata unsigned char* dst, __idata > unsigned char* src, unsigned char size) > { > src += size; > dst += size; > do > { > *--dst = *--src; > } while( --size ); > } > > > /* Untested! Just something that could be used as a start for an > implementation in assembler > * Checks whether the 8051 hardware stack is above or below a watermark > * and then eventually swaps content to/from xdata memory > */ > void _stackadjust (void) > { > if (SP >= (unsigned char)((unsigned char)&_start__stack + > STACK_SWAP_WATERMARK + STACK_SWAP_HYSTERESIS/2)) > { > /* 8051 hardware stack was too large */ > __critical > { > // copying to external memory > memcpy_xi (stack_swap_ptr, (unsigned char __idata > *)&_start__stack, STACK_SWAP_SIZE ); > stack_swap_ptr += STACK_SWAP_SIZE; > > // moving contents of stack > memcpy_ii ( (unsigned char __idata *)&_start__stack, > (unsigned char __idata *)&_start__stack + > STACK_SWAP_SIZE, > (unsigned char)(SP - (unsigned char)&_start__stack - > STACK_SWAP_SIZE)); > > SP -= STACK_SWAP_SIZE; > } > } else if ( SP <= (unsigned char)((unsigned char)&_start__stack + > STACK_SWAP_WATERMARK - STACK_SWAP_HYSTERESIS/2) && > stack_swap_ptr != stack_swap_area ) > { > __critical > { > SP += STACK_SWAP_SIZE; > > // copying contents > memcpy_ii_topdown ( (unsigned char __idata *)&_start__stack + > STACK_SWAP_SIZE, > (unsigned char __idata *)&_start__stack, > (SP - (unsigned char)&_start__stack - > STACK_SWAP_SIZE)); > > // copying from external memory > memcpy_ix ((unsigned char __idata *)&_start__stack, > stack_swap_ptr, STACK_SWAP_SIZE ); > stack_swap_ptr -= STACK_SWAP_SIZE; > } > } > } > > > > ------------------------------------------------------------------------------ > Download Intel® Parallel Studio Eval > Try the new software tools for yourself. Speed compiling, find bugs > proactively, and fine-tune applications for parallel performance. > See why Intel Parallel Studio got high marks during beta. > http://p.sf.net/sfu/intel-sw-dev > _______________________________________________ > Sdcc-user mailing list > Sdc...@li... > https://lists.sourceforge.net/lists/listinfo/sdcc-user > > |