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:
> >>>>
> >>>> u...@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
> > [email protected]
> > 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/sdcc-user