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

Fprintf + Retarget from Flash Lib

Hello,

I am trying to print out a file from flash system on ITM dedug channel on STM32, but it only sends the first part, i can't figure out why...

The flash system reads the whole file (20 chars) into a buffer and i print it out with fprintf...

I have retarget the _sys_write to ITM, but it only sends the first 10 chars.

It seems like the fprintf function calls the _sys_write with a buffer of 10char's and then it seems like it forget to call the function again with the for the rest of the buffer, because when i get out of fprint function the last part of file is putted into the ram area where the first part was when printet...

It is proberly small error i have made :(

Here is my code:

#define db_print(...) fprintf(stderr, __VA_ARGS__)
char line[80];

   /* Read a file from default drive. */
   f = fopen ("M:\\xxx.TXT","r");
   if (f == NULL) {
      db_print ("\r\nFile not found!\n");
   }
   else {

        fgets (line,30,  f);
         db_print ("\r\ndata: %s",line);


      // process file content
      fclose (f);

And now the retarget function

int _sys_write (FILEHANDLE fh, const U8 *buf, U32 len, int mode) {
#ifdef STDIO
   if (fh == STDOUT) {
      /* Standard Output device. */
    //  for (  ; len; len--) {
    //     sendchar (*buf++);
    //  }
      return (0);
           }


          if (fh == STDERR) {
           for (  ; len; len--) {
                if (DEMCR & TRCENA) {
                while (ITM_Port32(0) == 0);
                        ITM_Port8(0) = *buf++;
                }
                }
                return (0);
          }


#endif
   if (fh > 0x8000) {
      return (-1);
   }
   return (__write (fh, buf, len));
}

Is there any other function i need to re-target??

Kasper