ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Воскресенье
5 мая
1334457 Топик полностью
petrd (27.07.2023 19:29 - 19:43, просмотров: 179) ответил Dingo на Через подмену _write не получилось, даже не вызывается. Разобрал до __sflush_r просмотром lss, там из неё ничего не вызывается.
Тож стало интересно. В MounRiverStudio это так решается. Оно так во всех примерах из коробки работает. Т.е. у меня наоборот получилось, оно работало и только после задался вопросом, а как это устроено? 
/*********************************************************************

* @fn _write

*

* @brief Support Printf Function

*

* @param *buf - UART send Data.

* size - Data length

*

* @return size: Data length

*/

__attribute__((used)) int _write(int fd, char *buf, int size)

{

int i;

for(i = 0; i < size; i++)

{

#if(DEBUG == DEBUG_UART1)

while(USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET);

USART_SendData(USART1, *buf++);

#elif(DEBUG == DEBUG_UART2)

while(USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET);

USART_SendData(USART2, *buf++);

#elif(DEBUG == DEBUG_UART3)

while(USART_GetFlagStatus(USART3, USART_FLAG_TC) == RESET);

USART_SendData(USART3, *buf++);

#endif

}

return size;

}

/*********************************************************************

* @fn _sbrk

*

* @brief Change the spatial position of data segment.

*

* @return size: Data length

*/

__attribute__((used)) void *_sbrk(ptrdiff_t incr)

{

extern char _end[];

extern char _heap_end[];

static char *curbrk = _end;

if ((curbrk + incr < _end) || (curbrk + incr > _heap_end))

return NULL - 1;

curbrk += incr;

return curbrk - incr;

}