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.
Hallo, I may have hit a bug in CX51 Ver 7.06. If a far variable is passed as an argument to printf function; it fails. I wrote this program:
#include <Philips\reg51m.h> #include <stdio.h> #pragma USERCLASS (HDATA=MYRAM) far long int l ; void main () { T2CON = 0x34 ; RCAP2H = 0xff ; RCAP2L = 0xdc ; SCON = 0x70 ; TI = 1 ; l = 100 ; printf("simple text message\n") ; printf("value = %ld\n",l) ; printf("value = %ld\n",12345678L) ; }
; printf("simple text message\n") ; ; SOURCE LINE # 16 MOV R3,#BYTE2 (?SC_0) MOV R2,#HIGH (?SC_0) MOV R1,#LOW (?SC_0) LCALL _printf ; printf("value = %ld\n",l) ; ; SOURCE LINE # 17 MOV R3,#BYTE2 (l) MOV R2,#HIGH (l) MOV R1,#LOW (l) LCALL ?C?LLDPTR MOV ?_printf?BYTE+06H,R7 MOV ?_printf?BYTE+05H,R6 MOV ?_printf?BYTE+04H,R5 MOV ?_printf?BYTE+03H,R4 LCALL _printf ; printf("value = %ld\n",12345678L) ; ; SOURCE LINE # 18 MOV R3,#BYTE2 (?SC_21) MOV R2,#HIGH (?SC_21) MOV R1,#LOW (?SC_21) MOV ?_printf?BYTE+06H,#04EH MOV ?_printf?BYTE+05H,#061H MOV ?_printf?BYTE+04H,#0BCH MOV ?_printf?BYTE+03H,#00H LJMP _printf
Hallo, Thanks! I will try to download the upgrade. I did not debug, but the error is obvious in the assembler code generated. The pointer to format string is simply not passed to printf function. As a result, there is no output. mk