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.
Hi, I'm trying to cram my software into 8k and noticed the following regarding array initialization. Regardless of the size of the array, a call to a library function COPY is made. In the attached listing file, you can see that the COPY uses 19 bytes of code spac, while the same initialization could be done is 9 bytes of code. I'm typically using small arrays to update device parameters in i2c messages, the i2c code accepts a pointer to a buffer and buffer size of the data to transmit.
C51 COMPILER V7.20 MAIN 11/25/2004 10:54:54 PAGE 1 C51 COMPILER V7.20, COMPILATION OF MODULE MAIN OBJECT MODULE PLACED IN main.OBJ COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND CODE line level source 1 2 3 void main ( void ) 4 { 5 1 unsigned char temp[3] = {0xDE, 0xAD, 0xFF}; 6 1 7 1 temp[0] = 0xC0; 8 1 temp[1] = 0xFF; 9 1 temp[2] = 0xEE; 10 1 11 1 } C51 COMPILER V7.20 MAIN 11/25/2004 10:54:54 PAGE 2 ASSEMBLY LISTING OF GENERATED OBJECT CODE ; FUNCTION main (BEGIN) ; SOURCE LINE # 3 ; SOURCE LINE # 4 ; SOURCE LINE # 5 0000 7800 R MOV R0,#LOW temp 0002 7C00 R MOV R4,#HIGH temp 0004 7D00 MOV R5,#00H 0006 7BFF MOV R3,#0FFH 0008 7A00 R MOV R2,#HIGH _?ix1000 000A 7900 R MOV R1,#LOW _?ix1000 000C 7E00 MOV R6,#00H 000E 7F03 MOV R7,#03H 0010 120000 E LCALL ?C?COPY ; SOURCE LINE # 7 0013 7500C0 R MOV temp,#0C0H ; SOURCE LINE # 8 0016 7500FF R MOV temp+01H,#0FFH ; SOURCE LINE # 9 0019 7500EE R MOV temp+02H,#0EEH ; SOURCE LINE # 11 001C 22 RET ; FUNCTION main (END) MODULE INFORMATION: STATIC OVERLAYABLE CODE SIZE = 29 ---- CONSTANT SIZE = 3 ---- XDATA SIZE = ---- ---- PDATA SIZE = ---- ---- DATA SIZE = ---- 3 IDATA SIZE = ---- ---- BIT SIZE = ---- ---- END OF MODULE INFORMATION. C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
Hi, Try to use code unsigned char temp[3] = {0xDE, 0xAD, 0xFF}; Hugs, Rudolf