This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

89v51rd2 error 127

I am using P89V51RD2 for my project I have choosen this IC because it have 1K Ram
My programme is compiling but while linking I ma getting following errors.

*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  ask_disp_key_val
    MODULE:  mc_ad1.obj (MC_AD1)
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  chk_keys
    MODULE:  mc_ad1.obj (MC_AD1)
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  chk_test_over
    MODULE:  mc_ad1.obj (MC_AD1)
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  ask_disp_key_val
    MODULE:  mc_ad1.obj (MC_AD1)
    ADDRESS: 10014D3H
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  chk_keys
    MODULE:  mc_ad1.obj (MC_AD1)
    ADDRESS: 10014D9H
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  chk_test_over
    MODULE:  mc_ad1.obj (MC_AD1)
    ADDRESS: 10014DCH
*** ERROR L127: UNRESOLVED EXTERNAL SYMBOL
    SYMBOL:  MAIN
    MODULE:  C:\KEIL\C51\LIB\C51L.LIB (?C_INIT)
*** ERROR L128: REFERENCE MADE TO UNRESOLVED EXTERNAL
    SYMBOL:  MAIN
    MODULE:  C:\KEIL\C51\LIB\C51L.LIB (?C_INIT)
    ADDRESS: 1000E67H
Program Size: data=28.1 xdata=143 const=0 code=6729
Target not created

I am using some of the variables as xdata,I am confused whether this problem is because of xdata?
I have done the folloeing changes to startup file also

XDATASTART      EQU     0H      ; the absolute start-address of XDATA memory
XDATALEN        EQU     2ffH      ; the length of XDATA memory in bytes.

AUXR1 DATA  08EH               ; add SFR definition

STARTUP1:
                               ; enable on-chip xdata RAM
          ANL AUXR1,#NOT 02H   ; AUXR1/Bit 1 (clear to 0 to enable on-chip XRAM)

also my target settings are
memory model : large
code Rom : Large
Use onchip Rom:selected
Use onchi XRam :selected
Use Multiple DPTR : Selected

Please help me out.

Parents
  • I have included all my definations in a header file called mc_ad1.h

    //#include <REGX51.H>
    #include <REG51F.H>
    #include <intrins.h>
    //#include <8052.h>
    #include "mc_ad1.h"
    #include "eeprom.h"
    #include "hw_sw_def.h"
    
    //variables for eeprom
    unsigned char *read_ptr,*write_ptr;
    extern unsigned char rd_buffer;
    
    //variables for serial communication
    unsigned char ser_in_arr[5],*rec_ptr;
    unsigned char ser_out_arr[12],*tr_ptr;
    volatile bit SER_DATA_RDY_F,TR_RDY_F,COMM_OK_F;
    
    volatile unsigned int gptimer;
    
    unsigned char xdata test_no;                                          //1
    unsigned int xdata test_current1,test_current2,time1,time2,time3; //2,4,6,8,10
    
    unsigned int xdata tol_limit_low,tol_limit_high;
    unsigned int xdata req_count;
    unsigned int xdata corr_limit_low,corr_limit_high;
    unsigned int xdata dac_count,pulse_count;
    unsigned int adc_count;
    unsigned int dac_count_limit_low,dac_count_limit_high;
    volatile bit OFL_F,POL_F;
    unsigned char pol_cntr,ofl_cntr;
    volatile bit DAC_SET_F,ADC_READY_F,OUT_DATA_F = 0;
    unsigned int adc_count_arr[5];
    unsigned char index = 0;
    volatile bit CHK_CURRENT_F,NEG_F;
    unsigned char dac_out_delay_cnt = 0;
    
    
    unsigned char state_no,key_state_no;
    volatile bit ASK_KEY_F,KEY_HIT_F;
    unsigned char key_value;
    volatile bit START_F,TEST_MODE_F;
    
    volatile bit VIEW_ONLY_F,DISP_TIME_F;
    unsigned char xdata restore_disp_no;
    unsigned char set_pointer,blink_ptr;
    volatile bit SETT_ERR_F;
    unsigned char temp[6];
    
    unsigned int xdata time = 0;
    unsigned char xdata time_counter = 0,time_mode = 1;
    volatile bit START_TIME_F,NOTRIP_F,TRIP_F,DISP_UPDATE_F,DISP_CURRENT_F,CERR_F;
    
    void main(void)
    {
    init_timer0();
    init_timer1();
    init_serport();
    read_from_eeprom();
    chk_data();
    // test_no = 1;
    // default_set();
    delay_100_ms(2);
    init_int0();
    init_int1();
    key_state_no = INIT;
    state_no = INIT_TEST;
    reset_dac_out();
    disp_scr();
    while(1)
            {
            /*if(ADC_READY_F)
                {
                ADC_READY_F = 0;
                adc_read();
            //     current = calc_test_current(adc_count);
                disp_current(adc_count);
                delay_100_ms(5);
                    TEST1 = ~TEST1;
                }*/
    
         if(ASK_KEY_F)
            {
    //        P1^5 ^= 0x01;
            ASK_KEY_F = 0;
            ask_disp_key_val();
            }
    
        if(KEY_HIT_F)
            chk_keys();
    
        chk_test_over();
        }
    //remaining code(called functions below)
    }
    

    I have defined all the fuctions ,I am new to keil preeviously using sdcc compiler.I have tried to remove syntactical errors,but can't understand meaning of these errors.

