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.
I need to save a 32 bit variable to the flash. I am using the In Application Programming.I wrote a code starting from the function "program data byte" (in my case I made program_data_dword). The problem is that I receive the Warning: "REFERENCE MADE TO UNRESOLVED EXTERNAL", which means that the cpompiler does not find the code. I use the registers R4 to R7 to receive the long int value and R3 and R2 to save the address. Can anyone explain what I doing wrongly? Thanks. Amilcar Here is the code: ; ********************************************************************** ; function: iap_program_data_byte ; prototype: unsigned char iap_program_data_byte(unsigned char val, unsigned int addr); ; description: programs a dword in the flash. passed is the byte and the ; 16-bit address. zero is returned for success, non zero is returned for ; failiure. ; ********************************************************************** RSEG ?PR?_iap_program_data_dword?IAP _iap_program_data_dword: PUSH IE ; disable interrupts CLR EA MOV A,CMOD MOV R2,A ; store copy of CMOD JNB ACC.6,?IAPTWDOG ; if watchdog enabled then disable ANL CMOD,#0BFH ?IAPTWDOG: ORL AUXR1,#020H ; enable bootrom MOV R0,iap_freq ; osc frequency MOV R1,#02H MOV DPH,R2 ; address to program MOV DPL,R3 MOV A ,R4 ; data to write CALL 0FFF0H ; call iap routine MOV R7,A ; id in accumulator INC DPTR MOV A,R5 ; data to write CALL 0FFF0H ; call iap routine MOV R7,A ; id in accumulator INC DPTR MOV A,R6 ; data to write CALL 0FFF0H ; call iap routine MOV R7,A ; id in accumulator INC DPTR MOV A ,R7 ; data to write CALL 0FFF0H ; call iap routine MOV R7,A ; id in accumulator ANL AUXR1,#0DFH ; disable bootrom MOV CMOD,R2 ; restore CMOD (restore watchdog state) POP IE ; restore interrupts to initial state RET ; end of iap_program_data_dword
It sounds like you have specified NOREGPARMS or you have set the OPTIMIZE level so low that register parameters are not used. Jon