OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5230|回复: 9

关于printf函数

[复制链接]

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2017-11-19
在线时间
30 小时
发表于 2017-12-3 18:14:56 | 显示全部楼层 |阅读模式
1金钱
求问原子哥,printf 函数为什么可以发送任何符号都串口助手呢?

很是不解啊,,求助!!!!

最佳答案

查看完整内容[请看2#楼]

很简单啊。。。所有的可见不可见符号,都可以由二进制编码唯一表述。而printf说是打印函数,但是本质上就是格式化符号函数,将给定的符号——或者说是二进制编码按照一定格式输出。当然,输出到哪里,就看重定向了。事实上,只要重定向部分做得好,可以输出到任何总线、任何设备。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

2

主题

760

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
4163
金钱
4163
注册时间
2017-10-24
在线时间
251 小时
发表于 2017-12-3 18:14:57 | 显示全部楼层
很简单啊。。。所有的可见不可见符号,都可以由二进制编码唯一表述。而printf说是打印函数,但是本质上就是格式化符号函数,将给定的符号——或者说是二进制编码按照一定格式输出。当然,输出到哪里,就看重定向了。事实上,只要重定向部分做得好,可以输出到任何总线、任何设备。
十六进制带我飞。
回复

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6629
金钱
6629
注册时间
2016-5-29
在线时间
906 小时
发表于 2017-12-3 19:48:58 | 显示全部楼层
这个函数就是打印的功能嘛..设计如此..
回复

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2017-11-19
在线时间
30 小时
 楼主| 发表于 2017-12-3 20:14:56 | 显示全部楼层
操作系统 发表于 2017-12-3 19:48
这个函数就是打印的功能嘛..设计如此..

可以说的具体点吗?重定向又是什么用处啊?
回复

使用道具 举报

18

主题

40

帖子

0

精华

初级会员

Rank: 2

积分
183
金钱
183
注册时间
2017-11-19
在线时间
30 小时
 楼主| 发表于 2017-12-3 20:17:59 | 显示全部楼层
操作系统 发表于 2017-12-3 19:48
这个函数就是打印的功能嘛..设计如此..

你的宣传成功激起了我的好奇心
回复

使用道具 举报

558

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
164866
金钱
164866
注册时间
2010-12-1
在线时间
2099 小时
发表于 2017-12-4 01:07:19 | 显示全部楼层
你可以尝试自己写一个,然后就知道为什么了。不知道的多百度
回复

使用道具 举报

50

主题

1804

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6629
金钱
6629
注册时间
2016-5-29
在线时间
906 小时
发表于 2017-12-4 09:03:33 | 显示全部楼层
lsx0812 发表于 2017-12-3 20:17
你的宣传成功激起了我的好奇心

我宣传了什么??
回复

使用道具 举报

1

主题

15

帖子

0

精华

新手上路

积分
42
金钱
42
注册时间
2016-9-26
在线时间
7 小时
发表于 2017-12-5 20:05:34 | 显示全部楼层
这个事比较牛的函数   不定个数参数 平时建议用fprintf  ,安全点
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2015-10-15
在线时间
31 小时
发表于 2017-12-13 00:05:16 | 显示全部楼层
本帖最后由 lpc17707020887 于 2017-12-13 00:16 编辑

1111111111
路漫漫其修远兮,吾将上下而求索
回复

使用道具 举报

0

主题

11

帖子

0

精华

初级会员

Rank: 2

积分
155
金钱
155
注册时间
2015-10-15
在线时间
31 小时
发表于 2017-12-13 00:13:35 | 显示全部楼层
[mw_shl_code=c,true]
//看到朋友问了一下这个打印调试信息的问题,我分享一下我现在用在freertos里面的打印输出调试信息的代码的实现吧
//**************************************************************************************************
//**************************************************************************************************
//**************************************************************************************************
//下面是debug.h文件的内容
#ifndef  _DEBUG_H
#define         _DEBUG_H

//1、头文件
/********************************************************************************************************************************************************************/
#include "stm32f1xx_hal.h"
#include "usart.h"

//2、宏定义
/********************************************************************************************************************************************************************/
#define DEBUG_ON  1    //DEBUG_SWITCH为ON的时候,表示开启仿真
#define DEBUG_OFF 0    //如果DEBUG_SWITCH为OFF的时候,表示关闭仿真

#define  DEBUG_PIN_TOGGLE     HAL_GPIO_TogglePin(GPIOA,GPIO_PIN_11)


#define DEBUG_SWITCH   DEBUG_ON        

#if DEBUG_SWITCH==DEBUG_ON
                #define TRACE(x...)   PRINTF(x)
#else
                #define TRACE(x...)
#endif

//3、类型定义
/********************************************************************************************************************************************************************/

//4、变量声明
/********************************************************************************************************************************************************************/


//5、函数声明
/********************************************************************************************************************************************************************/
void PRINTF(char *format, ...);

#endif









//**************************************************************************************************
//**************************************************************************************************
//**************************************************************************************************
//下面是debug.c文件的内容

#include "debug.h"
#include "cmsis_os.h"
#include "string.h"
#include "stdarg.h"




//获取当前中断情况--返回0表示不在中断中,
//非0表示cpu被中断占用,且返回数字为中断向量编号
static int inHandlerMode (void)
{
                return __get_IPSR() != 0;
}

#define PRINTF_BUFFER_LENGTH 200
char printf_buff[PRINTF_BUFFER_LENGTH];
/**********************************************************************
** 函数名称         RINTF
** 创建人           :liupcngcheng
** 创建日期         :2017 2017/11/07 18:51
** 最新修改人       :liupcngcheng
** 最近修改日期      :2017 2017/11/07 18:51
** 功能描述         :通过串口1打印调试信息
** 入口参数         :
** 返回参数         :
** 备注/注意        :
** QQ              : 1240612852
***********************************************************************/
void PRINTF(char *format, ...)
{
               
        
                if(inHandlerMode() != 0)                 //如果在中断中
                {
                                taskDISABLE_INTERRUPTS();      //关闭中断
                }
                else                                                      //如果不在中断中在任务中
                {
                                while(HAL_UART_GetState(&huart1) == HAL_UART_STATE_BUSY_TX)     //如果发现调试串口被其他任务占用,则当前任务切出
                                {
                                                osThreadYield();
                                }
                }
               
                va_list ap;             //定义一个指针
                va_start(ap, format);   //将第一个变参的地址赋值给ap指针
                memset(printf_buff,0x00,strlen(printf_buff));
               
                if(vsprintf(printf_buff, format, ap) > 0)     
                {
                        //串口调用
                        HAL_UART_Transmit(&huart1,(uint8_t*)printf_buff ,strlen(printf_buff),0x05);
                }
               
                va_end(ap);

                //if(inHandlerMode() != 0)       //打印完调试信息之后还在中断中,则开启中断触发
                //{
                taskENABLE_INTERRUPTS();
                //}
}[/mw_shl_code]
路漫漫其修远兮,吾将上下而求索
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-4-25 08:09

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表