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

lpc2103 sprintf problem

Hi I do have problems with the sprintf function and the Keil compiler. The program works nicely until I increase the amount of functions, even if I don't use them. First I get the
"%02d,%d"
into the buffer if I define one extra function but the program stops working if I define more functions.

I made my own, incomplete sprintf function and then it works perfectly.

I have tried to play the size of the following parameters in the Startup.s file:
USR_Stack_Size EQU 0x00000400
Heap_Size EQU 0x00000400
but without any success.

If anyone has any clue I would be very thankful.

Regards
Gudjon

Parents Reply Children
  • Hi Tamir

    Thanks for the answer. I don't have any nested calls to sprintf. The main loop of the code looks like this (a bit simplified):

    int
    main ()
    {
      char buf[30];
      char fname[30];
      unsigned char ch;
      Initialize ();
      UART0Initialize (57600);
      UART1Initialize (57600);
      CCR=0x11;
      T1TCR = 0x1;
      while (1)
        {
              ch=UART0ReadChar_nostop ();
          if (ch=='g')
                {
                  sprintf(buf,"%04d.%02d.%02d %02d:%02d:%02d\r\n",(int) YEAR , (int) MONTH, (int) DOM, (int) HOUR, (int) MIN, (int) SEC);
                  UART0WriteString((unsigned char *) buf);
                    if (0==VNC1L_DiskPresent ())
                      {
                        sprintf(fname, "%02d%02d%02d%02d.dat",((int) YEAR%100), (int) MONTH, (int) DOM, (int) HOUR);
                        VNC1L_FileOpenWrite((unsigned char*) fname);
                        VNC1L_FileWrite(buf);
                        VNC1L_FileClose((unsigned char*) fname);
                        VNC1L_SuspendMonitor();
                        UART0WriteString((unsigned char *) fname);
                      } else {
                        sprintf(buf,"No disk found\n");
                    UART0WriteString((unsigned char *) buf);
                      }
                }
        }
    }
    


    Then I added a very simple function definition without using it and the code stops working.

    When you ask for the value of R14, is it during the call to sprintf you mean? I have to admit that I had some difficulties debugging that portion.

    I think I will have to live with my tiny_sprintf function until I get more familiar with the microcontroller.

    Regards
    Gudjon

  • what do you mean by "the program stops working"? does your processor enter an exception mode? if so, you can try to figure out what the last instruction executed was before the exception by looking at R14 minus 8 (when in abort or under exception modes). if no exception occurs - what does happen? again, what does "stops working" mean?