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

printf retarget.c - data aborts

Hello,

I work with the AT91RM9200.

I have some problems with the retarget-function for the implementation of printf. It works but sometimes I get a data abort - maybe if the buffer for printf function is too small???

that's my function to transmit printf messages to the usart

int COM1_1_sendchar(int ch)
{
        if (ch == '\n')  {                              /* Check for CR */
        while (!(COM1_1->US_CSR & AT91C_US_TXRDY));      /* Wait for Empty Tx Buffer */
    //  COM1_1->US_THR = '\r';                       /* Output CR */
                AT91F_US_PutChar (COM1_1,'\r');
        }
        while (!(COM1_1->US_CSR & AT91C_US_TXRDY));      /* Wait for Empty Tx Buffer */
        return (COM1_1->US_THR = ch);                        /* Transmit Character */
}

retarget.c

#include <stdio.h>
#include <rt_misc.h>
#include <AT91RM9200.H>
#pragma import(__use_no_semihosting_swi)

extern int COM1_1_sendchar (int ch);    /* in usart.c */

struct __FILE { int handle; /* Add whatever you need here */ };
FILE __stdout;
FILE __stdin;

int fputc(int ch, FILE *f) {

  return (COM1_1_sendchar(ch));
}


int ferror(FILE *f) {
  /* Your implementation of ferror */
  return EOF;
}


void _ttywrch(int ch) {
  COM1_1_sendchar(ch);
}

void _sys_exit(int return_code) {
label:  goto label;  /* endless loop */
}

I hope somebody have a idea - because the problem with the data abort is not always but very often

best regards
Johannes

Parents
  • I have one printf() function in a ISR.

    That's very bad indeed. Calling printf() or one of its close relatives is just about the last thing you should ever consider doing in an ISR.

    As a rule of thumb, don't call any functions from an ISR. If the job at hand is complex enough that you feel an urge to split it into more than one function, it's probably not a job fit to be done by an ISR.

Reply
  • I have one printf() function in a ISR.

    That's very bad indeed. Calling printf() or one of its close relatives is just about the last thing you should ever consider doing in an ISR.

    As a rule of thumb, don't call any functions from an ISR. If the job at hand is complex enough that you feel an urge to split it into more than one function, it's probably not a job fit to be done by an ISR.

Children
No data