We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
Dear all, I have problems with string in C51, and confused about the array and ptr processing in C51 while investigating the assembly code generated. What is C_CSTOPTR and C_ISTOPTR for in the code? Please note C_CSTOPTR is in char* access code, and C_ISTOPTR is in int[] code.
71 1 unsigned char *cp = (unsigned char *)malloc(5); 72 1 unsigned char ca[5]; 73 1 unsigned int *ia = (unsigned int *)malloc(10); 74 1 unsigned int ip[5]; 75 1 76 1 for (i=0; i<5; i++) { 77 2 ca[i] = i; 78 2 cp[i] = i; 79 2 ia[i] = i; 80 2 ip[i] = i; 81 2 }
; SOURCE LINE # 77 0034 AF00 R MOV R7,i+01H 0036 7400 R MOV A,#LOW ca 0038 2500 R ADD A,i+01H 003A F582 MOV DPL,A 003C E500 R MOV A,i 003E 3400 R ADDC A,#HIGH ca 0040 F583 MOV DPH,A 0042 EF MOV A,R7 0043 F0 MOVX @DPTR,A ; SOURCE LINE # 78 0044 900000 R MOV DPTR,#cp 0047 E0 MOVX A,@DPTR 0048 FB MOV R3,A 0049 A3 INC DPTR 004A E0 MOVX A,@DPTR 004B FA MOV R2,A 004C A3 INC DPTR 004D E0 MOVX A,@DPTR 004E F9 MOV R1,A 004F 850082 R MOV DPL,i+01H 0052 850083 R MOV DPH,i 0055 EF MOV A,R7 0056 120000 E LCALL ?C_CSTOPTR ; SOURCE LINE # 79 0059 E500 R MOV A,i+01H 005B 25E0 ADD A,ACC 005D FF MOV R7,A 005E E500 R MOV A,i 0060 33 RLC A 0061 FE MOV R6,A 0062 900000 R MOV DPTR,#ia 0065 E0 MOVX A,@DPTR 0066 FB MOV R3,A 0067 A3 INC DPTR 0068 E0 MOVX A,@DPTR 0069 FA MOV R2,A 006A A3 INC DPTR 006B E0 MOVX A,@DPTR 006C F9 MOV R1,A 006D 8F82 MOV DPL,R7 006F 8E83 MOV DPH,R6 0071 E500 R MOV A,i 0073 8500F0 R MOV B,i+01H 0076 120000 E LCALL ?C_ISTOPTR ; SOURCE LINE # 80 0079 E500 R MOV A,i+01H 007B 25E0 ADD A,ACC 007D FF MOV R7,A 007E E500 R MOV A,i 0080 33 RLC A 0081 FE MOV R6,A 0082 7400 R MOV A,#LOW ip 0084 2F ADD A,R7 0085 F582 MOV DPL,A 0087 EE MOV A,R6 0088 3400 R ADDC A,#HIGH ip 008A F583 MOV DPH,A 008C E500 R MOV A,i 008E F0 MOVX @DPTR,A 008F A3 INC DPTR 0090 E500 R MOV A,i+01H 0092 F0 MOVX @DPTR,A
I'm afraid there's not enough detail there to draw any conclusions. Can you produce some small code snippets to illustrate the problems, and post them here? Is passing char[] to a function expecting char* creates a problem? In general 'C', they should be equivalent; In C51, I think you may well have to consider carefully the memory spaces involved?