尘世- 2024-03-27 22:11 采纳率: 80%
浏览 7
已结题

STM32标准库函数,fputc函数的多次使用

STM32系统函数使用问题

FILE __stdout;       
//定义_sys_exit()以避免使用半主机模式    
void _sys_exit(int x) 
{ 
    x = x; 
} 
//重定义fputc函数 
int fputc(int ch, FILE *f)
{      
    while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
    USART1->DR = (u8) ch;      
    return ch;
}
```c
int fputc_USART3(int ch,FILE *f )   //printf重定向  
{
    USART_SendData(USART3,(uint8_t)ch);
    while(USART_GetFlagStatus (USART3,USART_FLAG_TC) == RESET);
    return ch;
}

请问需要同时使用两次回调函数,但是函数名不能修改,一旦修改后出现问题,导致wifi 模块无法响应,总之两者必有一个失灵。请问这种情况如何弥补和处理。

```

  • 写回答

3条回答 默认 最新

  • 专家-皆知 2024-03-27 22:11
    关注

    引自免费微信小程序:皆我百晓生

    这个问题涉及到STM32标准库函数的使用和C语言编程,具体是关于fputc函数的多次使用和USART3的回调函数问题。

    首先,关于fputc函数,它是一个标准库函数,用于将单个字符写入到文件中。通常情况下,我们可以直接调用fputc函数来完成任务。但是,如果你需要同时使用两次回调函数,并且函数名不能修改,那么你可以考虑使用一个全局函数,并在每次调用时将不同的参数传入。例如:

    void my_print(int ch, FILE *f)
    {
        while((USART1->SR&0X40)==0);//循环发送,直到发送完毕   
        USART1->DR = (u8) ch;      
    }
    
    void my_print_USART3(int ch,FILE *f )   //printf重定向  
    {
        USART_SendData(USART3,(uint8_t)ch);
        while(USART_GetFlagStatus (USART3,USART_FLAG_TC) == RESET);
        my_print(ch, f);
    }
    

    然后,在调用my_print_USART3函数时,你可以传入不同的参数,例如:

    my_print_USART3('a', &file);
    my_print_USART3(10, &file);
    

    这样就可以实现同时使用两次回调函数的功能,而无需修改原有函数名。

    其次,关于USART3的回调函数,由于你无法修改函数名,因此可以考虑使用一个全局变量来保存回调函数的地址,然后在每次调用时,将不同的参数传入该全局变量。例如:

    void (*my_callback)(int ch, FILE *f);
    
    void my_USART3_callback(int ch, FILE *f)
    {
        my_callback(ch, f);
    }
    
    void my_print_USART3(int ch,FILE *f )   //printf重定向  
    {
        USART_SendData(USART3,(uint8_t)ch);
        while(USART_GetFlagStatus (USART3,USART_FLAG_TC) == RESET);
        my_callback(ch, f);
    }
    

    这样就可以实现在my_print_USART3函数中使用不同的回调函数。

    希望以上解答能够帮助你解决问题。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月4日
  • 已采纳回答 3月27日
  • 创建了问题 3月27日

悬赏问题

  • ¥15 springmvc ${validatedvalue} 是取值 取名称的有吗
  • ¥15 工价表引用工艺路线,应如何制作py和xml文件
  • ¥15 根据历史数据,推荐问题类型
  • ¥15 需要仿真图,简单的二阶系统实例
  • ¥15 stm32光控照明仿真
  • ¥15 使用人工智能的方法生成满足一定统计参数要求的随机数序列
  • ¥15 SENT协议中相关问题咨询
  • ¥15 URL地址href跳转问题
  • ¥15 mysql数据库备份恢复
  • ¥15 mmdetection mask-rcnn