打印
[MCU]

【MSP432评测】4、keil下printf好像有问题

[复制链接]
701|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
xinmeng_wit|  楼主 | 2020-4-16 08:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
上一贴调通了uart发送,打算重定向printf,发现不管怎么弄串口都没有输出。
主要做了如下工作:
1.重新实现fputc函数
2.重新实现fputs函数
3.heap空间调大

最后还是无法输出。

使用特权

评论回复

相关帖子

沙发
zhangmangui| | 2020-4-16 22:50 | 只看该作者
在看看你重定位的函数  这个肯定是可以实现的

使用特权

评论回复
板凳
xinmeng_wit|  楼主 | 2020-4-18 12:04 | 只看该作者
zhangmangui 发表于 2020-4-16 22:50
在看看你重定位的函数  这个肯定是可以实现的

#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
    set to 'Yes') calls __io_putchar() */
#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else
#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif /* __GNUC__ */

/**
   * @brief   Retargets the C library printf function to the USART.
   * @param   None    重定向C库printf函数
   * @retval None
   */
PUTCHAR_PROTOTYPE
{
   /* Place your implementation of fputc here */
   /* e.g. write a character to the USART */
        // Check if the TX buffer is empty first       
        while(!(EUSCI_A0->IFG & EUSCI_A_IFG_TXIFG));
        // Echo the received character back
        EUSCI_A0->TXBUF = (uint8_t)ch;       
   return (uint8_t)ch;
}

int fputs(const char *_ptr, register FILE *_fp)
{
  unsigned int i, len;

  len = strlen(_ptr);

  for(i=0 ; i<len ; i++)
  {
                // Check if the TX buffer is empty first       
                while(!(EUSCI_A0->IFG & EUSCI_A_IFG_TXIFG));
    EUSCI_A0->TXBUF = (unsigned char) _ptr;
  }

  return len;
}

使用特权

评论回复
地板
xinmeng_wit|  楼主 | 2020-4-18 12:05 | 只看该作者
zhangmangui 发表于 2020-4-16 22:50
在看看你重定位的函数  这个肯定是可以实现的

我还没有看到有人在keil上成功过

使用特权

评论回复
5
zhangmangui| | 2020-4-19 21:09 | 只看该作者
xinmeng_wit 发表于 2020-4-18 12:04
#ifdef __GNUC__
/* With GCC/RAISONANCE, small printf (option LD Linker->Libraries->Small printf
   ...

在STM32上  也是keil  实现了

使用特权

评论回复
6
zhangmangui| | 2020-4-19 21:11 | 只看该作者
xinmeng_wit 发表于 2020-4-18 12:05
我还没有看到有人在keil上成功过

首先:

添加printf的头文件 :
  #include <stdio.h>    //当时学C语言最熟悉的stdio.h


其次:


改写int fputc(int ch, FILE *f)函数

 

 

 

int fputc(int ch, FILE *f);

 

 

 

int fputc(int ch, FILE *f)
{

USART_SendData(USARTx, (uint8_t) ch);

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

return ch;
}

最后:

在keil 平台上改下设置:

Use MicroLIB  ->Target -> Code Generation -> 选中Use MicroLIB

当然,前提是你初始化了USARTx

使用特权

评论回复
7
xinmeng_wit|  楼主 | 2020-4-21 20:19 | 只看该作者
zhangmangui 发表于 2020-4-19 21:11
首先:

添加printf的头文件 :

STM32上没问题,现在是msp432确实有问题

使用特权

评论回复
8
zhangmangui| | 2020-4-21 21:46 | 只看该作者
xinmeng_wit 发表于 2020-4-21 20:19
STM32上没问题,现在是msp432确实有问题

恩  看来有些差异  需要再研究一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

68

主题

240

帖子

1

粉丝