のねのBlog

パソコンの問題や、ソフトウェアの開発で起きた問題など書いていきます。よろしくお願いします^^。

STM32CubeIde HardFault その17

cantwriteの中で、__swsetup_rを呼んでいる。

/* Return true and set errno and stream error flag iff the given FILE
   cannot be written now.  */

#define    cantwrite(ptr, fp)                                     \
  ((((fp)->_flags & __SWR) == 0 || (fp)->_bf._base == NULL) && \
   __swsetup_r(ptr, fp))
/*
 * Write the given string to stdout, appending a newline.
 */

int
_puts_r (struct _reent *ptr,
       const char * s)
{
#ifdef _FVWRITE_IN_STREAMIO
(略)
#else
  int result = EOF;
  const char *p = s;
  FILE *fp;
  _REENT_SMALL_CHECK_INIT (ptr);

  fp = _stdout_r (ptr);
  CHECK_INIT (ptr, fp);
  _newlib_flockfile_start (fp);
  ORIENT (fp, -1);
  /* Make sure we can write.  */
  if (cantwrite (ptr, fp)) <==cantwite
    goto err;

  while (*p)
    {
      if (__sputc_r (ptr, *p++, fp) == EOF)
    goto err;
    }
  if (__sputc_r (ptr, '\n', fp) == EOF)
    goto err;

  result = '\n';

err:
  _newlib_flockfile_end (fp);
  return result;
#endif
}

#ifndef _REENT_ONLY

int
puts (char const * s)
{
  return _puts_r (_REENT, s);
}

#endif
#ifdef __GNUC__
    _ELIDABLE_INLINE int __sputc_r(struct _reent *_ptr, int _c, FILE *_p) {
    #ifdef __SCLE
        if ((_p->_flags & __SCLE) && _c == '\n')
      __sputc_r (_ptr, '\r', _p);
    #endif
    if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n'))
        return (*_p->_p++ = _c);
    else
        return (__swbuf_r(_ptr, _c, _p));
        }
#else
/*
 * This has been tuned to generate reasonable code on the vax using pcc
 */
#define       __sputc_raw_r(__ptr, __c, __p) \
   (--(__p)->_w < 0 ? \
       (__p)->_w >= (__p)->_lbfsize ? \
           (*(__p)->_p = (__c)), *(__p)->_p != '\n' ? \
               (int)*(__p)->_p++ : \
               __swbuf_r(__ptr, '\n', __p) : \
           __swbuf_r(__ptr, (int)(__c), __p) : \
       (*(__p)->_p = (__c), (int)*(__p)->_p++))
    #ifdef __SCLE
    #define __sputc_r(__ptr, __c, __p) \
            ((((__p)->_flags & __SCLE) && ((__c) == '\n')) \
              ? __sputc_raw_r(__ptr, '\r', (__p)) : 0 , \
            __sputc_raw_r((__ptr), (__c), (__p)))
    #else
    #define __sputc_r(__ptr, __c, __p) __sputc_raw_r(__ptr, __c, __p)
    #endif
#endif