Vit (11.12.2014 10:44, просмотров: 202) ответил Dingo на printf для STM32F407 и GCC. Пытаюсь безуспешно второй день. Хоть сам пиши. Есть хидер stdio.h, есть библиотека. В библиотеке реализован верхний уровень. Но нижний.. Это северный лис, товарищи! Предлагается написать кучку системных вызовов. Нашёл в
делал вывод в SWO (EmBlocks)
//--------------------------------------
//bsp\dbg_printf.h
#include <stdio.h>
int __swbuf_r(struct _reent *_ptr, int _c, FILE *_p);//for prinf by use Newlib Nano-branch
int fputc(int ch, FILE *stream);
//--------------------------------------
//bsp\dbg_printf.с
#include <bsp\dbg_printf.h>
#include <stm32f2xx.h>
#include <core_cm3.h>
__STATIC_INLINE uint32_t _ITM_SendChar (uint32_t ch)
{
if ((ITM->TCR & ITM_TCR_ITMENA_Msk) && /* ITM enabled */
(ITM->TER & (1UL << 0) ) ) /* ITM Port #0 enabled */
{
while (ITM->PORT[0].u32 == 0){
;
}
__ISB();
ITM->PORT[0].u8 = (uint8_t) ch;
}
return (ch);
}
//=========================
__attribute__ ((noinline))
int __swbuf_r(struct _reent *_ptr, int _c, FILE *_p){//Newlib Nano-branch
(void)_ptr;
(void)_p;
volatile int rc;
rc = _ITM_SendChar(_c);
rc = _c;
return rc;
}
__attribute__ ((noinline))
int fputc(int ch, FILE *stream){//Newlib Nano-branch
(void)stream;
volatile int rc;
rc = _ITM_SendChar(ch);
rc = ch;
return rc;
}
//--------------------------
//main
setbuf(stdout, NULL);