Reply
  • I have included all my definations in a header file called mc_ad1.h

    //#include <REGX51.H>
    #include <REG51F.H>
    #include <intrins.h>
    //#include <8052.h>
    #include "mc_ad1.h"
    #include "eeprom.h"
    #include "hw_sw_def.h"
    
    //variables for eeprom
    unsigned char *read_ptr,*write_ptr;
    extern unsigned char rd_buffer;
    
    //variables for serial communication
    unsigned char ser_in_arr[5],*rec_ptr;
    unsigned char ser_out_arr[12],*tr_ptr;
    volatile bit SER_DATA_RDY_F,TR_RDY_F,COMM_OK_F;
    
    volatile unsigned int gptimer;
    
    unsigned char xdata test_no;                                          //1
    unsigned int xdata test_current1,test_current2,time1,time2,time3; //2,4,6,8,10
    
    unsigned int xdata tol_limit_low,tol_limit_high;
    unsigned int xdata req_count;
    unsigned int xdata corr_limit_low,corr_limit_high;
    unsigned int xdata dac_count,pulse_count;
    unsigned int adc_count;
    unsigned int dac_count_limit_low,dac_count_limit_high;
    volatile bit OFL_F,POL_F;
    unsigned char pol_cntr,ofl_cntr;
    volatile bit DAC_SET_F,ADC_READY_F,OUT_DATA_F = 0;
    unsigned int adc_count_arr[5];
    unsigned char index = 0;
    volatile bit CHK_CURRENT_F,NEG_F;
    unsigned char dac_out_delay_cnt = 0;
    
    
    unsigned char state_no,key_state_no;
    volatile bit ASK_KEY_F,KEY_HIT_F;
    unsigned char key_value;
    volatile bit START_F,TEST_MODE_F;
    
    volatile bit VIEW_ONLY_F,DISP_TIME_F;
    unsigned char xdata restore_disp_no;
    unsigned char set_pointer,blink_ptr;
    volatile bit SETT_ERR_F;
    unsigned char temp[6];
    
    unsigned int xdata time = 0;
    unsigned char xdata time_counter = 0,time_mode = 1;
    volatile bit START_TIME_F,NOTRIP_F,TRIP_F,DISP_UPDATE_F,DISP_CURRENT_F,CERR_F;
    
    void main(void)
    {
    init_timer0();
    init_timer1();
    init_serport();
    read_from_eeprom();
    chk_data();
    // test_no = 1;
    // default_set();
    delay_100_ms(2);
    init_int0();
    init_int1();
    key_state_no = INIT;
    state_no = INIT_TEST;
    reset_dac_out();
    disp_scr();
    while(1)
            {
            /*if(ADC_READY_F)
                {
                ADC_READY_F = 0;
                adc_read();
            //     current = calc_test_current(adc_count);
                disp_current(adc_count);
                delay_100_ms(5);
                    TEST1 = ~TEST1;
                }*/
    
         if(ASK_KEY_F)
            {
    //        P1^5 ^= 0x01;
            ASK_KEY_F = 0;
            ask_disp_key_val();
            }
    
        if(KEY_HIT_F)
            chk_keys();
    
        chk_test_over();
        }
    //remaining code(called functions below)
    }
    

    I have defined all the fuctions ,I am new to keil preeviously using sdcc compiler.I have tried to remove syntactical errors,but can't understand meaning of these errors.

Children