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 took this sentence from the Getting started manual: ".. or if too many arguments are involved, fixed memory locations are used for those extra arguments." How do I use this? I intend to to do the follwing iap_programming_flash_data_dword(long int value, unsigned int address ); and iap_programming_flash_data_word(long int value, unsigned int address );
I implemented my self a assbembly code and I call it from a C function.So as I am already using R2 and R3 for the address (r2 and R3 hold the low and high part of DPTR). I think its not neccessary to do what you are suggesting.Am I wrong? Here is the assembly code I worte to implemnt: ; ********************************************************************** ; function: iap_program_data_dword SEGUNDA VERSAO ; prototype: unsigned char iap_program_data_byte(unsigned char val, unsigned int addr); ; description: programs a byte 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 END Problem: 1.The assembler and compiler sends a warning: REFERENCE MADE TO UNRESOLVED EXTERNAL I dont know why (maybe I am not paying the necessary attention!) but it seems that the compiler does not recognize the existence of such code.